gpt4 book ai didi

sql - Postgres 约束和外键

转载 作者:行者123 更新时间:2023-11-29 14:30:37 25 4
gpt4 key购买 nike

是否可以仅在所有值都不为空时强制执行约束和外键?例如,在一个多态关系中,一个对象会有多个外键,但通常只使用一个,因此存在违规。我怎样才能避免这种情况?

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 时,我想忽略约束。

最佳答案

除非我误解你的意思,否则 PostgreSQL 已经默认按照你想要的方式工作:

  • 您可以在 UNIQUE 约束中两次使用相同的条目,只要其中一个为 NULL。

  • 如果外键列为 NULL,则不会强制执行约束,只要您坚持使用默认的 MATCH SIMPLE

  • 对于像“两个值中的一个必须是 NOT NULL”这样的条件,您可以使用检查约束。

关于sql - Postgres 约束和外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52361081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com