Tabellenconstraints

Abgeschlossen

Mit Datenbanktabelleneinschränkungen können Sie nicht nur steuern, was und wie Sie Daten speichern, sondern auch Beziehungen zwischen Tabellen definieren.

Mithilfe von Einschränkungen und Tabellenbeziehungen können Sie die spezifischen Regeln des Kartenspiels für die Datenqualität ohne doppelte Zeilen erfüllen. Doppelte Zeilen müssen unbedingt entfernt werden, denn sie verursachen nicht nur Leistungsprobleme, sondern verhindern auch, dass vollständige, konsistente und genaue Daten (auch Datenintegrität genannt) bereitgestellt werden können.

Indem Sie sich mit der Verwendung von Einschränkungen und Tabellenbeziehungen vertraut machen, können Sie die Datenintegrität in der gesamten Anwendung gewährleisten.

Zuweisen von eindeutigen Werten mit Primärschlüsseln

Die Klassifizierung hilft bei der Suche nach einem bestimmten Element, indem sie die Auswahl einschränkt und weniger Ergebnisse anzeigt. Eine relationale Datenbank enthält Primärschlüssel, bei denen es sich um eine Spalte oder eine Kombination von Spalten handelt, die Werte enthalten, mit denen jede Zeile in einer Tabelle eindeutig identifiziert wird. Mit dem Kartenspiel können Sie ein Suchergebnis nach Kartentyp oder -farbe einschränken, Wenn Sie zusätzlich einen Primärschlüssel zuweisen, kann die Datenbank jedoch sofort alle Informationen über diese Karte mit einem einzigen eindeutigen Wert abrufen.

Wenn Sie Tabellen definieren und erstellen, können Sie eine Primärschlüsselspalte mit einer Identitätsspalte kombinieren. Indem Sie die beiden Spalten kombinieren, erhalten Sie nicht nur einen eindeutigen Wert, sondern stellen auch sicher, dass Azure SQL diese eindeutigen Werte automatisch erzwingt und generiert. Beachten Sie, dass eine Tabelle nur einen Primärschlüssel enthalten kann und diese Spalte(n) keine leeren oder NULL-Werte enthalten darf. In unserem Szenario enthält die Kartentabelle einen Primärschlüssel in der Spalte card_id, der einen direkten Lookupzeiger für eine bestimmte Karte bereitstellt, nach der ein Benutzer sucht.

Diagram showing an arrow pointing to a primary key in a table.

Definieren von Tabellenbeziehungen mit Fremdschlüsseln

Eine Anforderung für die Online-Kartenreferenzanwendung besteht darin, Karten mit Übersetzungen für mehrere Sprachen zu unterstützen. Sie könnten einfach Spalten für jede Sprache in die Hauptkartentabelle einfügen, diese Vorgehensweise würde jedoch irgendwann unübersichtlich werden. Außerdem müssten Sie der Tabelle jedes Mal eine neue Spalte hinzufügen, wenn eine neue Übersetzung erforderlich ist. Besser wäre die Verwendung einer separaten Übersetzungstabelle, die Sie mit der Spalte card_id der Kartentabelle verknüpfen können. An dieser Stelle kommen Fremdschlüssel ins Spiel.

Ein Fremdschlüssel ist eine Spalte oder eine Kombination von Spalten, die verwendet wird, um einen Link oder eine Beziehung zwischen zwei Tabellen zu erzwingen. Fremdschlüssel helfen bei der Steuerung der Daten, die mit dieser Beziehung gespeichert werden können, Dadurch wird sichergestellt, dass nur Daten aus der Primärschlüsselspalte der zugehörigen Tabelle in der Fremdschlüsselspalte gespeichert werden können. Im Kartenspielszenario verwenden Sie eine Fremdschlüsselbeziehung in der Übersetzungstabelle zum Primärschlüssel der Tabelle „Hauptkarten“. Diese Beziehung erlaubt dann nur die Eingabe von Werten aus der Primärschlüsselspalte der Kartentabelle in die Fremdschlüsselspalte der Übersetzungstabelle, um sicherzustellen, dass immer eine Beziehung zwischen den beiden vorhanden ist, die verwaiste Zeilen oder ungenaue Daten verhindert. Sie würde beispielsweise die Übersetzungstabelle keine Zeile für die Kartennummer 52 enthalten, wenn die Kartennummer 52 nicht in der Kartentabelle vorhanden wäre.

