Referenzintegrität

Referenzintegrität

Referenzielle Integrität wird in diesem Tutorial im Kontext der relationalen Datenbank erörtert. Referenzielle Integrität ist eine Dateneigenschaft, die besagt, dass alle ihre Referenzen gültig sind. Hier sind zwei Tische besorgt. Einer wird als Referenz oder übergeordnete Tabelle bezeichnet. Diese referenzierte Tabelle hat einen Primärschlüssel, der möglicherweise aus einer oder mehreren Spalten besteht. Die andere Tabelle hat einen Fremdschlüssel, dessen Werte mit denen des Primärschlüssels der referenzierten Tabelle übereinstimmen. Die andere Tabelle wird als untergeordnete Tabelle in der übergeordneten Tabelle bezeichnet.

Die Anzahl der Spalten, aus denen der Fremdschlüssel in der untergeordneten Tabelle besteht. Alle Fremdschlüsselwerte finden sich in der Spalte des Primärschlüssels. Die Werte in der Spalte Fremdschlüssel können jedoch in der untergeordneten Tabelle wiederholt werden.

Die untergeordnete Tabelle hat einen eigenen Primärschlüssel, der sich von der Spalte Fremdschlüssel unterscheidet, die sie hat. Die untergeordnete Tabelle wird auch als Referenzentabelle bezeichnet.

"Alle seine Referenzen sind gültig" bedeutet, dass ein Fremdschlüssel in der Child -Tabelle auf eine Zeile in der Referenztabelle verweist. Dieser Fremdschlüssel in der untergeordneten Tabelle und der Hauptschlüssel in der referenzierten (übergeordneten) Tabelle sind der gleiche Wert. Mehr als ein Fremdschlüssel in der Kindertabelle kann auf nur eine Zeile in der Referenztabelle hinweisen.

In diesem Artikel werden die Einschränkungen erläutert, die natürlich mit dem Fremdschlüssel der untergeordneten Tabelle und demselben Primärschlüssel der Referenzentabelle verbunden sind. Wenn die Einschränkungen respektiert werden, bilden die Daten (entsprechende Zeilen) in beiden Tabellen Integrität, ohne Fehler, was alles gleich ist; Daher der Begriff referenzielle Integrität.”

Illustration mit zwei Tabellen

Die Tischnotation der beiden Tabellen kann sein:

Umsatz (SaleId, Datesold, CustomerID, Mitarbeiter)


Und

Kunden (Customerid, Customername, Telefon, Adresse, Stadt, Region, Postalcode, Land)


CustomerID in der Verkaufstabelle ist ein ausländischer Schlüssel mit einem Armaturenbrett. CustomerID in der Kundentabelle ist ein Hauptschlüssel mit einer einzigen Unterstreichung. Der Hauptschlüssel für die Verkaufstabelle ist SaleId mit einer einzigen Unterstreichung. SaleId in der Verkaufstabelle hängt von CustomerID ab, und es hängt vom DateSold -Attribut und dem Mitarbeiterattribut (Spalte) ab.

Die Tabellen mit Daten sind wie folgt:

Verkaufstabelle

SaleId Datesold Kundennummer Mitarbeiter
1 07/06/23 1 John Jones
2 07/07/23 2 Barbara Baker
3 07/07/23 2 Peter Lewis
4 07/08/23 1 John Jones
5 07/09/23 3 Barbara Baker
6 07/10/23 1 Barbara Baker
7 07/11/23 1 Barbara Baker
8 07/12/23 1 John Jones
9 07.07.20 2 Peter Lewis

Kunden Tabelle



Für beide Tische gehen Kunden (Einzelpersonen) in einen Laden und kaufen an verschiedenen Tagen verschiedene Produkte. Die gekauften Produkte sind nicht gezeigt. Die Kundentisch hat die Adressen der Kunden in derselben Stadt. Die Verkaufstabelle enthält die Namen der Mitarbeiter, die den einzelnen Kunden bedient und andere Daten haben.

In der Verkaufstabelle ist CustomerID ein ausländischer Schlüssel. In der Kundentisch ist CustomerID ein Hauptschlüssel. Jeder ausländische Schlüssel in der Verkaufstabelle erfolgt einmal in der Kundentisch. Das heißt, jeder ausländische Schlüssel in der Verkaufstabelle verweist auf einen Primärschlüssel und bezieht sich daher auf eine bestimmte Zeile in der Kundentabelle. Die Daten (referenzielle) Integrität schlägt fehl, wenn dies nicht der Fall ist.

Nullwert und Fremdschlüssel

