Wat is Vreemde sleutel (foreign key)?

Kolom die verwijst naar de primaire sleutel (of een unieke kolom) van een andere tabel. Via de beperking van referentiële integriteit, die alleen waarden toestaat die in de tabel waarnaar wordt verwezen bestaan, of NULL, voorkomt ze gegevens die naar niet-bestaande rijen wijzen. Ook het gedrag bij het verwijderen of wijzigen van een rij waarnaar wordt verwezen (weigeren, verwijderen in cascade enzovoort) kan worden opgegeven.

Japanse benaming: 外部キー

“Vreemde sleutel (foreign key)” komt voor in 5 oefenvragen uit 1 onderwerpen, bijv. Basis van databases.

Vakgebied: Basis van databases

Nu oefenen: vragen over Vreemde sleutel (foreign key)

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?

  1. ADe rij wordt niet toegevoegd en er treedt een fout op, omdat de beperking van referentiële integriteit wordt geschonden
  2. BDe rij wordt toegevoegd, en in de tabel Klant wordt automatisch ook een rij met KlantID 'C5' toegevoegd
  3. 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.

“Vreemde sleutel (foreign key)” in de toelichting

Vragen met “Vreemde sleutel (foreign key)” (5)

  1. 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?
  2. De tabel Inschrijving (StudentNr, VakNr, Cijfer) legt vast welke student welk vak heeft gevolgd en met welk cijfer. Eén student volgt meerdere vakken, en één vak wordt door meerdere studenten gevolgd. Als dezelfde student zich nooit twee keer voor hetzelfde vak inschrijft, wat is dan een geschikte primaire sleutel voor deze tabel?
  3. De primaire sleutel van de tabel Medewerker (MedewerkerNr, Naam, Afdelingscode, Afdelingsnaam) is MedewerkerNr, en elke kolom bevat één waarde. De functionele afhankelijkheden zijn MedewerkerNr → Naam, MedewerkerNr → Afdelingscode en Afdelingscode → Afdelingsnaam. Welke uitspraak over de normaalvorm van deze tabel is juist?
  4. In een ER-diagram bestaat tussen studenten en vakken een veel-op-veelrelatie: één student volgt meerdere vakken, en één vak wordt door meerdere studenten gevolgd. Wat is een geschikte manier om deze relatie met tabellen in een relationele database te realiseren?
  5. Welke van de ACID-eigenschappen die een transactie moet hebben, is de eigenschap dat een overboeking die rekening A debiteert en rekening B crediteert ofwel volledig ofwel helemaal niet wordt uitgevoerd, ook als er halverwege een storing optreedt?

Verwante termen

Primaire sleutel SQL Derde normaalvorm (3NF) ER-diagram (entity-relationshipdiagram) Relationele database ACID-eigenschappen Transactie Index (databaseindex) Isolatieniveau Normalisatie

Naar de woordenlijst