Diagram showing tables linked by foreign keys.

Erzwingen der Datenintegrität mit Einschränkungen

NULL-Werte, Standardwerte und CHECK-Einschränkungen

Indem Sie steuern, welche Daten in den Kartenspieltabellen gespeichert werden, können Sie unerwünschte Werte ausschließen und die Datenintegrität erzwingen (vollständige, konsistente und genaue Datensätze). Am einfachsten sind Spalten, in denen immer ein Wert eingegeben werden muss, wie z. B. den Kartennamen, um zu verhindern, dass wichtige Daten unberücksichtigt bleiben. Beim Erstellen der Tabellen können Sie die Spalten so festlegen, dass leere oder NULL-Werte zugelassen oder nicht zugelassen werden. Die Azure SQL-Datenbank erkennt, wenn eine Person nicht alle erforderlichen Datenelemente bereitstellt, indem sie NULL-Werte übermittelt. In diesem Fall verhindert die Datenbank die Eingabe des Datensatzes.

Azure SQL kann auch dabei helfen, zu steuern, welche Werte in einer Spalte zulässig sind, indem ein oder mehrere Standardwerte zugewiesen werden. Die Datenbank kann die zulässigen Daten sogar auf eine bestimmte Auswahl von Werten beschränken. Mit Standardwerten für eine Spalte können Sie der Datenbank mitteilen, welchen Wert sie verwenden soll, wenn kein Wert definiert ist. Ein Beispiel dafür ist die Statusspalte, die mit der Kartenreferenzanwendung verwendet werden kann. Sie können der Spalte einen Standardwert zuweisen, der für den Karteneintrag verwendet wird, um die Dateneingabe zu beschleunigen und die Standardelemente der Benutzeroberfläche zu unterstützen.

Check-Einschränkungen können die Werte einschränken, die in einer Spalte verwendet werden kann. Im Szenario der Kartenreferenzanwendung müssen die Kartenfarbe und der Kartentyp bestimmte Werte aufweisen – eine perfekte Bedingung für eine CHECK-Einschränkung, sodass Werte, die diese Kriterien nicht erfüllen, abgelehnt werden.

Diagram showing a check constraint rejecting a value that is not in the list of acceptable values.

In manchen Situationen ist die Festlegung bestimmter Standardwerte nicht möglich. Ein Beispiel hierfür wäre eine Spalte, die nur Zahlen zwischen 1 und 10.000 zulässt. Es wäre unnötig und zeitaufwändig, eine Liste von Werten für 10.000 einzelne Zahlen zu erstellen. Sie können eine CHECK-Einschränkung mit einem beliebigen logischen (booleschen) Ausdruck erstellen, der auf der Grundlage der logischen Operatoren TRUE oder FALSE ergibt, z. B. eine Reihe von Werten mit den Operatoren „größer als“ und „kleiner als“. Sie können mehrere CHECK-Einschränkungen für eine einzelne Spalte festlegen, und Sie können eine einzelne CHECK-Einschränkung auf mehrere Spalten anwenden.

UNIQUE-Einschränkungen

Genau wie ein Primärschlüssel die Eindeutigkeit erzwingt, gibt es Fälle, in denen eine Spalte eindeutige Werte haben soll, aber nicht der Primärschlüssel ist (da es ja nur einen Primärschlüssel pro Tabelle gibt). Wenn Sie eine Spalte mit einer eindeutigen Einschränkung erstellen, kann Azure SQL die Eingabe eindeutiger Werte zulassen, im Gegensatz zu einem Primärschlüssel ggf. NULL-Werte zulassen und diese bei Bedarf als Fremdschlüssel verwenden. Wir können in der Kartenanwendung eine eindeutige Einschränkung für die Tabelle set_lists verwenden. Hier können Sie eine eindeutige Einschränkung für die Spalten card_id und set_id festlegen, um sicherzustellen, dass eine Karte nicht mehr als einmal zu einer Gruppe hinzugefügt wird.

Überprüfen Sie Ihr Wissen

1.

Ein Fremdschlüssel verweist auf welchen Spaltentyp in einer anderen Tabelle?

2.

Welche Art von Einschränkung würden Sie verwenden, um die Werte, die von einer oder mehreren Spalten in einer Tabelle akzeptiert werden, mithilfe logischer Ausdrücke auf einen angegebenen Bereich zu beschränken?