Was sind Datenbankeinschränkungen? [geschlossen]

92

Was ist eine klare Definition der Datenbankbeschränkung? Warum sind Einschränkungen für eine Datenbank wichtig? Welche Arten von Einschränkungen gibt es?

bala3569
quelle
12
Diese Frage hat eine klare Antwort. Es ist nicht "zu breit". Die große Anzahl von Upvotes und Favoriten zeigt, wie nützlich es für viele Menschen war. Ich habe den Wortlaut bereinigt und zur Wiedereröffnung vorgeschlagen.
La-Comadreja
@BasilBourque Diese Frage passt sehr schlecht zu Programmierern - sie würde schnell abgelehnt und dort geschlossen werden, siehe meta.programmers.stackexchange.com/questions/6483/… Empfohlene Lektüre: Was geht auf Programmers.SE? Eine Anleitung für Stack Overflow
Mücke
1
@gnat Während diese Seite mich immer noch verwirrt darüber lässt, was für Programmers Stack Exchange aktuell ist oder nicht, kann ich einen Mindestschwellenwert für den Posting-Autor verstehen und ihm zustimmen, der zuerst einen direkt relevanten Wikipedia-Artikel gelesen hat, der das Thema enthält Dieselbe Art von komprimierter oder zusammenfassender Übersicht wird an der Stapelbörse angefordert.
Basil Bourque
2
Der Titel ist zu weit gefasst und die Unterfragen stellen mehrere Fragen gleichzeitig. -_- Wie wollen TomTom, P ரதீப், greg-449, bummi und Nit das? Bitte erkläre. Gibt es überhaupt eine Möglichkeit, nach Einschränkungen zu fragen ...?
Lealo
Obwohl ich verstehe, dass die Einstellung zu Fragen zu bord- und meinungsbasiert ist, stimme ich der Anforderung, einen Wikipedia-Artikel in erster Lesung zu lesen, nicht zu. Es bietet NICHT die "gleiche Art von komprimierter oder zusammenfassender Übersicht". Die akzeptierte Antwort bietet eine viel komprimiertere und präzisere Antwort als der obige Wikipedia-Link.
Chris

Antworten:

117

Einschränkungen sind Teil einer Datenbankschemadefinition.

Eine Einschränkung ist normalerweise einer Tabelle zugeordnet und wird mit einer CREATE CONSTRAINToder CREATE ASSERTIONSQL-Anweisung erstellt.

Sie definieren bestimmte Eigenschaften, denen Daten in einer Datenbank entsprechen müssen. Sie können auf eine Spalte, eine ganze Tabelle, mehr als eine Tabelle oder ein ganzes Schema angewendet werden. Ein zuverlässiges Datenbanksystem stellt sicher, dass Einschränkungen jederzeit gültig sind (außer möglicherweise innerhalb einer Transaktion, für sogenannte verzögerte Einschränkungen).

Häufige Arten von Einschränkungen sind:

  • nicht null - jeder Wert in einer Spalte darf nicht NULL sein
  • unique - Wert (e) in angegebenen Spalten müssen für jede Zeile in einer Tabelle eindeutig sein
  • Primärschlüssel - Wert (e) in angegebenen Spalten müssen für jede Zeile in einer Tabelle eindeutig sein und dürfen nicht NULL sein . Normalerweise sollte jede Tabelle in einer Datenbank einen Primärschlüssel haben - er wird verwendet, um einzelne Datensätze zu identifizieren
  • Fremdschlüssel - Wert (e) in angegebenen Spalten müssen auf einen vorhandenen Datensatz in einer anderen Tabelle verweisen (über den Primärschlüssel oder eine andere eindeutige Einschränkung ).
  • check - Es wird ein Ausdruck angegeben, der als wahr ausgewertet werden muss, damit die Einschränkung erfüllt wird
Ziga Kranjec
quelle
3
+1 für das Einschließen von PK, nicht null, null
gbn
+1, dennoch können Sie FOREIGN KEY-Szenarien erweitern und einige Links bereitstellen.
Unvernunft
2
Check Constraints dürfen nicht als false ausgewertet werden. Sie müssen nicht wahr sein. Unbekannt ist auch in Ordnung.
Martin Smith
2
Wäre eine Typeinschränkung nicht auch eine übliche Art?
Martin
1
Obwohl wir sie normalerweise nicht als Einschränkungen bezeichnen, würde ich argumentieren, dass der Datentyp eine Form der Einschränkung ist. Wenn ich etwas als Int oder Datetime definiere, wird dadurch der Datentyp eingeschränkt, der in das Feld eingefügt werden kann. Die richtige Auswahl der Datentypen ist ein entscheidender Bestandteil der Gewährleistung der Datenintegrität.
HLGEM
36

Um zu verstehen, warum wir Einschränkungen benötigen, müssen Sie zunächst den Wert der Datenintegrität verstehen.

Datenintegrität bezieht sich auf die Gültigkeit von Daten. Sind Ihre Daten gültig? Stellen Ihre Daten das dar, wofür Sie sie entworfen haben?

