【发布时间】:2015-05-17 21:04:23
【问题描述】:
外键是如何实现的,例如在 PostgreSQL 中?
我注意到在创建外键时涉及到很多散列,所以我假设在引用主键列的外键列上创建了一个基于散列的索引。如果是这样(例如,当我们想从被引用的表中删除一行时——这个带有主键的行或所谓的主表),我们可以很容易地检查被引用表中的行是否被实际引用。更重要的是,可能DBMS要求引用的主键列上至少有一个B+树索引,因为当我们要向引用表插入新行时,我们可以很容易地检查是否存在具有所需主键值的行在参考表中。一些消息来源声称使用触发器来确保外键约束。
【问题讨论】:
-
A(外键)约束是一个抽象概念。实现可以按照他们想要的任何方式实现它。在实践中,出于性能原因,几乎需要添加索引。出于理论上的原因,要求 FK 中的引用字段至少 是寻址目标表中的行的唯一方式。这在实践中通常意味着一个索引。
-
是的,我知道主(或唯一)键上有一个 b+tree 索引,但是引用列上是否有任何其他结构(例如,基于哈希的索引)( s)?
标签: database postgresql database-design foreign-keys