Integritätsbedingungen
Dieses Kapitel gehört zum Leistungskurs.
Eine Integritätsbedingung ist eine Regel, die das Datenbanksystem selbst durchsetzt. Sie gilt für jeden Zugriff – egal, welches Programm ihn auslöst und ob dessen Autor daran gedacht hat.
Die vier Arten
| Bedingung | Was sie garantiert |
|---|---|
PRIMARY KEY |
Der Wert ist eindeutig und fehlt nie. Entitätsintegrität |
FOREIGN KEY … REFERENCES … |
Der Wert kommt in der Zieltabelle vor. Referenzielle Integrität |
NOT NULL |
Der Wert fehlt nie. |
UNIQUE (spalte) |
Der Wert kommt höchstens einmal vor. |
Zusammen bilden sie die Datenintegrität: die Zusicherung, dass die gespeicherten Daten in sich stimmig sind.
Ausprobieren
Die folgenden Anweisungen sollen alle scheitern. Führe sie einzeln aus.
Achte darauf, wo die Meldung erscheint. Bei der dritten Anweisung merkt schon der Editor, dass etwas nicht stimmt, und schreibt es in den Reiter Fehler – ausgeführt wird sie gar nicht erst. Die anderen drei sehen für den Editor einwandfrei aus; sie scheitern erst beim Ausführen, und die Meldung steht dann im Reiter Ausgabe.
Der Unterschied hat einen Grund: Ob ein Wert fehlt, sieht man der Anweisung an. Ob die Bühnennummer 99 existiert, kann man nur nachsehen.
Ordne jeder Meldung die verletzte Integritätsbedingung zu.
a) FOREIGN KEY constraint failed
b) UNIQUE constraint failed: buehne.buehne_id
c) Die Spalte name ist nicht nullable, daher kann null hier nicht eingefügt werden.
d) UNIQUE constraint failed: band_genre.band_id, band_genre.genre_id
Erkläre bei d), warum die Meldung zwei Spalten nennt. Und begründe, warum ausgerechnet c) schon vom Editor bemängelt wird und nicht erst beim Ausführen.
Was passiert beim Löschen?
Referenzielle Integrität wirkt in beide Richtungen. Sie verhindert nicht nur ungültige Verweise beim Einfügen, sondern auch beim Löschen des Verweisziels.
a) Führe die Anweisung aus. Warum scheitert sie?
b) Beschreibe zwei Wege, die Hauptbühne trotzdem loszuwerden. Welcher ist der richtige?
c) Was wäre die Alternative, wenn die Datenbank nicht über referenzielle Integrität wachen würde?
Tipp zu b)
Der eine Weg räumt vorher auf, der andere schaltet die Regel ab.
Was Integritätsbedingungen nicht leisten
a) Führe die Anweisungen aus. Wird die Band gespeichert?
b) Was ist an dem Datensatz offensichtlich falsch?
c) Welche Integritätsbedingung hätte das verhindert – und warum ist sie im Lernpfad nicht verfügbar?
d) Wer muss den Unsinn dann abfangen?