【问题标题】:Do a need a separate Foreign Key Table for each column if multiple constraints are needed?如果需要多个约束,是否需要为每列单独的外键表?
【发布时间】:2013-05-21 19:26:08
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: mysql sql database foreign-keys innodb


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 干杯 - 感谢您的评论,我将为每个约束列表使用单独的表格。
    猜你喜欢
    • 2021-02-10
    • 2010-12-15
    • 2010-11-24
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    相关资源
    最近更新 更多