2

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

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

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

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

4

1 回答 1

2

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

具体来说,如果每列只有 5 个唯一值和 10 列,那将产生一个包含9,765,625条记录的表!!!我敢肯定你会看到这将是非常低效的!

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

为每组独特的数据创建一个不同的“域表”是很常见的,如果您的数据库中只有 10 个,那就太“轻”了。

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

于 2013-05-27T00:39:10.710 回答