我经常看到人们在关系数据库中使用人工/代理键。想一想,在我看来,虽然这简化了连接查询,但它使新元组的插入变得复杂。举个例子:
R1(a, b, c) R2(c, d, e) c 是 R2 的代理主键,由 R1(c) 引用。如果要在R1和R2中插入数据,首先要检查R2中是否已经存在要插入的R2元组,如果存在,则必须获取其对应的人工密钥,以便在元组中引用它对于 R1。
使用自然键: R1(a,b,d,e) R2(d,e) 属性 d 和 e 是 R2 的自然主键集,由 R1(d,e) 引用。如果我想在 R1 和 R2 中插入一个新元组,我可以简单地插入它们,因为对于 R1 元组,我引用的外键(即 R2 主键集的值)是已知的。
我的假设是正确的还是我遗漏了什么?