Уникальное ограничение с заданным значением - PullRequest
6 голосов
/ 12 июля 2011

Учитывая следующую примерную структуру таблицы, есть ли способ добавить к уникальному ограничению, чтобы обеспечить уникальность для комбинации (GUID, 'Y')?

Логика приложения - при обновлении guid создается новая версия с таким же guid, но новым luid;и предыдущий становится неактивным ('Y' -> 'N')

GUID - внешний идентификаторLUID - внутренний идентификатор

 create table id_active(
    "GUID" RAW(16) NOT NULL,
    "LUID" RAW(16) NOT NULL,
    "IS_ACTIVE" char(1) NOT NULL CHECK ( "IS_ACTIVE" IN ('Y', 'N')),
 PRIMARY KEY ("GUID", "LUID"),
 --unique constraint goes here

1 Ответ

11 голосов
/ 12 июля 2011

Вы можете создать уникальный индекс на основе функций и использовать тот факт, что Oracle не индексирует значения NULL в индексах b-дерева.

CREATE UNIQUE INDEX one_active_guid
    ON table_name( (CASE WHEN is_active = 'Y'
                         THEN guid
                         ELSE null
                      END) );
...