31 dez

Oracle – Criando um índice de unicidade condicional

Você já se deparou com alguma regra de negócio onde você precisa garantir unicidade somente para alguns tipos de registros dentro de uma tabela?

Um exemplo comum é garantir que a flag principal dentro de uma tabela de e-mail ou telefone seja única para cada pessoa e não na tabela como um todo

Um artifício interessante para criar um índice de unicidade condicional é utilizando o DECODE.

Veja uma exemplo abaixo:

CREATE UNIQUE INDEX MEU_SCHEMA.IX_TELEFONE_PRINCIPAL ON MEU_SCHEMA.TELEFONE
(
    DECODE("ST_PRINCIPAL",'S',TO_CHAR("ID_PESSOA"),'N',TO_CHAR("ID_PESSOA")||':'||TO_CHAR("ID_TELEFONE"),NULL) ASC
)
TABLESPACE  I_MEU_SCHEMA;