我正在构建用于存储客户端特定配置的数据库。每个配置应具有唯一的ID(int)和版本(int)。只有它们中的一对必须是唯一的,这促使我创建了复合密钥。但是,问题在于ID可能会自动生成,而版本应始终从1开始并在每次更改配置时都递增。
这里的大多数帖子都既不建议使用复合键,也不建议使用带有SQL自动增量的复合键。我同事的一项建议是添加一个单独的ID作为单个主键,并由我自己在应用程序代码中管理configID + Version对的分配和唯一性。
因此,最后我看到3个选项:
PK(configID,version)手动生成两者
具有自动递增配置ID和手动分配版本的PK(configID,版本)
PK(ID)自动增加configID + version对。
能否请您告知最佳选择?也许还有其他东西吗?
答案 0 :(得分:1)
您应选择第三个选项,即自动递增的ID。
为什么?
主键有多种用途。也许最重要的是,它唯一地标识了表中的每一行以供外键引用。单列外键比复合外键简单得多-无论是在定义键还是在性能方面。两列通常比1占用更多空间。
这也有一些不错的好处。这使您可以更改与每对关联的配置或版本。您可能现在不想这样做。但是将来,您可能会说:“天哪,希望我可以轻松删除一个版本”。或者,“这两个客户端已合并,我想将它们的配置放在一起。”
使配置自动递增可能也很有意义。对此我不确定。要分配版本,您需要一个触发器来维护每个配置的序号。