Условное единственное ограничение в oracle db - программирование
Подтвердить что ты не робот

Условное единственное ограничение в oracle db

У меня есть ситуация, когда мне нужно принудительно установить уникальное ограничение для столбца [attribute] в зависимости от другого значения столбца.

Итак, например, у меня есть таблица типа Table (ID, EID, Name, ISDeleted)

ISDeleted может иметь только значение null или 'y' (активное или удаленное), и я хочу создать уникальное ограничение для EID, ISDeleted только тогда, когда ISDeleted = null, так как мне не важно, есть ли несколько удаленных записей с тот же идентификатор. Обратите внимание, что EID может иметь нулевое значение.

Я использую Oracle DB для этого.

4b9b3361

Ответ 1

Вы не можете создать ограничение. Но вы можете создать уникальный функциональный индекс. Это использует тот факт, что Oracle не индексирует значения NULL - любые строки, в которых isDeleted NOT NULL не будут включены в индекс, поэтому уникальное ограничение не будет применяться к ним.

CREATE UNIQUE INDEX one_not_deleted
    ON table_name( (CASE WHEN isDeleted IS NULL
                         THEN eid
                         ELSE null
                      END) );