Vreemde sleutels
Last updated
Was this helpful?
Last updated
Was this helpful?
In heb je gezien dat er verschillende redenen zijn om rijen uniek te identificeren. Dit is alleen zinvol als we de primaire sleutelattributen ook ergens anders vermelden. Met andere woorden, als we in kolom A van tabel B een primaire sleutel plaatsen, is het logisch dat we in kolom C van tabel D over deze sleutel spreken.
We hebben dat ook gedaan in het tweede voorbeeld op (het voorbeeld met games), door een tabel te maken die de dubbele voorkomens van lange stukken tekst vervangt door hun identificatienummers.
Wanneer we in één record via een bepaalde kolom verwijzen naar (de sleutel van) een ander record, spreken we over een vreemde sleutel of foreign key. Hij is "vreemd" omdat hij verwijst naar een ander record, mogelijk (maar niet noodzakelijk) in een andere tabel.
Als de primary key van een tabel waar je naar verwijst een INT
is, definieer je een kolom met een foreign key ook als INT
. Na de oplijsting van de kolommen voeg je dan een constraint toe. Hierbij spelen drie zaken mee:
de naam van de constraint
de kolom die moet dienen als foreign key
de kolom die dienst doet als primary key in de tabel waarnaar verwezen wordt
Dat ziet er bijvoorbeeld zo uit, als je een tabel met boeken koppelt aan hun auteur (veronderstel even dat een boek één auteur heeft):
Deze hoef je niet uit te voeren.
Dit wil zeggen: "maak een tabel voor boeken met een uniek identificatienummer (de primary key); boeken kunnen ook verwijzen naar specifieke records in de tabel die personen voorstelt; deze verwijzingen worden voorgesteld met de kolom Personen_Id
in de tabel voor boeken"
Hierbij gebruiken we enkele afspraken:
De naam van de kolom die dienst doet als foreign key is de naam van de tabel waarnaar verwezen wordt, gevolgd door _Id
.
De naam van een foreign key constraint is altijd fk_
, gevolgd door de naam van de tabel waarop de constraint toegepast is, gevolgd door de naam van de tabel waarnaar verwezen wordt.
Prent het heel goed in: een kolom met als naam Id dient om een rij uit de tabel te identificeren waartoe de kolom behoort. Een kolom met als naam (Tabelnaam)_Id (waarbij de tabelnaam vanalles kan zijn) dient om een rij uit een andere tabel te identificeren, die hoort bij een rij uit deze tabel. Je zou nooit mogen twijfelen over hoe je een sleutelkolom moet noemen. Dit is een afspraak die wij steeds zullen volgen.
Als je al een tabel hebt en deze wil uitbreiden met een foreign key, doe je dat via de DDL ALTER
-instructie. Als je bijvoorbeeld al een tabel voor boeken had zoals hierboven, maar zonder de kolom Personen_Id
, zou je dit schrijven:
Sla op als 0051__AlterBoeken.sql en voer uit.