Sql 针对记录保存自定义属性值的最佳数据库设计
在我们的系统中,我们可以拥有用户可以根据产品定义的自定义属性。e、 g.产品可以具有不同的属性,如品牌、型号、颜色、尺寸、电视尺寸、发布日期、性别、功率输出、制造商等 为此,我们有3个表,如下所述Sql 针对记录保存自定义属性值的最佳数据库设计,sql,sql-server,database,database-design,Sql,Sql Server,Database,Database Design,在我们的系统中,我们可以拥有用户可以根据产品定义的自定义属性。e、 g.产品可以具有不同的属性,如品牌、型号、颜色、尺寸、电视尺寸、发布日期、性别、功率输出、制造商等 为此,我们有3个表,如下所述 Product -Id -Name -Price Attribute -Id -Name -AttributeTypeId AttributeType -Id -Name 用作查找表的AttributeType只有6行来确定属性的类型[单行文本、多行文本
Product
-Id
-Name
-Price
Attribute
-Id
-Name
-AttributeTypeId
AttributeType
-Id
-Name
用作查找表的AttributeType只有6行来确定属性的类型[单行文本、多行文本、数字整数、数字小数、日期、日期时间]。这张桌子不会变
我是一个数据库初学者,正在努力决定用什么样的方式来存储产品的属性值。我可以想出3种方法,但我不能100%确定哪种方法最好
ProductCustomAttribute
-Id
-ProductId
-AttributeTypeId
-TextValue (NVARCHAR(MAX))
-IntegerValue (INTEGER)
-DecimalValue (DECIMAL)
-DateValue (DATETIME)
ProductCustomAttribute
-Id
-ProductId
-AttributeTypeId
-SingleLineValue (NVARCHAR(MAX))
-MultilineValue (NVARCHAR(MAX))
-IntegerValue (INTEGER)
-DecimalValue (DECIMAL)
-DateValue (DATETIME)
-DateTimeValue (DATETIME)
ProductCustomAttribute
-Id
-ProductId
-AttributeTypeId
-Value (NVARCHAR(MAX), will hold value for all types)
有什么好建议吗?我的观点是,选项1或2最好,但无法决定如何从这两个选项中进行选择
我倾向于选项1,因为尽管选项2更具可读性,但它也意味着更多的列。选项2为每种属性类型提供了一列,选项1为每种数据类型提供了一列,可用于6种属性类型
看起来您已尝试实现最大规格化。退一步,看看你的输入的性质。属性的类型会改变吗?根据你的设计,听起来会的。但如果没有,则可以删除属性类型的最后一个表。AttributeType表不会更改,它将始终有6行。我把它放进去是因为我想在我的设计中有一个描述性的值。实际上我会选择第三个选项。可能只有您的UI需要所有表。拉取数据时,选项#3将为您提供更好的性能。交叉发布:方法2是否因为字段更特定于域而优于1?因此,更容易添加属性类型特定的规则。我也倾向于这种方法,我能想到的唯一缺点是在每一行上都有两个额外的空列(尽管我对此不太在意)。如果有疑问,请更加具体。