2013-05-26 52 views
2

我有一个有20列的MySQL INNOB表,我想将一个外键约束添加到大约10列。如果需要多个约束,对每列需要单独的外键表?

我知道我可以用外键数据创建10个单独的表,然后将这些作为约束添加到初始表中 - 这是可能的,我之前完成了此操作。

问题 - 这将导致10个额外的表。是否有可能将这10个表(与外键数据)合并到一个表中,然后引用表/列作为约束条件?

我问,因为我可以看到我的数据库结束了很多外键表。

回答

2

理论上你可以使用一个表,但这是一个非常糟糕的设计,因为它不会为每个唯一的数据类型提供一个简单的枚举“域”,并且它会为每个唯一的数据类型乘以每个值表中的所有其他列,或换句话说,大约为每列元素平均数的10次幂。

把这个具体的条款,如果你只有5个唯一值每列和10列,这将导致与9,765,625记录表!我相信你会发现这将会非常低效!

这种数据乘法对于防止无关的NULL或列中的空字符串值是必要的,这会破坏您的外键关系。

为每个唯一的数据集创建一个不同的“域表”是很常见的,如果你的数据库中只有10个是“轻量级”的。

如果您不想为每个约束使用域表,则始终可以使用ENUM('value1', 'value2', ...)作为列数据类型而不是外键(这不需要您创建任何其他表)。

+0

欢呼声 - 感谢您的评论,我会为每个约束列表单独列表。 – user1105192