【问题标题】:Unique constraints with null values as valid row具有空值作为有效行的唯一约束
【发布时间】:2018-11-17 13:47:29
【问题描述】:

您好,我正在批处理中插入一堆数据。

最终的输出应该是这样的表格。注意这里Name, Address_id 对是唯一的。 Address_id 可以为 NULL,但对于给定的对 Name, Address_id 只能为一次

Name    address_id
———      —————
“Richard”   1
“Richard”   2
“Richard”   NULL
“Richard    3
“James”     1
“James”     2
“James”     NULL
“James”     3

但是,当 address_id 为 NULL 时,我无法保证该对的唯一性。如果我添加 INDEX UNIQUE (name, address_id),另一对 (“Richard”, NULL) 将被视为有效

然后,如果我添加以下索引(谷歌搜索发现)

CREATE UNIQUE INDEX index_employers_on_name_and_address_id 
    ON employers(name, address_id) 
    WHERE address_id IS NOT NULL


CREATE UNIQUE INDEX index_employers_on_name 
    ON employers(name) 
    WHERE address_id IS NULL 

不允许所有 (<NAME>, NULL) 对,因为已经存在唯一的 NAME

一些想法?

【问题讨论】:

  • 我不明白这个问题。最后两个索引是否符合您的要求?他们似乎。

标签: sql postgresql psql


【解决方案1】:

这个索引:

CREATE UNIQUE INDEX index_employers_on_name 
    ON employers(name) 
    WHERE address_id IS NULL ;

是一个部分索引,仅适用于address_id is null。每个name 只允许一个NULL 值。 address_id 的非NULL 值对唯一性没有影响。

这似乎可以满足您的需求。

【讨论】:

    猜你喜欢
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多