Альтернатива установке составного первичного ключа с обнуляемым столбцом - PullRequest
0 голосов
/ 17 февраля 2012

У меня есть таблица с именем ITEM, которая должна содержать:

ID_SERVICE , // foreign key to table SERVICE
ID_FILE , // foreign key to table FILE
ID_FUNCTION  // foreign key to table FUNCTION

и он должен быть идентифицирован этими 3 столбцами (составной первичный ключ), однако моя проблема в том, что иногда у меня может быть элемент, у которого нет функции (ID_FUNCTION может быть нулевым).

Как мне изменить дизайн этой таблицы, чтобы она могла справиться с этими ограничениями?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 17 февраля 2012

Вы создаете уникальный индекс, а не ограничение первичного ключа. Уникальный индекс позволяет любому ключу быть нулевым, но все же обеспечивает уникальность для каждого столбца. Синтаксис такой же, как у индекса, но вы добавляете уникальный перед:

create unique index i_table_name
    on table_name ( column_names )
       tablespace
       storage ( ... )
       < etc >

Уникальный индекс автоматически создает уникальное ограничение, лежащее в его основе. Если вам не нужен индекс, вы можете просто создать собственное ограничение:

alter table table_name
add constraint constraint_name unique (column_names)

Здесь - дополнительная информация о различных типах ограничений.

0 голосов
/ 17 февраля 2012

объявляется ли ID_FUNCTION как NOT NULL? Если это не обнуляемо, это может быть решением. Измените таблицу, чтобы столбец ID_FUNCTION допускал нулевые значения.

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