Datenbank-Constraints mit SQL Server Management Studio Table Designer erstellen

Constraints definieren Bedingungen, die beim Einfügen, Ändern und Löschen von Datensätzen in der Datenbank erfüllt werden müssen. Eine Einführung.

Dies ist der zweite Beitrag einer zweiteiligen Artikelserie, der die Verwendung des SQL Server Management Studio Table Designers für das Anlegen von Datenbank-Tabellen und deren Eigenschaften beschreibt. Der erste Teil behandelt das Anlegen der Tabelle und ihrer Spalten. Im zweiten Teil geht es um das Setzen von Constraints.

Mehr zum Thema SQL Server:

SQL Server im Überblick: Ist Microsoft SQL Server Express die richtige Wahl?

Warum sich die Ausgaben für die Microsoft SQL Server Standard Edition lohnen.

Die Kapazität einer SQL-Server-Datenbank richtig planen.

Die häufigsten Fehler beim Kauf von Hardware für SQL Server.

Das Setzen von Constraints (deutsch „Einschränkung“) ist ein wichtiger Teil beim Anlegen von Datenbank-Tabellen. Constraints definieren Bedingungen, die beim Einfügen, Ändern und Löschen von Datensätzen in der Datenbank erfüllt werden müssen. Für die meisten Tabellen werden Sie wahrscheinlich eine PRIMARY KEY-Einschränkung definieren, die besagt, dass der Skalar einzigartig sein muss und nicht NULL sein kann. Doch es können auch andere Arten von Constraints wie UNIQUE, FOREIGN KEY, CHECK oder DEFAULT erforderlich sein.

Erzeugen des Primary Key der Tabelle
Abbildung 6: Erzeugen des Primary Key der Tabelle.

Im ersten Artikel der Artikelserie haben wir bereits beim Definieren der Spalte DateAdded erklärt, wie man eine DEFAULT-Einschränkung ergänzt. Jetzt fügen wir auf Basis der Spalten StoreID und ProductID einen PRIMARY KEY-Constraint hinzu. Dazu wählen Sie die beiden Spalten im Raster des Table Designers aus, führen im oberen Arbeitsbereich einen Klick mit der rechten Maustaste aus und klicken dann auf Set Primary Key. Dadurch erscheint in den Spalten ein Schlüsselsymbol als Hinweis, dass der Primärschlüssel (Primary Key) erstellt wurde (siehe Abbildung 6).

Konfigurieren des Primary Key der Tabelle
Abbildung 7: Konfigurieren des Primary Key der Tabelle.

Das sind bereits alle notwendigen Aktionen für das Erstellen des Primärschlüssels. Um die Einstellungen des Schlüssels zu sehen oder zu ändern, klicken Sie erneut im Grid des Table Designers mit der rechten Maustaste und aktivieren im Kontextmenü den Eintrag Indexes/Keys, um das entsprechende Dialogfeld zu öffnen. Wie Sie in Abbildung 7 sehen, zeigt das Dialogfeld Indexes/Keys Informationen zum neuen Primärschlüssel an, der die Bezeichnung PK_SpecialtyProducts trägt.

An dieser Stelle können Sie entweder die Standardeinstellungen beibehalten oder die Eigenschaften nach Bedarf ändern. So können Sie zum Beispiel den Namen des Constraints oder die Spalten des Primärschlüssels ändern und festlegen, ob  der Index gruppiert oder ungruppiert sein soll. Für diesen Artikel änderte ich den Namen in pk_StoreID_ProductID, beließ aber die anderen Eigenschaften entsprechend ihrer Standardeinstellungen.

Index für die Tabelle SpecialtyProducts ergänzen
Abbildung 8: Index für die Tabelle SpecialtyProducts ergänzen.

Sie können im Dialogfeld Indexes/Keys durch Klick auf die Schaltfläche Add auch ein UNIQUE-Constraint erstellen. Dadurch wird das Dialogfeld um einen Basisindex ergänzt, der im Beispiel IX_SpecialtyProducts heißt (siehe Abbildung 8).

Auch hier können Sie den Namen oder andere Einstellungen ändern. In diesem Beispiel habe ich den Namen in uq_AltID geändert, weil der Constraint auf der Spalte AltID erstellt werden soll. Doch um diese in eine UNIQUE-Einschränkung zu verwandeln, müssen wir ein paar weitere Schritte unternehmen. Zunächst müssen wir die AltID Spalte spezifizieren. Beachten Sie hier, dass die AltID Spalte Nullwerte ermöglicht. Durch das Erstellen eines UNIQUE Index auf dieser Spalte wird zu einer bestimmten Zeit nur ein einziger Nullwert erlaubt. Diese Eigenschaft ist zwar ungewöhnlich für die meisten relationalen Datenbanken, funktioniert aber in SQL Server auf diese Weise. Daher sollten Sie überlegen, ob Sie in dieser Spalte Nullwerte zulassen möchten.

