在我们的系统中,我们可以拥有用户可以针对产品定义的自定义属性。例如产品可以有不同的属性,如制作,型号,颜色,尺寸,电视尺寸,发布日期,性别,功率输出,制造商等
为此,我们有3个表,如下所述。
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种属性类型的每种数据类型。
答案 0 :(得分:3)
如果可以将这些属性建模为核心数据表中的常规字段,请执行此操作。
如果因为这些额外字段是用户定义的,或者不能在您的核心设计中,那么这是不可能的,请尝试您的方法#2,因为:只要有可能,您需要定义数据类型,约束和规则以数据库可以强制执行它们的方式,并且应用程序不必冗余地解释和强制执行类型/约束/规则。