Условное единственное ограничение в oracle db
У меня есть ситуация, когда мне нужно принудительно установить уникальное ограничение для столбца [attribute] в зависимости от другого значения столбца.
Итак, например, у меня есть таблица типа Table (ID, EID, Name, ISDeleted)
ISDeleted может иметь только значение null или 'y' (активное или удаленное), и я хочу создать уникальное ограничение для EID, ISDeleted только тогда, когда ISDeleted = null, так как мне не важно, есть ли несколько удаленных записей с тот же идентификатор. Обратите внимание, что EID может иметь нулевое значение.
Я использую Oracle DB для этого.
Ответы
Ответ 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) );