Welche seltsamen Fragen ich Ihnen stelle, denken Sie vielleicht, aber leider sind Datenbanken allzu oft mit Mülldaten gefüllt, ungültigen Verweisen auf Zeilen in anderen Tabellen, die längst verschwunden sind ... und Werten, die für die Geschäftslogik nichts bedeuten Ihrer Lösung nicht mehr.

All dieser Müll ist nicht allein anfällig für Leistungseinbußen, sondern auch eine Zeitbombe unter Ihrer Anwendungslogik, die schließlich Daten abruft, die nicht verstanden werden sollen.

Einschränkungen sind Regeln, die Sie zur Entwurfszeit erstellen und die Ihre Daten vor Beschädigung schützen. Für das langfristige Überleben Ihres Herzkindes ist eine Datenbanklösung unerlässlich. Ohne Einschränkungen wird Ihre Lösung mit der Zeit und der starken Nutzung definitiv verfallen.

Sie müssen anerkennen, dass das Entwerfen Ihres Datenbankdesigns nur die Geburtsstunde Ihrer Lösung ist. Hier muss es (hoffentlich) lange leben und alle Arten von (seltsamem) Verhalten seiner Endbenutzer (dh Client-Anwendungen) ertragen. Diese Entwicklungsphase in der Entwicklung ist jedoch entscheidend für den langfristigen Erfolg Ihrer Lösung! Respektiere es und schenke ihm die Zeit und Aufmerksamkeit, die es braucht.

Ein weiser Mann sagte einmal: "Daten müssen sich selbst schützen!" . Und genau das tun Einschränkungen. Es sind Regeln, die die Daten in Ihrer Datenbank so gültig wie möglich halten.

Es gibt viele Möglichkeiten, dies zu tun, aber im Grunde laufen sie darauf hinaus:

  • Fremdschlüsseleinschränkungen sind wahrscheinlich die am häufigsten verwendeten Einschränkungen und stellen sicher, dass Verweise auf andere Tabellen nur zulässig sind, wenn tatsächlich eine Zielzeile zum Verweisen vorhanden ist. Dies macht es auch unmöglich, eine solche Beziehung zu brechen, indem die referenzierte Zeile gelöscht wird, wodurch ein toter Link erstellt wird.
  • Durch Überprüfen von Einschränkungen kann sichergestellt werden, dass in bestimmten Spalten nur bestimmte Werte zulässig sind. Sie können eine Einschränkung erstellen, die nur das Wort "Gelb" oder "Blau" in einer VARCHAR-Spalte zulässt. Alle anderen Werte würden einen Fehler ergeben. Holen Sie sich Ideen für die Verwendung von Prüfeinschränkungen. Überprüfen Sie die sys.check_constraintsAnsicht in der AdventureWorks-Beispieldatenbank
  • Regeln in SQL Server sind nur wiederverwendbare Einschränkungen prüfen (ermöglicht es Ihnen, die Syntax von einem einzigen Ort aus zu verwalten und das Bereitstellen Ihrer Einschränkungen in anderen Datenbanken zu vereinfachen).

Wie ich hier angedeutet habe, sind einige gründliche Überlegungen erforderlich, um den besten und defensivsten Constraint-Ansatz für Ihr Datenbankdesign zu entwickeln. Sie müssen zunächst die Möglichkeiten und Einschränkungen der verschiedenen oben genannten Einschränkungstypen kennen. Weiterführende Literatur könnte beinhalten:

AUSLÄNDISCHE SCHLÜSSELBESCHRÄNKUNGEN - Microsoft

Fremdschlüsseleinschränkung - w3schools

Einschränkungen PRÜFEN

Viel Glück! ;)

Alex
quelle
Als Nekro-Kommentar scheint es, dass Regeln jetzt von Microsoft entleert werden.
Gary
6

Einschränkungen sind nichts anderes als die Regeln für die Daten. Welche Daten gültig und welche ungültig sind, kann mithilfe von Einschränkungen definiert werden. So kann diese Integrität der Daten aufrechterhalten werden. Im Folgenden sind die weit verbreiteten Einschränkungen aufgeführt:

  1. Primärschlüssel : Identifiziert die Daten eindeutig. Wenn diese Einschränkung für eine bestimmte Spalte angegeben wurde, können in dieser Spalte keine doppelten Daten eingegeben werden
  2. Überprüfen Sie : Wie NOT NULL. Hier können wir angeben, welche Daten wir für diese bestimmte Spalte eingeben können und was für diese Spalte nicht erwartet wird.
  3. Fremdschlüssel : Fremdschlüsselverweise auf die Zeile einer anderen Tabelle. Damit sind Daten, auf die in einer Tabelle aus einer anderen Tabelle verwiesen wird, immer für die Referenzierungstabelle verfügbar.
user3107247
quelle
3

Einschränkungen können verwendet werden, um bestimmte Eigenschaften von Daten zu erzwingen. Ein einfaches Beispiel besteht darin, eine int-Spalte auf Werte [0-100000] zu beschränken. Diese Einführung sieht gut aus.

Anders Abel
quelle
3

Einschränkungen bestimmen, welche Werte für Daten in der Datenbank gültig sind. Sie können beispielsweise erzwingen, dass ein Wert nicht null ist (eine NOT NULLEinschränkung) oder dass er als eindeutige Einschränkung in einer anderen Tabelle vorhanden ist (eine FOREIGN KEYEinschränkung) oder dass er in dieser Tabelle eindeutig ist (eine UNIQUEEinschränkung oder möglicherweise eine PRIMARY KEYEinschränkung, abhängig von Ihren Anforderungen) ). Allgemeinere Einschränkungen können mithilfe von CHECKEinschränkungen implementiert werden .

Die MSDN-Dokumentation für SQL Server 2008-Einschränkungen ist wahrscheinlich der beste Ausgangspunkt.

Jon Skeet
quelle
2
  1. UNIQUEEinschränkung (von der eine PRIMARY KEYEinschränkung eine Variante ist). Überprüft, ob alle Werte eines bestimmten Felds in der Tabelle eindeutig sind. Dies ist eine XAchsenbeschränkung (Datensätze)

  2. CHECKEinschränkung (von der eine NOT NULLEinschränkung eine Variante ist). Überprüft, ob eine bestimmte Bedingung für den Ausdruck über den Feldern desselben Datensatzes gilt. Dies ist eine YAchsenbeschränkung (Felder).

  3. FOREIGN KEYZwang. Überprüft, ob der Wert eines Felds unter den Werten eines Feldes in einer anderen Tabelle gefunden wird. Dies ist eine ZAchsenbeschränkung (Tabellen).

Quassnoi
quelle
Eindeutige Einschränkungen und Fremdschlüsseleinschränkungen können mithilfe von CHECKEinschränkungen geschrieben werden. Warum also als unterschiedlich klassifizieren? dh " Y-Achse" (was auch immer das bedeutet).
Tag, wenn der
2
@onedaywhen: Wie implementiere ich eine FOREIGN KEYVerwendung einer CHECKEinschränkung?
Quassnoi
1
@onedaywhen: Versuchen Sie, eine Tabelle mit dieser Einschränkung zu erstellen.
Quassnoi
1
@onedaywhen: ist es so schwer zu versuchen? Hinweis: Das wird nicht funktionieren.
Quassnoi
3
@onedaywhen: Die von Ihnen geschriebene Abfrage erstellt keine Prüfbedingung. Es ist nur eine SELECTFrage. Sie können keine Unterabfragen (oder andere Konstrukte, die auf Werte außerhalb des aktuellen Datensatzes verweisen) in CHECKEinschränkungen in verwenden SQL Server.
Quassnoi
2

Eine Datenbank ist die computergestützte logische Darstellung eines konzeptionellen (oder Geschäfts-) Modells, das aus einer Reihe informeller Geschäftsregeln besteht. Diese Regeln sind die vom Benutzer verstandene Bedeutung der Daten. Da Computer nur formale Darstellungen verstehen, können Geschäftsregeln nicht direkt in einer Datenbank dargestellt werden. Sie müssen einer formalen Darstellung zugeordnet werden, einem logischen Modell, das aus einer Reihe von Integritätsbeschränkungen besteht. Diese Einschränkungen - das Datenbankschema - sind die logische Darstellung der Geschäftsregeln in der Datenbank und daher die vom DBMS verstandene Bedeutung der Daten. Daraus folgt, dass das DBMS, wenn es die vollständigen Einschränkungen, die die Geschäftsregeln darstellen, nicht kennt und / oder nicht durchsetzt, ein unvollständiges Verständnis der Bedeutung der Daten hat und daher

Hinweis: Die DBMS-Bedeutung „verstanden“ - Integritätsbeschränkungen - ist nicht identisch mit der vom Benutzer verstandenen Bedeutung - Geschäftsregeln -, aber trotz des Verlusts einer gewissen Bedeutung erhalten wir die Möglichkeit, logische Schlussfolgerungen aus den Daten zu mechanisieren.

"Eine alte Klasse von Fehlern" von Fabian Pascal

eines Tages, wenn
quelle
2

Grundsätzlich gibt es in SQL vier Arten von Haupteinschränkungen:

  • Domänenbeschränkung: Wenn einer der für ein neues Tupel angegebenen Attributwerte nicht der angegebenen Attributdomäne entspricht

  • Schlüsselbeschränkung: Wenn der Wert eines Schlüsselattributs in einem neuen Tupel bereits in einem anderen Tupel in der Beziehung vorhanden ist

  • Referenzielle Integrität: Wenn ein Fremdschlüsselwert in einem neuen Tupel auf einen Primärschlüsselwert verweist, der in der referenzierten Beziehung nicht vorhanden ist

  • Entitätsintegrität: Wenn der Primärschlüsselwert in einem neuen Tupel null ist

Ragu
quelle
-1

Einschränkungen sind Bedingungen, die bestimmte Bedingungen validieren können. Mit der Datenbank verbundene Einschränkungen sind Domänenintegrität, Entitätsintegrität, referenzielle Integrität, benutzerdefinierte Integritätsbeschränkungen usw.

Prashant Kumbharkar
quelle