Genauere Bestimmung der indizierten Spalte
Abbildung 9: Genauere Bestimmung der indizierten Spalte.

Um die AltID Spalte zu spezifizieren, wählen Sie die Eigenschaften der Spalte und klicken Sie auf die Schaltfläche Durchsuchen (die Ellipsen), die sich rechts in der Liste der Eigenschaften befindet. Daraufhin öffnet sich das Dialogfeld Index Columns, über das Sie die Spalten auswählen, die im Constraint und der Sortierung jeder Spalte enthalten sein sollen (siehe Abbildung 9).

Erstellen eines UNIQUE-Constraint für die Spalte AltID
Abbildung 10: Erstellen eines UNIQUE-Constraint für die Spalte AltID.

Nach Auswahl der AltID Spalte klicken Sie auf OK, um das Dialogfeld zu schließen. Im Dialogfeld Indexes/Key wählen Sie in den Eigenschaften die Option Unique Key. Dadurch wird die Eigenschaft Is Unique automatisch auf Ja gesetzt. Abbildung 10 zeigt, wie der UNIQUE-Constraint nun mit neuem Namen und aktualisierten Einstellungen aussieht.

Hinzufügen eines Fremdschlüssels (Foreign Key)
Abbildung 11: Hinzufügen eines Fremdschlüssels (Foreign Key) für die Tabelle SpecialtyProducts.

Im nächsten Schritt erstellen wir eine FOREIGN KEY-Einschränkung für die Spalte ProductID. Der Fremdschlüssel verweist in der Product-Tabelle auf die Spalte ProductID. Um den FOREIGN KEY-Constraint zu erstellen, führen Sie im oberen Bereich des Table Designers  einen Klick mit der rechten Maustaste aus und klicken dann auf Relationships. Wenn das Dialogfeld Foreign Key Relationships erscheint, klicken Sie auf Hinzufügen, um die neue Einschränkung erstellen. Abbildung 11 zeigt das Dialogfeld mit dem ursprünglichen Fremdschlüssel, bevor irgendeine Eigenschaft konfiguriert wurde.

Festlegen der Spalten für den Fremdschlüssel (Foreign Key)
Abbildung 12: Festlegen der Spalten für den Fremdschlüssel (Foreign Key).

Hier müssen wir zumindest die Eigenschaftenliste der Tabellen und Spalten ändern, die im Fremdschlüssel die referenzierten und referenzierenden Spalten identifiziert ändern. Wählen Sie die Liste der Eigenschaften und klicken Sie auf die zugehörige Durchsuchen-Schaltfläche. Wenn das Dialogfeld Tables and Columns erscheint, wählen Sie die Product-Tabelle als Primärschlüssel-Tabelle und die Spalte ProductID aus dieser Tabelle. Für die SpecialtyProducts Tabelle, die Fremdschlüsseltabelle, wählen Sie ebenfalls die Spalte ProductID. Zusätzlich ändern Sie bei Bedarf den Namen des Fremdschlüssels, hier im Beispiel fk_ProductID. Das Dialogfeld Tables and Columns sollte nun ähnlich wie in Abbildung 12 aussehen.

Definition eines Fremdschlüssels für die Spalte ProductID
Abbildung 13: Definition eines Fremdschlüssels für die Spalte ProductID.

Wenn Sie die Tabellen und Spalten des Constraints definiert haben, klicken Sie auf OK, um das Dialogfeld Tables and Columns zu schließen. Das Dialogfeld Foreign Key Relationships sollte die Änderungen widerspiegeln (siehe Abbildung 13). Beachten Sie, dass die Eigenschaften-Gruppe für die Spezifikation der Tabellen und Spalten nun die referenzierenden und referenzierte Tabellen und Spalten anzeigt. Auch der Name des Constraints wurde aktualisiert.

An dieser Stelle können Sie bei Bedarf weitere FOREIGN KEY-Constraints hinzufügen. Zum Beispiel könnten Sie einen Fremdschlüssel für die Spalte StoreID definieren, die auf die Spalte BusinessEntityID in der Sales.Store Tabelle verweist. Aber jetzt machen wir weiter mit Check-Constraints.

Erstellen eines Check Constraint für die Tabelle SpecialtyProducts
Abbildung 14: Erstellen eines Check Constraint für die Tabelle SpecialtyProducts.

Sie fügen ein Check-Constraint über den Klick mit der rechten Maustaste in den oberen Arbeitsbereich des Table Designers und einen Klick auf  Check Constraints hinzu. Wenn das Dialogfeld Check Constraint erscheint, klicken Sie auf Hinzufügen. Abbildung 14 zeigt das Dialogfeld mit dem ursprünglichen Constraint vor der Konfiguration seiner Eigenschaften.

