Grundlagen der Datenbanken
Der Primärschlüssel einer Kundentabelle (KundenID, Name) ist KundenID, und KundenID in einer Bestelltabelle (BestellID, KundenID) ist als Fremdschlüssel definiert, der auf KundenID der Kundentabelle verweist. Die Kundentabelle enthält nur die Zeilen mit KundenID 'C1' und 'C2'. Was geschieht, wenn in diesem Zustand INSERT INTO Bestellung VALUES ('O9', 'C5') ausgeführt wird?
- ADa die Bedingung der referenziellen Integrität verletzt wird, wird die Zeile nicht eingefügt, und es tritt ein Fehler auf
- BDie Zeile wird eingefügt, und in der Kundentabelle wird automatisch eine Zeile mit KundenID 'C5' ergänzt
- CDie Zeile wird eingefügt, aber ihr Wert für KundenID wird durch NULL ersetzt
Antwort und Erläuterung anzeigen
Antwort: A. Da die Bedingung der referenziellen Integrität verletzt wird, wird die Zeile nicht eingefügt, und es tritt ein Fehler auf
Ein Fremdschlüssel ist eine Spalte, die auf den Primärschlüssel (o. Ä.) einer anderen Tabelle verweist, hier der Kundentabelle, und er setzt die Bedingung der referenziellen Integrität durch: Gespeichert werden dürfen nur Werte, die in der referenzierten Tabelle existieren, oder NULL. Die Kundentabelle enthält keinen Kunden 'C5', daher weist das DBMS den Versuch zurück, eine Bestellung für einen nicht existierenden Kunden einzufügen, und es tritt ein Fehler auf. So wird verhindert, dass Bestellungen zurückbleiben, die keinem Kunden zuzuordnen sind. Umgekehrt wird auch der Versuch, eine Kundenzeile zu löschen, zu der noch Bestellungen existieren, beim Standardverhalten (NO ACTION) zurückgewiesen. Mit ON DELETE CASCADE in der Fremdschlüsseldefinition lässt sich erreichen, dass beim Löschen eines Kunden auch dessen Bestellungen kaskadierend gelöscht werden.