我有2个表,一个包含项及其属性,它们是整数:
项目表:
item_id, property_a, property_b, property_c
和另一个单行表,其中包含这些属性的允许偏差, 整数:
允许偏差表:
property_a, property_b, property_c
这样可行,但两个表之间没有正式的关系,因此无法确保在以任何方式修改项目表时它们是同步的(除了手动或在应用程序级别上处理它)。
所以我的问题是 - 这种情况的最佳做法是什么?可以而且应该在数据库级别上建立这两个表的结构之间的某种关系,还是它本身很好?
我的一个想法是,因为偏差是一个单行表,只需将它放在项目表中,给它特定的虚拟项目,但我看到的问题是:
- 虚拟数据,在我迄今为止干净的数据库中不喜欢它 - 使与项目相关的查询复杂化 - 在一张桌子上混合苹果和橘子 - 如果需要多组允许的偏差,则难以扩展
答案 0 :(得分:0)
我认为你需要在这里进行一些规范化。
您可以采用以下方法:
项目表
id item
1 item1
item_property表
id item_id, property_id
1 1 1
2 1 2
3 1 3
允许偏差表
property_id, property_type
1 a
2 b
3 c
这将允许您在item_property表上设置FK约束,引用允许的偏差表和项表本身。它还应该允许没有所有属性的项目(没有空数据),并且如果有任何新属性出现(例如属性d),它还应该允许你添加新属性。
希望这有帮助!
PS当你说“我的一个想法是,因为偏差是一个列表”你的意思是“我的一个想法是,因为偏差是一个行表”?