我有一个现有的表,不同的记录需要不同的列。我是否需要将其拆分为多个表以减少冗余?
表 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。不要换。接受数据冗余。
2。将“attrA1”移动到新的 table2,将“attrB1”、“attrB2”移动到新的 table3。它会像:
表 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
3.创建一个新表以将列存储为键/值
表 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 更好。
最佳答案
如果您有一个架构,其中公共(public)属性存储在一个表中,而其他属性存储在它们的从属表中,则称为模型(基本)类型/子类型设计(或继承模型)。在这个计算器中 question你会很好地如何正确地实现它(为了保持参照完整性)
希望对你有帮助
关于mysql - 数据库设计,如何减少不同列的数据冗余,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38257966/