Уникальные ограничения с нулевыми значениями в качестве допустимой строки - PullRequest
0 голосов
/ 17 ноября 2018

Привет, я вставляю кучу данных в пакетный процесс.

Окончательный вывод должен быть такой таблицей.Заметьте, что здесь 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.Другая пара (“Richard”, NULL) будет считаться действительной, если я добавлю INDEX UNIQUE (name, address_id)

Затем, если я добавлю следующие индексы (обнаружил, что он гуглит)

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

Некоторые идеи?

1 Ответ

0 голосов
/ 17 ноября 2018

Этот индекс:

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

представляет собой частичный индекс , который применяется только при address_id is null.Это позволит только одно значение NULL на name.Не NULL значения для address_id не влияют на уникальность.

Похоже, что вы делаете то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...