代码之家  ›  专栏  ›  技术社区  ›  jjuser19jj

Postgres约束和外键

  •  0
  • jjuser19jj  · 技术社区  · 6 年前

    只有当所有值都不为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)[], 
    )
    

    CONSTRAINT name_owner_id UNIQUE 
                (
                    name, owner_id
                )
    

    当name或owner\u id为null时,我想忽略约束。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Laurenz Albe    6 年前

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

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

    • 如果外键列为NULL,则只要使用默认值,就不会强制执行约束 MATCH SIMPLE .

    • 像这样的情况“两个值之一必须为 NOT NULL ,可以使用检查约束。