Ограничение составного уникального ключа с несколькими значениями NULL в одном столбце

0

У меня есть уникальный ключ в таблице 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. или у нас есть другое решение.

  • 2
    Не могли бы вы уточнить, почему вас интересуют 3 разные базы данных?
  • 0
    Уникальный ключ, который не является, и внешний ключ, который не может быть разрешен в mysql, но довольно бессмысленен.
Показать ещё 5 комментариев
Теги:
sql-server

2 ответа

1

Этот индекс делает то, что вы хотите:

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: уникальный индекс с нулевыми значениями.

0

В 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 является нулем.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню