繁体   English   中英

SQL Server:如何存储和读取产品规格(标签)到数据库

[英]SQL Server : how to store and read product specifications (tags) to database

我需要你的帮助。

我正在创建一个电子商务网站,并碰触了产品规格。

我有下表

项目

ItemID    (1231)
ItemName  (Dell Inspiron)

眼镜

SpecID    (5342)   (5343)
ItemID    (1231)   (1231)
SpecName  (HDD)    (MEM)
SpecValue (500GB)  (4GB)

括号中的值是表格行。

这是将规格存储在数据库中的最佳方法吗?

以后如何查询? 可以说我需要HDD=500GBMEM=4GB所有产品吗?

是否可以从C#(asp.net)中的数据库中将其读取为具有子对象Specs的对象Items

有没有一种方法可以将所有规范合并到按ItemID分组的一个Items行中?

提前致谢。

您要暗示的是EAV( 实体属性值 )。 您可以阅读链接的Wiki,并且知道要查找的内容将使您开始进一步挖掘并找到针对特定EAV相关问题的C#/ EF / Linq / ASP.Net解决方案。

例如,一些不错的讨论就在这里。 实体属性值数据库与严格的关系模型电子商务问题

SQL Server CAT团队提出了有关性能和可伸缩性的语义数据建模最佳实践 ,这是必读的。

这是将规格存储在数据库中的最佳方法吗?

看来Item和Spec具有多对多关系。 因此,更好的设计如下所示:

Item(ItemId PK,ItemName)

ItemSpecs(ItemId,SpecId,SpecValue)

规格(SpecId PK,SpecName)

以后如何查询? 可以说我需要HDD = 500GB和MEM = 4GB的所有产品吗?

SELECT i.* FROM Items i, ItemSpecs is1, Specs s1, ItemSpecs is2, Specs s2
WHERE i.ItemId = is1.ItemId
AND is1.SpecId = s1.SpecId
AND s1.SpecName = 'HDD'
AND is1.SpecValue = '500GB'
AND i.ItemId = is2.ItemId
AND is2.SpecId = s2.SpecId
AND s2.SpecName = 'MEM'
AND is2.SpecValue = '4GB'

但是,通常您已经知道要查询的SpecId,因此不需要Specs上的联接。

是否可以从C#(asp.net)中的数据库中将其读取为具有子对象Specs的对象Items?

我不确定您的意思。

有没有一种方法可以将所有规范合并到按ItemID分组的一个Items行中?

仅当您事先知道规格数量或动态构造查询时。 规格越多,该行将具有更多列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM