Eld*_*rov 0 postgresql tree foreign-key constraint recursive
我有带有递归外键的表。它只是层次树结构:
CREATE TABLE tree (
id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
value INTEGER NOT NULL,
tree_id SMALLINT NOT NULL CHECK (tree_id > CAST(0 AS SMALLINT)),
parent_id INTEGER REFERENCES tree ON DELETE RESTRICT ON UPDATE RESTRICT,
EXCLUDE (tree_id WITH =) WHERE (parent_id IS NULL) -- allow only one root within tree
);
Run Code Online (Sandbox Code Playgroud)
如何拒绝插入非空parent_id
和不同的记录tree_id
?即外键parent_id
只能引用id
同一个内的主键tree_id
。
使用复合外键:
(tree_id, parent_id) REFERENCES (tree_id, id)
Run Code Online (Sandbox Code Playgroud)
您将需要首先更改 PK 或添加UNIQUE
约束(tree_id, id)
归档时间: |
|
查看次数: |
221 次 |
最近记录: |