Se bem entendi esta resposta, a diferença entre with Index
on Is Unqiue
e a Unique Key
é principalmente cosmética.
Na interface MSSQL, quando mudo para uma chave exclusiva, ela Ignore Duplicate Keys
é desativada.
Estou entendendo algo errado? Eu gostaria de usar Ignore Duplicate Keys
neste caso. Quais são as consequências quando faço um Index
with Is Unique
versus a Unique Key
.
Digite Index
com Is Unique
(menu suspenso ativado):
Tipo Unique Key
(menu suspenso desativado):
Não, a questão é que restrições únicas são apenas entidades declarativas , você simplesmente declara que alguns campos ou a combinação deles na sua tabela são
unique
e você não se importa como isso será implementado, então por exemplo meus colegas desenvolvedores que usam algum Entity Framework basta dar alguns cliques em uma tabela sem pensar no que eles realmente criam e isso funcionará em qualquer RDBMS. Então eles nem sabem sobre índices, mas têm conhecimento básico de banco de dados e isso lhes permite declarar exclusividade.Aí vem a implementação física , cada restrição exclusiva é implementada criando o índice exclusivo mais simples nesses campos e para o desenvolvedor de aplicativos pode ser suficiente, mas você pode querer ter controle total disso, pois deseja usá-lo como índice e não apenas restrição, o índice é outra entidade com mais opções que você pode usar, por exemplo, você pode querer incluir algum campo na cláusula include deste índice exclusivo, pois todas as suas consultas recuperam esse campo adicional passando o valor da chave exclusiva, você simplesmente não deseja para manter índices muito semelhantes e com a restrição
declaration
você não pode fazer isso. Outro exemplo é aquela opção que você queria usar,ignore_dup_key
ou apenas deseja tornar únicos todos os valores que sãonot null
, neste caso você também usa um índice exclusivo e não pode usar apenas uma declaração exclusiva, e suafiltered index
definição pode ser mais complexa, você pode querer impor a exclusividade para apenas um ID de cliente e criar seu índice filtrado exclusivo apenas para este ClientId específico