Geekflare wird von unserem Publikum unterstützt. Es kann sein, dass wir durch den Kauf von Links auf dieser Seite Affiliate-Provisionen verdienen.
Unter Datenbank Zuletzt aktualisiert: September 24, 2023
Weitergeben:
Invicti Web Application Security Scanner - die einzige Lösung, die eine automatische Überprüfung von Schwachstellen mit Proof-Based Scanning™ ermöglicht.

Wenn Sie ein Unternehmen besitzen, haben Sie sicher schon den Wert und die Notwendigkeit von Daten in Ihrem Unternehmen erkannt. Die Möglichkeit, Datenbanken zu speichern und zu bearbeiten, erhöht den Wert Ihres Unternehmens.

Datenbanken sind nach einer bestimmten Konvention organisiert und ermöglichen es Ihnen, Daten in Verbindungen zu strukturieren. Damit kommen wir zu den relationalen Datenbanken, die sich seit den 1970er Jahren als Form der Datenverwaltung durchgesetzt haben. Und auf dem heutigen Markt werden relationale Datenbanken wegen ihrer Fähigkeiten bei der Datenmanipulation bevorzugt.

Es gibt zwar viele relationale Datenbanken, aber MySQL hat es an die Spitze geschafft und ist laut Statista im Januar 2022 die weltweite Nummer zwei.

Im SQL-Server sind Constraints vordefinierte Regeln und Beschränkungen, die entweder in einer einzelnen oder in mehreren Spalten durchgesetzt werden. Sie sind an die Werte in der Spalte gebunden und helfen dabei, die Integrität, Genauigkeit und Zuverlässigkeit der Daten in den angegebenen Spalten zu erhalten.

Einfach ausgedrückt, werden nur Daten, die der Einschränkungsregel entsprechen, erfolgreich in die Spalte eingefügt. Der Einfügevorgang wird abgebrochen, wenn die Daten die Kriterien nicht erfüllen.

In diesem Beitrag wird davon ausgegangen, dass Sie bereits Erfahrungen mit relationalen Datenbanken, insbesondere mit MySQL, gemacht haben und Ihre Kenntnisse in diesem Bereich vertiefen möchten. Schließlich werde ich Ihnen einige Tipps für den Umgang mit Fremdschlüssel-Beschränkungen geben.

Primärschlüssel-Beschränkungen - eine Rekapitulation

YouTube Video

Eine Tabelle in SQL enthält eine oder mehrere Spalten mit Schlüsselwerten, die jede Zeile im System genau bestimmen. Die Spalte oder Spalten mit der Bezeichnung Primärschlüssel (PK) der Tabelle haben die Aufgabe, die Integrität der Tabelle zu gewährleisten. Primärschlüssel-Beschränkungen garantieren eindeutige Daten und werden oft für eine Identitätsspalte definiert.

Wenn Sie die Primärschlüssel-Beschränkungen für Ihre Tabelle angeben, sorgt die Datenbank-Engine automatisch für die Eindeutigkeit der Daten, indem sie eindeutige Indizes für jede der Primärspalten erzeugt. Primärschlüssel bieten einen extremen Vorteil bei der Verwendung in Abfragen, da sie einen schnellen Datenzugriff ermöglichen.

Wenn Primärschlüssel-Beschränkungen für mehrere Spalten definiert sind, spricht man von einem zusammengesetzten oder zusammengesetzten Primärschlüssel. Und in diesem Fall kann jede Primärschlüsselspalte doppelte Werte enthalten. Die kombinierten Werte aus allen Spalten des Primärschlüssels müssen jedoch eindeutig sein.

