У меня есть уникальный ключ в таблице x с 3 столбцами (a, b, c), где a, b, c - внешние ключи, а c может быть нулевым в таблице x.
a b c
- - ----
1 1 1
1 1 2
1 1 NULL
1 1 NUll
Вышеуказанные строки действительны в MySQL, и вставка строк с несколькими нулями не нарушает ограничения. Но это не так с Oracle, SQL-Server
Каковы лучшие практики в этом сценарии?
с каждым уникальным ограничением создается уникальный индекс, и если я отключаю уникальный индекс, в SQL-сервере также допускаются несколько нулей (с отфильтрованным индексом)
Мне нужно установить несколько значений в столбце с нулевым в качестве внешнего ключа.
Пожалуйста, предложите мне удалить ограничение уникального ключа, если я удалю внешний ключ из столбца c в таблице x. или у нас есть другое решение.
Этот индекс делает то, что вы хотите:
create unique index idx_t_abc on t(
case when c is not null then a end,
case when c is not null then b end,
case when c is not null then c end);
Проверено только в Oracle. Подобный вопрос на сайте asktom: уникальный индекс с нулевыми значениями.
В SQL Server вы можете использовать отфильтрованный индекс:
create index unq_t_a_b_c on t(a, b, c)
where c is not null;
В Oracle вы можете использовать вычисляемые столбцы для этой цели - при условии, что у вас есть первичный ключ:
create index unq_t_a_b_c on t(a, b, c, (case when c is null then pk end));
Это позволит несколько значений, когда c
является нулем.