Ein Fremdschlüssel in der untergeordneten Tabelle muss auf eine Zeile über den Primärschlüssel der übergeordneten Tabelle verweisen. Alle Primärschlüssel der übergeordneten Tabelle sind einzigartig. Die Fremdschlüssel in der Spalte aus dem Fremdschlüssel in der untergeordneten Tabelle, die alle in der Elterntabelle enthalten sind, müssen nicht einzigartig sein. Wiederholungen von ausländischen Schlüssel sollten dort erwartet werden. Oben ist die Verkaufstabelle eine Kindertabelle, und die Kundentabelle ist eine übergeordnete Tabelle. Betrachten Sie diese beiden Tabellen als zur Datenbank eines Convenience -Shops. Die Kunden sind Einzelpersonen, die im Laden kaufen.

Stellen Sie sich vor, der Kunde mit CustomerID 2 hat Sie, den Ladenbesitzer, beleidigt. Zum Beispiel hat er versucht zu stehlen, und Sie haben ihm verboten, jemals wieder in Ihrem Geschäft zu kaufen. Dies bedeutet, dass sein Name aus Ihrer Kundenliste entfernt werden muss. Sein Einkauf im Verkaufstisch ist in der Vergangenheit, fand ohne Probleme statt, und so muss auch bleiben.

In diesem Fall muss der gesamte CustomerID von 2 in der Verkaufstabelle durch NULL (nichts) ersetzt werden, was bedeutet, dass kein Verweis auf die gelöschte Zeile der Kunden ist, die gelöscht wurde. Für die oben genannte Kundenstab.

Es gibt zwei Möglichkeiten, die Zeile in der Kundentabelle am Computer (Datenbankverwaltungssystem) wie folgt anzuzeigen:

    1. Tatsächlich löschen die Zeile und die verbleibenden CustomerIDs sind 1 und 3, wodurch der automatisch inkrementierte Wert von 2 und seine Zeile fehlt
    2. Tatsächlich löschen Sie die Zeile und den Umbau des Restes der Zeilen darunter von 2, automatisch inkrementiert, und in der Kundentabelle fehlen keine 2. In diesem Fall sind alle ausländischen Schlüssel aus 3 in der Verkaufstabelle umbenannt, automatisch inkrementiert ab 2 und es fehlt keine 2 in der Verkaufstabelle.


Unabhängig davon, wie er ausgewählt wird, bleibt der Nullwert in der Verkaufstabelle als fremde Schlüssel für die entsprechenden gelöschten Kundenzeilen. Die Null -Wertreferenzen (verweist auf) keine Zeile in der Kundentabelle.

Aus solchen Gründen kann ein Fremdschlüssel also einen Nullwert haben. Das ist mit referenzieller Integrität zu tun!

Aktualisieren der Kinder- und Elterntabellen

Aktualisieren bedeutet Änderungen. Das Ändern einer Zelle in der Kindertabelle (Verkauf) (sogar im SaleId), mit Ausnahme des fremden Schlüssel. Wenn beispielsweise das Datum versehentlich fälschlicherweise eingegeben wurde, sollte das richtige Datum eingegeben werden.

Das Ändern einer Zelle in der übergeordneten (Kunden) Tabelle, mit Ausnahme des Hauptschlüssels. Wenn der Kunde beispielsweise seine Straße geändert hat, sich aber noch in der Nachbarschaft befindet, verursacht die Änderung seiner Adresse in der Kundentisch keinen Schaden für die Korrespondenzen für Kinder und Elterntabellen.

Wenn Sie jedoch den Wert des Fremdschlüssels in der Kindertabelle ändern auch auf denselben Wert. Dies ist Kaskadierung.

Kann ein Null -Wert -Fremdschlüssel geändert werden? - Nun, ja: Wenn der oben genannte Kunde nach sechs Monaten zurückkommt und sich entschuldigt, und Sie, der Inhaber, vergeben ihm und wenn nur seine Zeilen in der Verkaufstabelle Nullwerte hätten, dann werden sein Name und seine Anmeldeinformationen in die eingegeben Kundentisch unten mit einer neuen CustomerID; und alle Nullwerte als ausländische Schlüssel in der Kindertabelle (Verkauf) werden durch diese neue CustomerID ersetzt. Wenn es jedoch andere Zeilen in der Kindertabelle mit Nullwerten gab, die ihm nicht gehörten, bleiben alle Nullwerte, einschließlich seiner,, bleiben; Und alle seine neuen Verkäufe werden am Ende des Verkaufstabelle am Ende des Verkaufstisches eingetragen.

Löschen der Kinder- und Elterntische

Es ist nicht sinnvoll, einen Spaltenzellwert in der untergeordneten oder übergeordneten Tabelle zu löschen, es sei denn, sie ist für eine Spalte gilt, deren Zellwert leer sein kann. Leer bedeutet nicht null. Leer bedeutet Leer.

Eine ganze Zeile in der Kindertabelle oder in der übergeordneten Tabelle kann jedoch gelöscht werden. Angenommen, es gibt einige gefälschte Reihen im Kindertisch (Verkauf); Wenn diese Zeilen gelöscht werden (einschließlich ihrer Salesids und ausländischen Schlüssel), wird es kein Problem geben. Die Kunden haben entweder andere echte Zeilen im Kindertisch oder haben ihre Bereitschaft, im Laden zu kaufen, einfach nicht gezeigt und haben noch nie etwas gekauft. - Sie werden eines Tages in naher Zukunft kaufen.

