Digamos que eu tenha uma Customers
mesa e uma Emails
mesa. Emails
tabela tem estes campos:
Id
CustomerId
EmailValue
Agora, quero criar uma restrição para que nenhum e-mail duplicado seja registrado por cliente . As maneiras que posso pensar são:
- Criar uma função para garantir a exclusividade de cada novo valor de email e chamar essa função em uma restrição de verificação
- Crie um gatilho e, a cada inserção ou atualização, certifique-se de que o email não seja duplicado por cliente
- Esqueça completamente o banco de dados e faça disso parte do negócio em minha camada de aplicativos
No entanto, recentemente me familiarizei com os índices filtrados do SQL Server. Embora eu não consiga descobrir se isso pode me ajudar neste caso específico ou não. A maioria dos exemplos que vi é filtrar valores NULL para criar um índice exclusivo para uma coluna anulável.
Existe uma maneira de usar um índice filtrado para obter o que desejo?
Crie uma restrição exclusiva em duas colunas.
Isso evitará e-mails duplicados por cliente. Clientes diferentes ainda podem ter o mesmo e-mail.
Dos comentários:
Você pode fazer isso se adicionar um índice exclusivo filtrado: