Você já precisou garantir uma regra de negócio no banco de dados onde a unicidade se aplica apenas a alguns registros da tabela?
Veja este caso. Preciso garantir a unicidade para uma tabela de formas de pagamento apenas quando o tipo da forma de pagamento for cartão. Quero garantir que não haverão mais de um cartão para mesma autorizadora.
Posso fazer isto usando o decode:
create index idx_forma_pagamento_cartao on tipo_caixa ( decode(tipo_forma_pagamento, 'CARTAO', codigo_forma_pagamento || '-'|| autorizadora_key, null) );
Ou usando case when:
create index idx_forma_pagamento_cartao on forma_pagamento ( case when tipo_forma_pagamento = 'CARTAO', then codigo_forma_pagamento || '-'|| autorizadora_key else null end );
Desta forma, o Oracle só vai verificar a combinação codigo_forma_pagamento e autorizadora_key quando a forma de pagamento for cartão.
Tem alguma dúvida, sugestão ou critica?
Deixe seu comentário mais abaixo.
Até a próxima!