Wenn andererseits ein gefälschter Kunde mit gefälschten Verkäufen vorliegt, wenn seine Reihe in der Kundentisch gelöscht wird, müssen alle seine gefälschten Verkaufsreihen im Verkaufstisch gelöscht werden. Dies ist Kaskadierung. Dies kann passieren, wenn ein Mitarbeiter echte Verkäufe ausübt, falsche Informationen aufzeichnet und als ein weiterer Mitarbeiter in derselben Tabelle unterzeichnet wird. Da die entsprechenden Fremdschlüssel in der untergeordneten Tabelle der Primärschlüssel in der übergeordneten Tabelle entsprechen, verbindet dieselbe Wert die beiden Tabellen.

Um dieses Problem zu lösen, sollte jeder Mitarbeiter sein eigenes Vertriebsübungsbuch haben, wenn der Computer nicht verwendet wird. Wenn der Computer verwendet wird, sollte jeder Mitarbeiter über einen Anmeldemittel und ein Passwort für die Anwendung des Datenbankverwaltungssystems verfügen, wodurch der Name des Mitarbeiters automatisch gegen alle seine Aktionen aufgezeichnet wird.

Zitate

Die folgenden drei Absätze sind Zitate aus Wikipedia:

„Referenzielle Integrität ist eine Eigenschaft von Daten, die besagt, dass alle ihre Referenzen gültig sind.

Im Kontext relationaler Datenbanken muss ein Wert eines Werts eines Attributs (Spalte) einer Beziehung (Tabelle) auf einen Wert eines anderen Attributs (entweder in derselben oder in einer anderen Beziehung) verweist, dann muss der referenzierte Wert existieren.

Referenzielle Integrität ist ein Datenbankkonzept, das sicherstellt, dass die Beziehungen zwischen Tabellen konsistent bleiben. Wenn eine Tabelle einen Fremdschlüssel für eine andere Tabelle enthält.”

Referenzaktionen

Ohne den Computer ist es schwierig, die Referenzintegrität durchzusetzen. Dies führt zu Buchhaltungsfehlern. Mit dem Computer kann die Referenzintegrität durch Durchsetzung von Kaskaden und anderen Aktionen durch Programmierung des Datenbankverwaltungssystems durchgesetzt werden.

KASKADE

Dies bedeutet: Aktualisierung oder Löschen von Kaskadieren.

BESCHRÄNKEN

Dies bedeutet: Aktualisieren oder löschen Sie die verbundenen Zeilen in der Child- und übergeordneten Tabelle nicht oder löschen Sie sie nicht.

KEINE AKTION

Beschränken Sie die Überprüfung der Verbindungen der Zeilen in beiden Tabellen, bevor Sie versuchen, zu aktualisieren oder zu löschen. Keine Aktion ist dem Einschränkung ähnlich, versucht jedoch zu aktualisieren oder zu löschen, bevor die Verbindungen in beiden Tabellen überprüft werden.

Einschränkung wird eine Fehlermeldung ausstellen, die ein Versuch, eine Zeile zu aktualisieren oder zu löschen. Keine Aktion würde die Zeile aktualisieren oder löschen und dann eine Fehlermeldung ausstellen, dass die Zeile aktualisiert oder gelöscht wurde, obwohl in der anderen Tabelle eine entsprechende Zeile vorhanden ist. Dies würde natürlich zu einer falschen Buchhaltung führen, es sei denn.

Wenn in der anderen Tabelle keine entsprechende Zeile vorhanden ist, aktualisieren oder löschen Sie die Zeile, unabhängig davon, ob die Durchsetzung eingeschränkt wurde oder keine Aktion.

Null setzen

Wenn diese Aktion durchgesetzt wird, würden alle fremden Schlüssel der entsprechenden Zeilen in der untergeordneten Tabelle auf Null gesetzt, wenn eine Zeile in der übergeordneten Tabelle gelöscht wird.

Setzen Sie Standard

Wenn diese Aktion durchgesetzt wird, würden alle fremden Schlüssel der entsprechenden Zeilen in der untergeordneten Tabelle auf den vom Datenbankbenutzer ausgewählten Standardwert festgelegt, wenn eine Zeile in der übergeordneten Tabelle gelöscht wird.

Abschluss

Referenzielle Integrität ist ein Datenbankkonzept, das sicherstellt, dass die Beziehungen zwischen Tabellen konsistent bleiben. Wenn eine Tabelle einen Fremdschlüssel für eine andere Tabelle enthält.

Wenn die Tabellen in Ledgeren aufbewahrt werden, wird es schwierig, die Referenzintegrität durchzusetzen. Wenn jedoch ein DBMS die Tabellen in einem Computer aufbewahrt, werden diese Referenzaktionen von einem Programmierer erzwungen.