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; |