Was ist dieses verkehrte silberne Schlüsselsymbol?

11

Ich habe einen SQL Server 2005-Server und eine Datenbank von Drittanbietern geerbt, um Berichte und Dashboards erstellen zu können.

Auf einem Tisch fand ich ein neues Symbol: einen blau-silbernen umgedrehten Schlüssel neben meinen anderen Primär- und Fremdschlüsseln.

Wenn ich mit der rechten Maustaste darauf klicke, gibt mir das Kontextmenü die Option "Skriptbeschränkung als". Wenn ich jedoch versuche, es zu "ändern", wird das Spaltenentwurfsformular (wie Primärschlüssel) geöffnet, und dennoch wird es im angezeigt Abschnitt "Indizes", keine Einschränkungen.

Weiß jemand, wie es heißt und wofür es verwendet wird?

Umgedrehter Schlüssel

Philippe
quelle

Antworten:

12

Es bedeutet eine einzigartige Einschränkung. In SQL Server wird eine eindeutige Einschränkung tatsächlich als Index unter dem Deckmantel implementiert. Aus diesem Grund wird es auch unter dem IndexesKnoten angezeigt (ich kann Ihnen nicht gut erklären, warum es nicht zumindest unter dem ConstraintsKnoten aufgeführt ist oder warum sie einen verkehrten Schlüssel anstelle einer anderen Farbe gewählt haben).

Sie sollten hier ein Ergebnis sehen, um zu überprüfen, ob dies tatsächlich als Index implementiert ist:

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

Sie sagten, Sie hätten "Script Constraint As ..." gesehen - wenn Sie dies durchgearbeitet hätten, hätten Sie ein Skript erhalten, das wie folgt lautet:

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

Führen Sie es jedoch nicht aus, da diese Syntax keinen Namen verwendet und nur eine zweite, redundante, eindeutige Einschränkung erstellt ...

Hier ist ein sehr einfacher Repro und ein Beweis dafür, dass ich 2014 den verkehrten Schlüssel auch mit sehr einfacher Syntax bekomme:

CREATE TABLE dbo.foo(id INT UNIQUE);

Geben Sie hier die Bildbeschreibung ein klicken um zu vergrößern

Jetzt können Sie ein anderes Symbol erhalten, wenn Sie explizit einen eindeutigen Index erstellen (und die einzigen Unterschiede, die Sie sehen, sys.indexessind der Name und der Wert von is_unique_constraint):

Geben Sie hier die Bildbeschreibung ein klicken um zu vergrößern

Weitere Unterschiede finden Sie in dieser Antwort zum Stapelüberlauf .

Aaron Bertrand
quelle
1
Ist es spezifisch für SQL2005? Denn wenn ich versuche, einen EINZIGARTIGEN Index hinzuzufügen, erhalte ich ein anderes Symbol (eine Art umgekehrter Baum). Und wenn ich eine Einschränkung hinzufüge, erhalte ich eine Art eckiges Tabellensymbol. Ich kann dieses Symbol anscheinend nicht reproduzieren.
Philippe
@Philippe Antwort aktualisiert.
Aaron Bertrand
Vielen Dank. Das war eine detaillierte Erklärung und eine schnelle! :-)
Philippe