具有空值作为有效行的唯一约束

Unique constraints with null values as valid row

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

最终输出应该是这样的 table。观察这里 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

一些想法?

这个索引:

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

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

这似乎符合您的要求。