如果需要多个约束,是否需要为每列提供单独的外键表?

时间:2013-05-26 23:42:37

标签: mysql sql database foreign-keys innodb

我有一个包含20列的MySQL INNOB表,我想在大约10列中添加一个外键约束。

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

问题 - 这将导致10个额外的表格。是否可以将这10个表(带有外键数据)组合成1个表,然后引用表/列作为约束?

我问我可以看到我的数据库最终有很多外键表。

1 个答案:

答案 0 :(得分:2)

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

具体而言,如果每列只有5个唯一值,而10列,则会产生 9,765,625 记录的表格!我相信你会发现这会非常低效!

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

为每个唯一的数据集创建一个独特的“域表”很常见,如果您的数据库中只有10个,那就非常“轻松”。

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