Datenintegrität

Durch das Erzwingen der Datenintegrität wird die Qualität der Daten in der Datenbank sichergestellt. Wenn für einen Mitarbeiter z. B. der Mitarbeiter-ID-Wert 123 eingegeben wird, sollte es nicht zulässig sein, dass in der Datenbank die ID eines anderen Mitarbeiters denselben Wert aufweist. Wenn für eine employee_rating-Spalte vorgesehen ist, dass sie Werte aus dem Bereich von 1 bis 5 enthalten soll, darf die Datenbank einen Wert außerhalb dieses Bereichs nicht akzeptieren. Wenn die Tabelle eine dept_id-Spalte enthält, in der die Abteilungsnummer für den Angestellten gespeichert wird, sollte die Datenbank nur Werte zulassen, die gültige Abteilungsnummern im Unternehmen darstellen.

Zwei wichtige Schritte beim Planen einer Datenbank sind das Identifizieren der gültigen Werte für eine Spalte und das Festlegen des Mechanismus, der die Integrität der Daten in der Spalte erzwingt. Datenintegrität lässt sich in die folgenden Kategorien aufteilen:

  • Entitätsintegrität

  • Domänenintegrität

  • Referenzielle Integrität

  • Benutzerdefinierte Integrität

Entitätsintegrität

Durch die Entitätsintegrität wird eine Zeile als eindeutige Entität innerhalb einer bestimmten Tabelle definiert. Die Entitätsintegrität erzwingt die Integrität der Bezeichnerspalten oder des Primärschlüssels einer Tabelle (mithilfe von UNIQUE-Indizes, UNIQUE-Einschränkungen oder PRIMARY KEY-Einschränkungen).

Domänenintegrität

Domänenintegrität bezeichnet die Gültigkeit der Einträge einer bestimmten Spalte. Sie kann durch Beschränken des Typs (über Datentypen), des Formats (über CHECK-Einschränkungen und Regeln) oder des Bereichs möglicher Werte (über FOREIGN KEY-Einschränkungen, CHECK-Einschränkungen, DEFAULT-Definitionen, NOT NULL-Definitionen sowie über Regeln) erzwungen werden.

Referenzielle Integrität

Die referenzielle Integrität behält die definierten Beziehungen zwischen Tabellen bei, wenn Zeilen eingegeben oder gelöscht werden. In SQL Server basiert die referenzielle Integrität auf Beziehungen zwischen Fremdschlüsseln und Primärschlüsseln oder zwischen Fremdschlüsseln und eindeutigen Schlüsseln (über FOREIGN KEY- und CHECK-Einschränkungen). Die referenzielle Integrität stellt die tabellenübergreifende Konsistenz von Schlüsseln sicher. Eine solche Konsistenz erfordert, dass keine Verweise auf nicht vorhandene Werte bestehen und dass beim Ändern eines Schlüsselwertes alle Verweise auf diesen Wert in der Datenbank konsistent geändert werden.

Wenn Sie referenzielle Integrität erzwingen, verhindert SQL Server, dass Benutzer folgende Aktionen ausführen:

  • Hinzufügen oder Ändern von Zeilen zu einer verbundenen Tabelle, wenn in der primären Tabelle keine zugeordnete Zeile vorhanden ist.

  • Ändern von Werten in einer primären Tabelle, wenn dies in der verbundenen Tabelle zu verwaisten Zeilen führt.

  • Löschen von Zeilen aus einer primären Tabelle, wenn entsprechende verbundene Zeilen vorhanden sind.

Für die Tabellen Sales.SalesOrderDetail und Production.Product in der AdventureWorks2008R2-Datenbank basiert die referenzielle Integrität z. B. auf der Beziehung zwischen dem Fremdschlüssel (ProductID) in der Sales.SalesOrderDetail-Tabelle und dem Primärschlüssel (ProductID) in der Production.Product-Tabelle. Durch diese Beziehung wird sichergestellt, dass eine Bestellung niemals auf ein Produkt verweisen kann, das in der Production.Product-Tabelle nicht vorhanden ist.

Referenzielle Integrität mit Fremd-/Primärschlüsseln

Benutzerdefinierte Integrität

Die benutzerdefinierte Integrität ermöglicht es Ihnen, bestimmte Geschäftsregeln zu definieren, die keiner der anderen Integritätskategorien zugeordnet werden können. Sämtliche Integritätskategorien unterstützen die benutzerdefinierte Integrität. Das schließt alle Einschränkungen auf Spalten- und Tabellenebene in CREATE TABLE, gespeicherten Prozeduren und Triggern ein.