我一直在 Stack Overflow 和其他网站上阅读关于复合键与代理键的激烈辩论,尽管对给出的一些论点感到困惑,但我觉得我知道每个论点的优缺点。
我很想寻找代理键,但现在我有另一个问题。让我解释一下我的情况。我有一个由 5 个整数组成的表,这些整数组成了一个唯一的组合,并且我有几个引用该实体的表。现在,所有表都包含完整的 5 个字段,并且所有 JOIN 操作都必须提及所有 5 个字段作为连接标准。现在我添加了一个代理键。但是我应该从所有表中删除所有 5 个字段,转而使用引用“主”表的代理外键吗?
我对这样做感到不确定,因为这 5 个字段中的每一个字段都经常单独用作其他表中的选择标准。我以某种自然顺序在它们上定义了索引,以便选择操作执行得很快。如果我将所有 5 个字段迁移到一个单独的表中,恐怕当我想要选择其中的前三个字段时,我必须定义一个 JOIN 并从中选择,但不会定义任何索引因为 JOIN 刚刚生成,所以我会遭受性能损失。
或者我应该以某种方式为每个表定义一个 VIEW,包括 5 个键及其索引?
我感到困惑,在输入所有这些内容后,倾向于再次坚持使用自然键。 帮忙?
最佳答案
我建议使用一张包含 5 个唯一字段 + 代理主键的表。在该表中,您可以在每个字段上创建索引 + 5 个字段上的唯一约束。然后,您将只有 1 列,而不是其他表中的 5 个字段。
关于sql - 如果有代理键,需要单独的表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2202508/