我有一个现有的表,需要不同的列用于不同的记录。我需要将其拆分为多个表以减少冗余吗?
表1:
productId typeId commonAttr1 commonAttr2 attrA1 attrB1 attrB2
_________________________________________________________________
1 1 1Avalue1 1Avalue2 value1
2 1 1Avalue1 1Avalue2 value2
3 2 2Bvalue1 2Bvalue2 value3 value4
4 2 2Bvalue3 2Bvalue4 value5 value6
" attrA1"仅适用于typeId = 1," attrB1"和" attrB2"仅适用于typeId = 2," commonAttr1"," commonAttr2"适用于两者。
可能有3个选项:
表1:
productId typeId commonAttr1 commonAttr2
___________________________________________
1 1 1Avalue1 1Avalue2
2 1 1Avalue1 1Avalue2
3 2 2Bvalue1 2Bvalue2
4 2 2Bvalue3 2Bvalue4
表2:
productId attrA1
__________________
1 value1
2 value2
表3:
productId attrB1 attrB2
___________________________
3 value3 value4
4 value5 value6
表1:
productId typeId commonAttr1 commonAttr2
___________________________________________
1 1 1Avalue1 1Avalue2
2 1 1Avalue1 1Avalue2
3 2 2Bvalue1 2Bvalue2
4 2 2Bvalue3 2Bvalue4
表2:
productId typeId key value
____________________________________
1 1 attrA1 value1
2 1 attrA1 value2
3 2 attrB1 value3
3 2 attrB2 value4
4 2 attrB1 value5
4 2 attrB2 value6
哪个选项更好或有其他解决方案吗?我个人认为选项2更好。
答案 0 :(得分:0)
4 一个包含productId
,typeId
,commonAttr1
,commonAttr2
,json
其中最后一列是其他键值对的JSON呈现。
EAV(实体 - 属性 - 值)架构存在问题;有时#4是一个有用的妥协。 More discussion
答案 1 :(得分:0)
当你有一个模式,其中公共属性存储在一个表中时,其他表存储在它们的从属表中,它被称为模型(基础)类型/子类型设计(或继承模型)。在此stackoverflow question中,您可以很好地正确实现它(以保持参照完整性)
希望有所帮助