【发布时间】:2016-12-12 10:46:21
【问题描述】:
我希望能够为外键 ON DELETE 约束执行一些逻辑。根据逻辑,我会想要 CASCADE 或 RESTRICT。
我的桌子:
CREATE TABLE users (
user_id uuid DEFAULT uuid_generate_v4() PRIMARY KEY
);
CREATE TABLE teams (
team_id uuid DEFAULT uuid_generate_v4() PRIMARY KEY
);
CREATE TABLE documents (
document_id uuid DEFAULT uuid_generate_v4() PRIMARY KEY
user_id uuid REFERENCES users ON DELETE /*do logic here*/,
team_id uuid REFERENCES teams ON DELETE /*do logic here*/,
content text
);
在我的(非常基本的)表中,document 可以由user 和/或team 拥有。
关于documents,如果有人删除了文档的用户并且文档的team_id 为空,则将删除内容 CASCADE 到文档(反之亦然,使用 user_id 和 team_id)。
否则,如果有人删除了某个文档的用户,并且该文档的 team_id 不是 NULL,则 RESTRICT 删除该用户(反之亦然,使用 user_id 和 team_id)。
我在文档中没有看到任何实现此目的的方法。我需要在我的服务器代码而不是数据库中执行此逻辑吗?我想要额外的数据完整性层。
【问题讨论】:
标签: sql postgresql constraints