首页 > 解决方案 > 外键的哪一列:id 或任何其他列,为什么?

问题描述

TL;博士

  1. 外键是否应该始终引用另一个表的 id 列?为什么或者为什么不?有这方面的标准规则吗?
  2. 使用除外键列之外的任何其他唯一列是否会产生成本id?性能/存储?有多大意义?是不是被业界诟病?

示例:这是我的示例问题的架构:

在此处输入图像描述

在我的模式中,有时我使用id列作为外键,有时使用其他数据列。

哪个是正确的方法?

附带说明一下,我没有id用于 、 和 表的列garage_level,因为garage_spaceid它们只有一列作为主键,并且它们存储的数据在每个表中最多只有 15 行,而且它可能永远不会改变. 我还应该在那些栏目中有一个专栏吗?vehicle_garage_statusvehicle_parking_statusid

标签: sqlpostgresqlforeign-keys

解决方案


外键必须以主键或唯一约束为目标。引用主键是正常的,因为您通常希望引用另一个表中的单个行,而主键是表行的标识符。

从技术角度来看,外键是引用主键还是另一个唯一约束无关紧要,因为在 PostgreSQL 中,两者都以相同的方式实现,使用唯一索引。

size至于您的具体示例,将唯一列作为外键的目标并没有错vehicle_size,尽管它引出了一个问题,为什么您没有创建size主键并id完全省略该列。不需要每个表都有一个id作为自动生成的数字主键的列,除非可能有 ORM 和其他软件需要它。


推荐阅读