【发布时间】:2019-02-20 23:38:41
【问题描述】:
是否可以仅在所有值都不为空时强制执行约束和外键?例如,在多态关系中,一个对象会有多个外键,但通常只使用一个,因此存在违规。我怎样才能避免这种情况?
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 时,我想忽略约束。
【问题讨论】:
-
我认为您可能想要重新设计您的数据库,以便有第二个表包含所有
NOT NULL类型的外键列,这些外键列从您的第一个表中引用,带有NULLable 外键关系。
标签: sql postgresql