Dru*_*rux 7 postgresql foreign-key postgresql-9.4
我在表中添加了一个(新的)第二个外键a
。它的第一个外键是可选的,因此ON DELETE SET NULL
对外键的约束。第二届外键是强制性的,因此(新)的约束NOT NULL
上a1
,并a2
与(新)的约束ON DELETE CASCADE
外键。第二个外键还包含第一个外键的列的子集。
CREATE TABLE a
(
a0 INTEGER NOT NULL PRIMARY KEY,
-- other columns
a1 INT NOT NULL,
a2 INT NOT NULL,
a3 INT,
a4 INT,
FOREIGN KEY (a1, a2) REFERENCES b ON DELETE CASCADE,
FOREIGN KEY (a1, a2, a3, a4) REFERENCES c ON DELETE SET NULL
);
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,我现在可以不再DELETE FROM c
,因为这将无效并NOT NULL
在限制a1
和a2
。在此类删除的情况下,我希望发生的是a1, a2
保持不变并a3, a4
设置为NULL
. 是否有简洁的语法(比使用额外的 DELETE
触发器更简洁)来定义实现这一点的约束?
目前,该CASCADE
操作无法仅将某些列设置为NULL
. 所以我看到的唯一选择是:
将所有 4 列定义为NULL
并使用ON DELETE SET NULL
操作。在您的情况下,这似乎不是一种选择。
添加另一个表来保存这种关系(其中所有列都不可为空)并使用ON DELETE CASCADE
.
一个触发器。
创建一个过程(Postgres 中的函数)来处理 table 的删除c
。该函数将首先修改table 中的列 ( c
, d
) a
,然后从 table 中删除c
。然后你必须确保所有用户/应用程序都使用这个功能,不要直接从 table 中删除c
。
归档时间: |
|
查看次数: |
5315 次 |
最近记录: |