【发布时间】:2019-08-26 15:15:07
【问题描述】:
我想问是否有更好的方法在 Postgres 10 中对以下行为进行建模:
CREATE TABLE test.my_table
(
id UUID PRIMARY KEY,
id_a UUID,
id_b UUID,
some_shared_data JSONB,
UNIQUE (id_a, id_b)
);
CREATE UNIQUE INDEX IF NOT EXISTS b_null_constraint ON test.my_table (id_a) WHERE id_b IS NULL;
CREATE UNIQUE INDEX IF NOT EXISTS a_null_constraint ON test.my_table (id_b) WHERE id_a IS NULL;
ALTER TABLE test.my_table
ADD CONSTRAINT both_null_constraint CHECK (
(id_b IS NOT NULL) OR (id_a IS NOT NULL));
即约束是:
-
id_a和id_b都不能是null -
id_a和id_b的组合必须是唯一的(包括其中之一是null的情况)
在我看来,上面设置它的代码不是很有表现力。人们会以另一种/更规范的方式做到这一点吗?我尝试将其拆分为单独的表,但约束 (1.) 很难满足。
【问题讨论】:
-
这对我来说很好。
标签: sql database postgresql unique-constraint