Ein gutes Beispiel ist der Fall, dass Sie eine Tabelle mit den Spalten `id`, `Namen` und Alter haben. Wenn Sie die Primärschlüssel-Beschränkung auf die Kombination von `id` und Namen definieren, können Sie doppelte Instanzen der Werte `id` oder Namen haben. Dennoch muss jede Kombination eindeutig sein, um doppelte Zeilen zu vermeiden. Sie können auch Datensätze mit `id=1` und `Name=Walter` und `Alter-22und `id=1`, `Name=Henry` und `Alter=27` haben, aber Sie können keine anderen Datensätze mit `id=1` und `Name=Walter` haben, weil die Kombination nicht eindeutig ist.

Hier sind einige wichtige Aspekte, die Sie kennen sollten:

  1. Eine Tabelle enthält nur eine Primärschlüssel-Beschränkung.
  2. Primärschlüssel dürfen maximal 16 Spalten und eine Länge von 900 Zeichen haben.
  3. Die durch Primärschlüssel erzeugten Indizes können die Indizes in der Tabelle erhöhen. Die Anzahl der geclusterten Indizes in einer Tabelle darf jedoch 1 nicht überschreiten, und die Anzahl der nicht geclusterten Indizes in einer Tabelle ist auf 999 begrenzt.
  4. Wenn clustered und non-clustered für eine Schlüsselbeschränkung nicht spezifiziert sind, wird automatisch clustered genommen.
  5. Alle Spalten, die innerhalb einer Primärschlüssel-Beschränkung deklariert sind, sollten als nicht null definiert sein. Ist dies nicht der Fall, werden alle Spalten, die mit der Einschränkung verknüpft sind, automatisch auf nicht null gesetzt.
  6. Wenn der Primärschlüssel auf einen benutzerdefinierten Spaltentyp der Common Language Runtime (CLR) definiert sind, muss die Implementierung des Typs die binäre Ordnung unterstützen.

Fremdschlüssel-Beschränkungen - Ein Rundown

Ein Fremdschlüssel (FK) ist eine Spalte oder eine Kombination aus mehreren Spalten, die zur Erstellung und Bindung einer Verknüpfung zwischen zwei Tabellen verwendet wird und die Daten verwaltet, die in einer Fremdschlüsseltabelle gespeichert werden sollen.

Bei einer Fremdschlüsselreferenz wird eine Verbindung zwischen zwei Tabellen hergestellt, wenn eine oder mehrere Spalten, die den Primärschlüssel für eine andere Tabelle enthalten, von einer oder mehreren Spalten in einer anderen Tabelle referenziert werden.

Bei der Fremdschlüsselreferenz wird eine Verbindung zwischen zwei Tabellen hergestellt, wenn eine oder mehrere Spalten mit Primärschlüsseln in einer Tabelle von Spalten in einer anderen Tabelle referenziert werden.

In einem praktischen Anwendungsfall können Sie eine Tabelle verwenden, Sales.SalesOrderHeadermit einem Fremdschlüssel haben, der eine Verbindung zu einer anderen Tabelle herstellt, Sales. Person, weil es eine logische Beziehung zwischen Verkäufern und Aufträgen gibt.

Hier verschmilzt die SalesPersonID in der Spalte SalesOrderHeader mit der Primärschlüsselspalte der Tabelle SalesPerson. Der Fremdschlüssel der Tabelle SalesPerson ist die Spalte SalesPersonID in der Spalte SalesOrderHeader.

Diese Beziehung definiert eine Regel: Ein SalesPersonID-Wert kann nicht in Ihrer Tabelle erscheinen SalesOrderHeader vorkommen, wenn er in der TabelleSalesPerson nicht vorhanden ist.

Eine Tabelle kann auf bis zu 253 andere Spalten und Tabellen als Fremdschlüssel verweisen, auch ausgehende Referenzen genannt. Seit 2016 hat der SQL Server die Anzahl der Tabellen und Spalten, auf die Sie in einer einzigen Tabelle verweisen können, auch als eingehende Referenzen bezeichnet, von 253 auf 10000 erhöht. Diese Erhöhung ist jedoch mit einigen Einschränkungen verbunden:

  1. Fremdschlüsselreferenzen, die 253 überschreiten, sind nur für die DML-Operationen DELETE verfügbar. MERGE und UPDATE werden nicht unterstützt.
  2. Tabellen mit Fremdschlüsselreferenzen auf sich selbst sind auf maximal 253 Fremdschlüsselreferenzen beschränkt.
  3. Bei Spaltenspeicherindizes, speicheroptimierten Tabellen und partitionierten Fremdschlüsseltabellen sind die Fremdschlüsselreferenzen auf 253 begrenzt.

Was sind die Vorteile von Fremdschlüsseln?

Wie bereits erwähnt, spielen Fremdschlüssel-Beschränkungen eine wesentliche Rolle bei der Sicherung der Integrität und Datenkonsistenz in relationalen Datenbanken. Im Folgenden finden Sie eine Aufschlüsselung der Gründe, warum Fremdschlüssel-Beschränkungen so wichtig sind.

  1. Referentielle Integrität - Fremdschlüssel-Beschränkungen garantieren, dass jeder Datensatz einer untergeordneten Tabelle einem Datensatz einer primären Tabelle entspricht, wodurch die Datenkonsistenz in beiden Tabellen gewährleistet wird.
  2. Verhinderung verwaister Datensätze - Wenn Sie eine übergeordnete Tabelle löschen, stellen Fremdschlüssel-Beschränkungen sicher, dass die zugehörige untergeordnete Tabelle ebenfalls gelöscht wird, und verhindern so verwaiste Datensätze, die zu Dateninkonsistenzen führen könnten.
  3. Verbesserte Leistung - Fremdschlüssel-Beschränkungen verbessern die Abfrageleistung, indem sie dem Datenbankmanagementsystem ermöglichen, Abfragen auf der Grundlage von Tabellenbeziehungen zu optimieren.

Indizes von Fremdschlüssel-Beschränkungen

Fremdschlüssel-Beschränkungen erstellen nicht automatisch entsprechende Indizes wie die Primärschlüssel. Sie können manuell Indizes für Fremdschlüssel-Beschränkungen erstellen; dies ist aus folgenden Gründen von Vorteil.

  • Fremdschlüsselspalten werden oft in den Verknüpfungskriterien verwendet, wenn Daten aus verwandten Tabellen in Abfragen kombiniert werden, indem die mit der Einschränkung verbundenen Spalten abgeglichen werden. Indizes helfen der Datenbank bei der Suche nach zugehörigen Daten in einer Fremdtabelle.
  • Wenn Sie Primärschlüsselbeschränkungen ändern, werden diese mit den Fremdschlüsselbeschränkungen in Bezugstabellen abgeglichen.

Es ist nicht zwingend erforderlich, Indizes zu erstellen. Sie können immer noch Daten aus zwei Tabellen kombinieren, ohne die Primär- und Fremdschlüsselbeschränkungen anzugeben. Das Hinzufügen von Fremdschlüssel-Beschränkungen optimiert jedoch die Tabellen und kombiniert sie in einer Abfrage, die die Kriterien für die Verwendung der Schlüssel erfüllt. Wenn Sie Primärschlüssel-Beschränkungen ändern, werden diese mit den Fremdschlüssel-Beschränkungen in Verbindung geprüft.

Tipps zum Erstellen von Fremdschlüssel-Beschränkungen in SQL

Sie haben bereits viel Zeit auf die Spekulationen verwendet und die Frage nach dem Warum beantwortet. Konzentrieren wir uns nun auf die Taktik zur Erstellung von Fremdschlüssel-Beschränkungen und beantworten das Wie.

Ein Feld `Fremdschlüssel` in einer Tabelle bezieht sich auf den `Primärschlüssel` einer anderen Tabelle. Die Tabelle mit dem Primärschlüssel ist Ihre übergeordnete Tabelle. Und die Tabelle mit dem Fremdschlüssel wird als untergeordnete Tabelle bezeichnet. Lassen Sie uns eintauchen.

Erstellen eines Fremdschlüssels bei der Erstellung einer Tabelle

Bei der Erstellung einer Tabelle können Sie auch eine Fremdschlüssel-Beschränkung erstellen, um die referenzielle Integrität zu wahren. So gehen Sie vor:

CREATE TABLE orders (
 order_id INT PRIMARY KEY,
 customer_id INT,
 order_date DATE,
 FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

Der obige Code erstellt eine Tabelle namens 'orders' mit dem primären Integer-Schlüssel 'order_id', einem weiteren Integer 'customer_id' und dem Datum 'order_date'. In diesem Fall wird die FOREIGN KEY-Beschränkung zur Spalte 'customer_id' hinzugefügt und verweist auf die 'customer_id' in Ihrer Tabelle 'customers'.

Erstellen eines Fremdschlüssels nach der Erstellung einer Tabelle

Angenommen, Sie haben bereits eine Tabelle erstellt und möchten eine Fremdschlüssel-Beschränkung hinzufügen, dann verwenden Sie die Anweisung `ALTERTISCH` in Ihrem Code. Sehen Sie sich das folgende Codefragment an.

ALTER TABLE orders
ADD FOREIGN KEY (customer_id) REFERENCES customers(customer_id);

In diesem Fall haben Sie eine Fremdschlüssel-Beschränkung für die Spalte 'customer_id' in der Tabelle 'orders' hinzugefügt, um auf die Spalte 'customer_id' in der Tabelle 'customers' zu verweisen.

Erstellen eines Fremdschlüssels ohne Prüfung auf vorhandene Daten

Wenn Sie einer Tabelle eine Fremdschlüssel-Beschränkung hinzufügen, prüft die Datenbank automatisch, ob bereits Daten vorhanden sind, um die Konsistenz mit der Beschränkung sicherzustellen. Wenn Sie jedoch wissen, dass die Daten konsistent sind und eine Einschränkung ohne Konsistenzprüfung hinzufügen möchten, gehen Sie wie folgt vor.

ALTER TABLE orders
ADD CONSTRAINT fk_orders_customers
FOREIGN KEY (customer_id)
REFERENCES customers(customer_id)
NOT VALIDATE;

Der Befehl NOT VALIDATE weist die Datenbank an, nicht auf vorhandene Daten zu prüfen. Dieser spezielle Fall ist in bestimmten Fällen hilfreich. Zum Beispiel, wenn Sie umfangreiche Daten haben und den Validierungsprozess abschließen möchten.

Erstellen eines Fremdschlüssels über DELETE/UPDATE

Bei der Erstellung von Fremdschlüssel-Beschränkungen können Sie die Aktion für den Fall festlegen, dass die referenzierte Zeile aktualisiert oder gelöscht wird. In diesem Fall verwenden Sie kaskadierende referentielle Integritätsbeschränkungen, um die zu ergreifenden Maßnahmen festzulegen. Dazu gehören:

#1. KEINE AKTION

Wie bei vielen anderen Datenbanken auch, ist die Regel 'NO ACTION' das Standardverhalten, wenn Sie eine Fremdschlüssel-Beschränkung erstellen. Das bedeutet, dass keine Aktion ausgeführt wird, wenn die referenzierte Zeile gelöscht oder aktualisiert wird.

Die Datenbank-Engine gibt einen Fehler aus, wenn die Fremdschlüssel-Beschränkung verletzt wird. Dies ist jedoch nicht empfehlenswert, da dies zu Problemen mit der referentiellen Integrität führen kann, da die Fremdschlüssel-Beschränkung erzwungen werden muss. Hier ist ein Beispiel dafür, wie Sie es tun können:

ALTER TABLE orders
ADD CONSTRAINT fk_orders_customers
FOREIGN KEY (customer_id)
REFERENCES customers(customer_id)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

#2. CASCADE

Die 'CASCADE'-Regel ist eine weitere Option für die Aktionen 'ON DELETE' und 'ON UPDATE' bei der Erstellung von Fremdschlüssel-Beschränkungen. Sie bedeutet, dass jedes Mal, wenn eine Zeile in den übergeordneten Tabellen aktualisiert oder gelöscht wird, die referenzierten Zeilen entsprechend aktualisiert oder gelöscht werden. Diese Technik ist sehr hilfreich bei der Wahrung der referenziellen Integrität. Hier ist ein Beispiel:

ALTER TABLE orders
ADD CONSTRAINT fk_orders_customers
FOREIGN KEY (customer_id)
REFERENCES customers(customer_id)
ON DELETE CASCADE
ON UPDATE CASCADE;

Sie sollten bei der Verwendung dieser Regel vorsichtig sein, da sie unerwünschte Folgen haben kann, wenn sie nicht sorgfältig verwendet wird. Sie möchten vermeiden, dass Sie versehentlich zu viele Daten löschen oder Zirkelverweise erstellen. Verwenden Sie diese Option daher nur bei Bedarf und mit Vorsicht.

Es gibt einige Regeln für die Verwendung von CASCADE:

  • Sie können CASCADE nicht angeben, wenn eine Zeitstempelspalte entweder Teil des Fremdschlüssels oder des referenzierten Schlüssels ist.
  • Wenn Ihre Tabelle einen INSTEAD OF DELETE Trigger hat, können Sie nicht ON DELETED CASCADE angeben.
  • Sie können ON UPDATE CASCADE nicht angeben, wenn Ihre Tabelle einen INSTEAD OF UPDATE Trigger hat.

#3. SET NULL

Wenn Sie eine entsprechende Zeile in der übergeordneten Tabelle löschen oder aktualisieren, werden alle Werte, aus denen der Fremdschlüssel besteht, auf Null gesetzt. Diese Einschränkungsregel verlangt, dass Fremdschlüsselspalten für die Ausführung nullbar sein müssen und kann nicht für Tabellen mit INSTEAD OF UPDATE Triggern angegeben werden. Hier ist ein Beispiel dafür, wie Sie es machen können.

ALTER TABLE orders
ADD CONSTRAINT fk_orders_customers
FOREIGN KEY (customer_id)
REFERENCES customers(customer_id)
ON DELETE SET NULL
ON UPDATE SET NULL

In diesem Fall haben Sie die Fremdschlüsselspalte 'customer_id' in der Tabelle "orders" auf null gesetzt, wenn die entsprechende Zeile in der Tabelle "customers" gelöscht oder aktualisiert wird.

#4. EINSTELLUNG DEFAULT

Hier setzen Sie alle Werte, die den Fremdschlüssel zum Standard machen, sofern die referenzierte Zeile in der übergeordneten Tabelle aktualisiert oder gelöscht wird.

Diese Einschränkung wird ausgeführt, wenn alle Fremdschlüsselspalten Standarddefinitionen haben. Wenn eine Spalte nullbar ist, wird ihr Standardwert auf NULL gesetzt. Beachten Sie, dass diese Option nicht für Tabellen mit INSTEAD OF UPDATE Triggern angegeben werden kann. Hier ist ein Beispiel:

ALTER TABLE orders
ADD CONSTRAINT fk_orders_customers
FOREIGN KEY (customer_id)
REFERENCES customers(customer_id)
ON DELETE SET DEFAULT
ON UPDATE SET DEFAULT;

In dem obigen Fall haben Sie die 'customer_id' in der Tabelle "orders" auf ihren Standardwert gesetzt, was geschieht, wenn die entsprechende Zeile in der Tabelle "customers" gelöscht oder aktualisiert wird.

Letzte Worte

In diesem Leitfaden haben Sie eine Auffrischung der Primärschlüssel-Beschränkungen erhalten und sich mit den Fremdschlüssel-Beschränkungen beschäftigt. Sie haben auch mehrere Techniken zur Erstellung von Fremdschlüssel-Beschränkungen kennengelernt. Und obwohl es viele Möglichkeiten gibt, Fremdschlüssel-Beschränkungen zu erstellen, haben wir in diesem Beitrag die Methoden aufgeschlüsselt.

Und in der Hoffnung, dass Sie neue Techniken kennengelernt haben, sind Sie darauf nicht beschränkt, diese zu kombinieren. Zum Beispiel können die Methoden CASCADE, SET NULL, SET DEFAULT und NO ACTION bei Tabellen mit referenziellen Beziehungen kombiniert werden.

Wenn Ihre Tabelle auf NO ACTION stößt, kehrt sie zu anderen Beschränkungsregeln zurück. In anderen Fällen kann eine DELETE-Aktion eine Kombination dieser Regeln auslösen, und die NO ACTION-Regel wird als letzte ausgeführt.

Als nächstes sehen Sie sich den SQL-Spickzettel an.

  • Johannes Walter
    Autor
    John Walter ist ein Elektro- und Elektronikingenieur mit einer großen Leidenschaft für Softwareentwicklung und Blockchain-Technologie. Er liebt es, neue Technologien zu erlernen und die Online-Community darüber aufzuklären. Er ist außerdem ein klassischer Organist.
Dank an unsere Sponsoren
Weitere gute Lektüre auf Database
Energie für Ihr Unternehmen
Einige der Tools und Dienste, die Ihr Unternehmen beim Wachstum unterstützen.
  • Invicti nutzt das Proof-Based Scanning™, um die identifizierten Schwachstellen automatisch zu überprüfen und innerhalb weniger Stunden verwertbare Ergebnisse zu erzielen.
    Versuchen Sie Invicti
  • Web Scraping, Residential Proxy, Proxy Manager, Web Unlocker, Search Engine Crawler und alles, was Sie zum Sammeln von Webdaten benötigen.
    Versuchen Sie Brightdata
  • Monday.com ist ein All-in-One-Betriebssystem, mit dem Sie Projekte, Aufgaben, Arbeit, Vertrieb, CRM, Arbeitsabläufe und vieles mehr verwalten können.
    Versuch Montag
  • Intruder ist ein Online-Schwachstellen-Scanner, der Schwachstellen in Ihrer Infrastruktur aufspürt, um kostspielige Datenschutzverletzungen zu vermeiden.
    Versuchen Sie Intruder