Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Chave exclusiva versus índice exclusivo no SQL Server 2008


Uma restrição exclusiva é implementada nos bastidores como um índice exclusivo, portanto, não importa como você a especifica. Eu costumo implementá-lo simplesmente como:
ALTER TABLE dbo.foo ADD CONSTRAINT UQ_bar UNIQUE(bar);

Algumas pessoas criam um índice exclusivo, por exemplo,
CREATE UNIQUE INDEX IX_UQ_Bar ON dbo.foo(bar);

A diferença está na intenção - se você estiver criando a restrição para impor regras de exclusividade/negócios, crie uma restrição, se estiver fazendo isso para auxiliar no desempenho da consulta, pode ser mais lógico criar um índice exclusivo. Novamente, nos bastidores, é a mesma implementação, mas o caminho que você percorre para chegar lá pode ajudar a documentar sua intenção.

Eu acho que existem várias opções para aderir tanto à funcionalidade anterior do Sybase quanto ao padrão ANSI (mesmo que as restrições exclusivas não aderem ao padrão 100%, pois elas permitem apenas um valor NULL - um índice exclusivo, em por outro lado, pode contornar isso adicionando um WHERE cláusula (WHERE col IS NOT NULL ) no SQL Server 2008 e superior).