使用一个数据库时,我遇到了以下示例。
假设我们有一个图书馆数据库(出于商业机密的原因,我无法给出真实数据库中的示例)。
假设有一个主键是复合的 Book 表(方法 #1):
- 存放图书的图书馆的 ID
- 图书所属目录的id
- 图书编号
同时,库 id 作为主键的组成部分出现在许多其他表中。
从我的角度来看,可以使用 GUID 作为主键(方法编号 2),并使用库 id 和参考 id 作为复合外键。
上述两种方法的优缺点是什么?
使用一个数据库时,我遇到了以下示例。
假设我们有一个图书馆数据库(出于商业机密的原因,我无法给出真实数据库中的示例)。
假设有一个主键是复合的 Book 表(方法 #1):
同时,库 id 作为主键的组成部分出现在许多其他表中。
从我的角度来看,可以使用 GUID 作为主键(方法编号 2),并使用库 id 和参考 id 作为复合外键。
上述两种方法的优缺点是什么?
在这种情况下,我几乎总是选择使用代理唯一键 - 有时是 GUID,有时只是每个表的整个计数器(序列、身份、自动增量)。
以下是采用这种方法的一些原因:
id
如果复合键的组件之一发生更改(例如,书籍从一个库“移动”到另一个库或目录更改),则无需更改主键从缺点: