Quelle est cette icône de clé en argent à l'envers

11

J'ai hérité d'un serveur et d'une base de données tiers de SQL Server 2005 à examiner pour pouvoir générer des rapports et des tableaux de bord.

Sur une table, j'ai trouvé une nouvelle icône: une clé à l'envers bleu-argent, à côté de mes autres clés primaires et étrangères.

Lorsque je clique dessus avec le bouton droit de la souris, le menu contextuel me donne l'option de "Contrainte de script en tant que", mais lorsque j'essaye de le "modifier", il ouvre le formulaire de conception de colonne (comme les clés primaires), et pourtant, il apparaît dans le Section "Index", pas les contraintes.

Quelqu'un sait comment on l'appelle et à quoi il sert?

Touche à l'envers

Philippe
la source

Réponses:

12

Cela signifie une contrainte unique. Dans SQL Server, une contrainte unique est en fait implémentée sous forme d'index sous les couvertures; c'est pourquoi il apparaît également sous le Indexesnœud (je ne peux pas vous expliquer pourquoi il n'est pas au moins répertorié sous le Constraintsnœud, ni pourquoi ils ont choisi une clé à l'envers au lieu d'une couleur différente).

Vous devriez voir un résultat ici pour valider que cela est réellement implémenté en tant qu'index:

SELECT index_id, type_desc, is_unique_constraint
  FROM sys.indexes
  WHERE name = N'IX_tblCustIndex';

Vous avez dit que vous aviez vu "Script Constraint As ..." - si vous aviez suivi, cela vous aurait fourni un script comme:

ALTER TABLE [dbo].[tblCustIndex] ADD UNIQUE NONCLUSTERED 
(
  [some_column] ASC
) WITH (...a bunch of default options...)

Mais ne l'exécutez pas car cette syntaxe n'utilise pas de nom et ne fera que créer une seconde contrainte unique redondante ...

Voici une repro très simple, et la preuve que j'obtiens la clé à l'envers même avec une syntaxe très basique, sur 2014:

CREATE TABLE dbo.foo(id INT UNIQUE);

entrez la description de l'image ici Cliquez pour agrandir

Maintenant, vous pouvez obtenir une icône différente si vous créez explicitement un index unique (et les seules différences que vous verrez sys.indexessont le nom et la valeur de is_unique_constraint):

entrez la description de l'image ici Cliquez pour agrandir

Pour d'autres différences, voir cette réponse Stack Overflow .

Aaron Bertrand
la source
1
Est-il spécifique à SQL2005? Parce que lorsque j'essaie d'ajouter un index UNIQUE, j'obtiens une icône différente (une sorte d'arbre inversé). Et lorsque j'ajoute une contrainte, j'obtiens une sorte d'icône de table entre crochets. Je n'arrive pas à reproduire cette icône.
Philippe
@Philippe Réponse mise à jour.
Aaron Bertrand
Merci. C'était une explication détaillée et rapide! :-)
Philippe