我有一个包含20列的MySQL INNOB表,我想为其中大约10列添加一个外键约束。
我知道我可以用外键数据创建10个单独的表,然后将它们作为约束添加到初始表中-这是可能的,我以前也这样做过。
问题-这将导致10个额外的表。是否可以将这10个表(带有外键数据)合并为1个表,然后引用该表/列作为约束?
我问道,因为我可以看到我的数据库中有很多外键表。
发布于 2013-05-27 08:39:11
从理论上讲,您可以使用一个表,但这将是一个非常糟糕的设计,因为它不会为每个唯一的数据类型提供一个简单的枚举“域”,而且它会为表中所有其他列的每个唯一组合乘以您的每个值,换句话说,大约是每列元素平均数的10次方。
具体地说,如果每列只有5个唯一值和10个列,那么就会得到一个包含9,765,625条记录的表!我相信你会看到这将是非常低效的!
这种数据倍增对于防止列中的无关NULL
或空字符串值是必要的,这将破坏您的外键关系。
为每个唯一的数据集创建一个不同的“域表”是很常见的,如果您的数据库中只有10个这样的“域表”,这是非常“轻”的。
如果您不想为每个约束使用域表,则可以始终使用ENUM('value1', 'value2', ...)
作为列数据类型,而不是外键(这不需要您创建任何其他表)。
https://stackoverflow.com/questions/16764698
复制相似问题