我一直在阅读 Stack Overflow 和其他网站上关于复合键与代理键的激烈辩论,尽管对给出的一些论点感到困惑,但我觉得我知道每个论点的优缺点。
我很想去代理键,但现在我有另一个问题。让我解释一下我的情况。我有一个由 5 个整数组成的表,这些整数组成了一个唯一的组合,并且我有几个表引用了这个实体。现在所有表都包含完整的 5 个字段,并且所有 JOIN 操作都必须提及所有 5 个字段作为连接标准。现在我添加了一个代理键。但是我应该从所有表中删除所有 5 个字段以支持引用“主”表的代理外键吗?
我不确定是否要这样做,因为这 5 个字段中的每一个字段都经常被用作其他表中的选择标准。我以某种自然顺序在它们上定义了索引,以便选择操作执行得更快。如果我将所有 5 个字段迁移到一个单独的表中,恐怕当我想选择前三个时,我必须定义一个 JOIN 并从中选择,但不会定义任何索引在那个 JOIN 上,因为它刚刚生成,我将遭受性能损失。
或者我应该以某种方式为每个表定义一个视图,包括 5 个键,并在其上建立索引?
我感到困惑,在输入所有这些之后,我倾向于再次使用自然键。帮助?