首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果需要多个约束,是否需要为每一列单独使用外键表?

如果需要多个约束,是否需要为每一列单独使用外键表?
EN

Stack Overflow用户
提问于 2013-05-27 07:42:37
回答 1查看 249关注 0票数 2

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

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

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

我问道,因为我可以看到我的数据库中有很多外键表。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-27 08:39:11

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

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

这种数据倍增对于防止列中的无关NULL或空字符串值是必要的,这将破坏您的外键关系。

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16764698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档