Definition der Expression des CHECK-Constraint
Abbildung 15: Definition der Expression des CHECK-Constraint.

Sie müssen die Expression-Eigenschaft konfigurieren, um ein CHECK-Constraint zu erstellen. Dies erfolgt entweder direkt über Expression oder durch Klick auf die Schaltfläche Durchsuchen, um das Dialogfeld Check Constraint Expression zu öffnen. Dort eröffnen sich mehrere Optionen für die Arbeit mit Expression (siehe Abbildung 15)

In diesem Fall legt unsere Expression fest, dass jeder AltID Wert dem String Value der regulären Expression entspricht, der mit „SP“ beginnt und mit fünf Ziffern endet. Die erste Ziffer ist 1 bis 9, und jede verbleibende Ziffer muss 0 bis 9 ergeben. Als Ergebnis lassen sich nur Werte in die AltID Spalte einfügen, die diesem Format entsprechen. Sie können zum Beispiel SP54321 einfügen, nicht SC01234.

Konfiguration einer CHECK-Einschränkung auf die Spalte AltID
Abbildung 16: Konfiguration einer CHECK-Einschränkung auf die Spalte AltID.

Sobald Sie Ihre Expression definiert haben, können Sie eine der anderen Eigenschaften setzen und beispielsweise den Namen ändern. In diesem Fall habe ich den Constraint ck_AltID umbenannt. Abbildung 16 zeigt, wie die CHECK-Einschränkung im Dialogfeld Check Constraints aussehen sollte.

Wie Sie sehen, vereinfacht der Table Designer das Erstellen von CHECK-Constraints sowie anderer Arten von Einschränkungen. Angesichts der wichtigen Rolle, die Beschränkungen bei der Gewährleistung der Integrität Ihrer Daten spielen, sollten Sie hier korrekt arbeiten. Dabei hilft der Table Designer.

Zusammenfassung

Speichern der Tabelle SpecialtyProducts in der Datenbank
Abbildung 17: Speichern der Tabelle SpecialtyProducts in der Datenbank.

Sobald Sie die Eigenschaften Ihrer Tabelle definiert, die Spalten erstellt und die Einschränkungen hinzugefügt haben, können Sie die Tabellendefinition in der Datenbank speichern. Das folgende Dialogfeld zeigt die Liste der Tabellen, die von Ihrer neuen Tabelle betroffen sind (siehe Abbildung 17). In diesem Fall ist die Product-Tabelle enthalten, da wir eine Foreign Key-Beziehung zu der Tabelle definiert haben.

Jetzt können Sie die Tabelle im Objekt-Explorer des SSMS anzeigen. (Wahrscheinlich müssen Sie die Liste der Tabellen in der Datenbank aktualisieren). Abbildung 18 zeigt die neue Tabelle in der Liste der AdventureWorks2012 Datenbank. Beachten Sie, dass jeder Knoten erweitert wurde, um die erstellten Spalten, Schlüssel, Einschränkungen, Indizes und Statistiken anzuzeigen.

Anzeige der Tabelle SpecialtyProducts im Objekt-Explorer
Abbildung 18: Anzeige der Tabelle SpecialtyProducts im Objekt-Explorer.

Sie können jetzt einfach T-SQL anzeigen – der Code definiert die Tabelle -  und den Code in einer Skriptdatei speichern. Klicken Sie mit der rechten Maustaste auf die Tabelle, gehen Sie auf Script Table, anschließend auf CREATE To und dann auf New Query Editor Window. Der Code wird in einem eigenen Abfrage-Fenster angezeigt. Hier sehen Sie die Ergebnisse Ihrer Aktionen. Sie erkennen, wie die Spalten und Constraints erstellt und die Eigenschaften der Tabelle konfiguriert sind.

Der Table Designer ist möglicherweise nicht für jedermann geeignet. Er bietet aber eine wertvolle Ressource für Personen, die nach einer Lösung suchen, Tabellen einfach zu erstellen und mehr über den Prozess der Tabellendefinitionen erfahren wollen. Der Table Designer öffnet zum einen den Zugang zu den verschiedenen Einstellungen für eine Tabelle und ihre Spalten. Zum anderen bietet er eine benutzerfreundliche Umgebung für die Anzeige aller Optionen und die Verknüpfungen zwischen Tabellen und Spalten. Selbst wenn Sie den Table Designer nur als Sprungbrett ansehen, um T-SQL zu lernen, werden Sie von den Funktionen dieses Tools profitieren.

Folgen Sie SearchEnterpriseSoftware.de auch auf Twitter, Google+ und Facebook!

Erfahren Sie mehr über Datenbanken