Basis van databases
De primaire sleutel van de tabel Klant (KlantID, Naam) is KlantID, en KlantID in de tabel Bestelling (BestelID, KlantID) is gedefinieerd als vreemde sleutel die verwijst naar KlantID in de tabel Klant. De tabel Klant bevat alleen de rijen met KlantID 'C1' en 'C2'. Wat gebeurt er als in deze toestand INSERT INTO Bestelling VALUES ('O9', 'C5') wordt uitgevoerd?
- ADe rij wordt niet toegevoegd en er treedt een fout op, omdat de beperking van referentiële integriteit wordt geschonden
- BDe rij wordt toegevoegd, en in de tabel Klant wordt automatisch ook een rij met KlantID 'C5' toegevoegd
- CDe rij wordt toegevoegd, maar de waarde van KlantID wordt door NULL vervangen
Antwoord en toelichting tonen
Antwoord: A. De rij wordt niet toegevoegd en er treedt een fout op, omdat de beperking van referentiële integriteit wordt geschonden
Een vreemde sleutel is een kolom die verwijst naar de primaire sleutel (of iets vergelijkbaars) van een andere tabel, hier de tabel Klant, en dwingt de beperking van referentiële integriteit af: alleen waarden die in de tabel waarnaar wordt verwezen bestaan, of NULL, mogen worden opgeslagen. De tabel Klant bevat geen klant 'C5', dus het DBMS weigert de poging om een bestelling voor een niet-bestaande klant toe te voegen, en er treedt een fout op. Zo wordt voorkomen dat er bestellingen achterblijven waarvan niet bekend is bij welke klant ze horen. Omgekeerd wordt ook een poging om een rij van een klant met nog openstaande bestellingen uit de tabel Klant te verwijderen bij het standaardgedrag (NO ACTION) geweigerd. Door ON DELETE CASCADE aan de definitie van de vreemde sleutel toe te voegen, worden bij het verwijderen van een klant ook diens bestellingen in cascade verwijderd.