Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Grundlagen der Programmierung: Datenbanken

Referenzielle Integrität

Testen Sie unsere 2021 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Beziehungen beschreiben innerhalb einer Tabelle bestimmte Regeln, wodurch Einschränkungen definiert werden, die nicht verletzt werden dürfen. Dies bezeichnet man als referenzielle Integrität.

Transkript

Warum tun wir uns diesen ganzen Aufwand an? Es ist leicht einzusehen, dass Beziehungen eine komfortable Möglichkeit sind eine Tabelle mit einer anderen zu verknüpfen. Für einen Kunden können wir dadurch alle Bestellungen ermitteln. Aber genauso wichtig, wenn nicht vielleicht sogar wichtiger, ist das Konzept, dass eine Beziehung eine Regel beschreibt. Eine Einschränkung, die ich nicht verletzen darf. In diesem Beispiel, darf ich keine CustomerID 388 in der Order-Tabelle anlegen und zwar aus dem einfachen Grund, weil es keinen Kunden mit dieser 388 als Kundennummer gibt. Ich könnte zwar sagen, dass ich den Kunden gleich hinzufügen werde, aber momentan wäre die Datenbank nicht mehr gültig. Sie wäre, so sagt man, intern nicht mehr konsistent. Dies bezeichnet man auch als referenzielle Einschränkung. Es ist eine Regel, die zwischen Tabellen angewendet wird, wobei jede Tabelle nicht nur einfach die Regel ihrer eigenen Spaltendefinitionen anwendet, sondern auch darauf achtet, dass zwischen den Tabellen alles in Ordnung bleibt. Gibt es keine "Customer-ID", sind Sie schlicht und ergreifend nicht in der Lage, diese Zeile hier einzufügen. Wenn Sie also diese Regeln definieren, ist damit oftmals auch ein Ablauf verbunden, nach dem neuer Inhalt erstellt wird. Denn wenn ich einen neuen Kunden und eine neue Bestellung für diesen Kunden habe, muss ich zuerst den Kunden hinzufügen, bevor ich die Bestellung für ihn eingeben kann. Die Regel lässt zwar einen Kunden ohne Bestellung zu, erlaubt aber umgekehrt keine Bestellung für einen nicht vorhandenen Kunden. Das Konzept, dass die Daten nicht nur innerhalb einer bestimmten Zeile oder einer bestimmten Tabelle gemäß den Regeln dieser bestimmten Tabelle gültig sind, sondern auch zwischen all ihren Tabellen gültig und sinnvoll sein müssen bezeichnet man auch als: Referenzielle Integrität Es gibt zwei Stellen, wo dies hauptsächlich Einfluss hat. Erstens beim Hinzufügen neuer Zeilen, wie eben beschrieben, wobei sichergestellt wird, dass wir keine Bestellzeile mit einer nicht vorhandenen CustomerID einfügen können. Es gilt aber auch für Aktualisierungen. Man kann dies auch nicht umgehen, indem man beispielsweise eine Zeile für den Kunden 369, der wirklich existiert, hinzufügt und dann die Kundennummer nachträglich in einen nicht vorhandenen Wert ändert. Eine derartige Operation wird ebenfalls abgelehnt. Es handelt sich hier immer noch um referenzielle Integrität. Und die Regeln dieser Beziehung, die werden von der Datenbank auch durchgesetzt. Interessanter ist, was bei referenzieller Integrität passiert, wenn man etwas löscht. Was geschieht also, wenn sich unsere Daten in beiden Tabellen in einem sinnvollen Zustand befinden. Beispielsweise ein Kunde mit der Kunden ID 367 existiert, dem zwei Bestellungen zugeordnet sind. Und was passiert jetzt, wenn ich diesen Kunden 367 lösche? In den meisten Datenbanksystemen hängt dies von verschiedenen Faktoren ab. Unter anderem von Ihnen und Ihren Regeln und davon, was Sie für einen solchen Fall persönlich vorgesehen haben. Eine Option beim Löschen in Tabellen, zwischen denen Beziehungen bestehen, ist das sogenannte kaskadierende Löschen. Wenn ich eine Zeile aus der Customer-Tabelle löschen möchte, sagt die Datenbank: "Hey, du bist der Boss" und löscht unverzüglich alle damit in Beziehung stehenden Zeilen. Wenn ich die Datenbank also anweise, den Kunden 367 zu löschen, geht sie nach unten, um alle Order-Zeilen für diesen Kunden zu löschen und löscht dann die Customer-Zeile. Haben Sie mehrere Tabellen miteinander verknüpft kann eine einzige Lösch-Operation, theoretisch viele verschiedene, verknüpfte Zeilen in anderen Tabellen löschen. Eine andere Option ist das kaskadierende Löschen mit Setzen auf NULL. Ich sage hier NULL, N-U-L-L, das ist nicht Null sondern NULL heißt kein Wert, also auch nicht Null, sondern überhaupt keine Information. Hierbei wird die Fremdschlüsselspalte auf NULL gesetzt. Manche Datenbank-Systeme bieten diese Option, obwohl sie relativ selten verwendet wird. Wenn ich in diesem Fall die CustomerID 367 lösche, durchsucht die Datenbank automatisch alle Bestellungen. Findet sie eine Bestellung für diesen Kunden setzt sie diesen Wert eben auf NULL. In einer solchen Situation muss ich also die Reihenfolge beachten. Allerdings ist die Bestellung nun losgelöst von einem bestimmten Kunden und die Bestellung existiert zwar noch, aber eben mit einer NULL-Spalte. Doch wahrscheinlicher als eine dieser simplen Ablehnung ist einfach keine Aktion. Das ist die Standard-Einstellung in den meisten Datenbank-Management-Systemen. Wenn Sie eine Beziehung zwischen diesen beiden Tabellen eingerichtet haben und dann versuchen einen Kunden, der bestehende Bestellungen laufen hat, zu löschen, dann lässt das die Datenbank schlicht und ergreifend nicht zu und verweigert einfach diese "Löschen"- Option. Beim Hinzufügen neuer Daten muss ich also zuerst den Kunden anlegen und dann die Bestellung und beim Löschen wären zuerst alle Bestellungen zu löschen, oder deren Besitz auf eine andere CustomerID zu transferieren. Erst dann wird es mir gestattet, diese Kundenzeile auch tatsächlich zu löschen.

Grundlagen der Programmierung: Datenbanken

Fangen Sie ganz von vorne an und erfahren Sie alles über die Grundlagen zu Datenbanken und deren Einsatzzwecke, um danach eigene Lösungen und Anwendungen zu entwickeln.

3 Std. 6 min (39 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!