我有一个包含20列的MySQL INNOB表,我想在大约10列中添加一个外键约束。
我知道我可以使用外键数据创建10个单独的表,然后将这些表作为约束添加到初始表中 - 这是可能的,我之前已经这样做了。
问题 - 这将导致10个额外的表格。是否可以将这10个表(带有外键数据)组合成1个表,然后引用表/列作为约束?
我问我可以看到我的数据库最终有很多外键表。
答案 0 :(得分:2)
理论上你可以使用一个表,但这将是一个非常糟糕的设计,因为它不会为每个唯一的数据类型提供一个简单的枚举“域”,并且它会为每个唯一的组合提供每个值的乘积。表中的其他列,换句话说,大约是每列平均元素数的10次幂。
具体而言,如果每列只有5个唯一值,而10列,则会产生 9,765,625 记录的表格!我相信你会发现这会非常低效!
这样的数据乘法对于防止列中的无关NULL
或空字符串值是必要的,这会破坏您的外键关系。
为每个唯一的数据集创建一个独特的“域表”很常见,如果您的数据库中只有10个,那就非常“轻松”。
如果您不希望每个约束使用域表,则可以始终使用ENUM('value1', 'value2', ...)
作为列数据类型而不是外键(这不需要您创建任何其他表)。