Rac*_* G. 12 postgresql foreign-key
我确信我已经这样做过无数次了,但我找不到我以前这样做过的任何用途。但这似乎很有道理,所以我认为这一定是可能的?然而,手册上说:
外键约束指定一列(或一组列)中的值必须与另一个表的某些行中出现的值相匹配。
强调我的。资料来源:https ://www.postgresql.org/docs/current/ddl-constraints.html#DDL-CONSTRAINTS-FK
我有一个簿记表,每当交易“更正”或“更新”前一个交易时,我都会有一列名为“更正 id”的列,它是一个 bigint,对我来说,将其作为外键是非常有意义的这样的:
..., FOREIGN KEY ("corrects id") REFERENCES bookkeeping (id)
Run Code Online (Sandbox Code Playgroud)
注意:“更正id”是“簿记”表中的一列,id是同一个表的主键(bigserial)。
这肯定是正确的吗?那么为什么手册上说必须是另一张桌子呢?如果可以引用同一张表,为什么名称是“FOREIGN”键?
小智 11
你确实可以做到这一点。如果您向下滚动链接的 postgres 文档,您将看到:
\n\n\n有时,外键约束的 \xe2\x80\x9cother 表\xe2\x80\x9d 是同一个表是有用的;这称为自引用外键。例如,如果您希望表的行代表树结构的节点,您可以编写:
\n
\nCREATE TABLE tree (\n node_id integer PRIMARY KEY,\n parent_id integer REFERENCES tree,\n name text,\n ...\n);\n
Run Code Online (Sandbox Code Playgroud)\n