是否只有在所有值都不为null时才可以强制执行约束和外键?例如,在一个多态关系中,一个对象将具有多个外键,但通常仅使用一个,因此存在冲突。如何避免这种情况?
CREATE TABLE IF NOT EXISTS acos (
id SERIAL PRIMARY KEY,
created_at timestamp,
updated_at timestamp,
owner_id varchar(64) NOT NULL,
stack_id varchar(64) DEFAULT NULL,
qac_id varchar(64) DEFAULT NULL,
rights varchar(1024)[],
)
设置了stack_id或qac_id,但从未同时设置。
以下约束条件相同:
CONSTRAINT name_owner_id UNIQUE
(
name, owner_id
)
当name或owner_id为null时,我想忽略该约束。
答案 0 :(得分:2)
除非我误解了您的意思,否则PostgreSQL在默认情况下已经可以按照您想要的方式工作:
您可以在UNIQUE
约束中两次拥有相同的条目,只要其中之一为NULL。
如果外键列为NULL,则只要您坚持使用默认的MATCH SIMPLE
,就不会强制执行约束。
对于诸如“两个值之一必须为NOT NULL
”这样的条件,可以使用检查约束。