gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 20:28:53 25 4
gpt4 key购买 nike

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

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

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

我问,因为我看到我的数据库最终有很多外键表。

最佳答案

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

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

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

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

如果您不希望每个约束都有域表,您总是可以使用 ENUM('value1', 'value2', ...) 作为您的列数据类型而不是外部键(不需要您创建任何额外的表)。

关于mysql - 如果需要多个约束,是否需要为每一列单独的外键表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16764698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com