PostgreSQL 中的冗余外键 - 是否有任何索引好处?

Mar*_*tus 5 postgresql

注意:这与关于在表本身中添加冗余信息的这个 SO 问题不同

以下系列语句中的最后一条语句是否在索引/查询优化方面给我带来了任何好处,还是完全没有用并且是一种反模式?从参照完整性的角度来看,它是无用的,但在索引或查询处理速度方面是否有一些好处,例如,JOIN仅在“子”表和“祖父”表之间?

CREATE TABLE grandfather (i INTEGER);
ALTER TABLE  grandfather ADD PRIMARY KEY (i);

CREATE TABLE father  (i, j INTEGER);
ALTER TABLE  father ADD PRIMARY KEY (i, j);
ALTER TABLE  father ADD CONSTRAINT father_2_grandfather FOREIGN KEY (i) REFERENCES grandfather(i);

CREATE TABLE child (i, j, k INTEGER);
ALTER TABLE  child ADD PRIMARY KEY (i, j, k);
ALTER TABLE  child ADD CONSTRAINT child_2_father      FOREIGN KEY (i, j) REFERENCES father(i, j);
-- is the below statement totally useless ?
ALTER TABLE  child ADD CONSTRAINT child_2_grandfather FOREIGN KEY (i)    REFERENCES grandfather(i);
Run Code Online (Sandbox Code Playgroud)

小智 1

(对于类似的关系,简单的层次结构更明智......(id,parent))

除此之外,最后一个外键只会稍微减慢 DML 查询的速度。