MySQL在表之间创建结构关系

时间:2011-09-30 08:58:34

标签: mysql database-design relational-database

我有2个表,一个包含项及其属性,它们是整数:

项目表:

item_id, property_a, property_b, property_c

和另一个单行表,其中包含这些属性的允许偏差, 整数:

允许偏差表:

property_a, property_b, property_c

这样可行,但两个表之间没有正式的关系,因此无法确保在以任何方式修改项目表时它们是同步的(除了手动或在应用程序级别上处理它)。

所以我的问题是 - 这种情况的最佳做法是什么?可以而且应该在数据库级别上建立这两个表的结构之间的某种关系,还是它本身很好?

我的一个想法是,因为偏差是一个单行表,只需将它放在项目表中,给它特定的虚拟项目,但我看到的问题是:

- 虚拟数据,在我迄今为止干净的数据库中不喜欢它 - 使与项目相关的查询复杂化 - 在一张桌子上混合苹果和橘子 - 如果需要多组允许的偏差,则难以扩展

1 个答案:

答案 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当你说“我的一个想法是,因为偏差是一个列表”你的意思是“我的一个想法是,因为偏差是一个表”?