Hoofdstuk 10. Relationele databases; gegevens invoeren

  10.1 Sleutels en verwijzingen

Elke tabel in een database heeft een kolom, of een combinatie van kolommen, die uniek is. Daarmee wordt bedoeld dat elk woord of getal in die kolom (of de combinatie van de woorden en/of getallen in die kolommen) maar één keer voorkomt.
Die kolom, of combinatie van kolommen, noemen we de (primaire) sleutel van de tabel, in het engels primary key.
Voor een primaire steutel geldt: Bij de tabellen van de database tennisvereniging, die in het vorige hoofdstuk beschreven is, heb je ook primaire sleutels.

leden
lidnrnaamwoonplaatsgeborenleeftijdlidsoortscore
1AnnieBuitenpost1944-06-0262senior2075
2WillemVeenklooster1992-09-1314jeugdlid987
3HillegienKollum1968-01-1138senior1598
4MargreetKollum1980-09-1826aktielid234
5ElineBuitenpost1996-11-0410jeugdlid435
6GerritTwijzel1958-05-0448senior5989
7FemkeAugustinusga1993-09-1913jeugdlid798
8DonaBurum2000-05-156mkmt155
9ChrisBurum1998-12-127mkmt236
10DieuwkeBuitenpost1959-09-0647senior7345
11KeesVeenklooster1965-07-2741senior6345
12LeonAugustinusga1980-06-0626aktielid380
13SabineDrogeham1970-11-1036senior4999
14FemkeDrogeham1979-07-0627senior3768

Bij de tabel leden hierboven is het sleutelveld de kolom lidnr. Als je het lidnr weet dan weet je precies welk lid er bedoeld wordt.
Als je de naam als sleutelveld kiest dan heb je een probleem als er twee tennisleden met dezelfde naam zijn.
Wel zou je de naam + de geboortedatum als sleutel kunnen kiezen, want twee leden met dezelfde naam en ook nog dezelfde geboortedatum zullen niet voorkomen. Als er verschillende mogelijkheden zijn om een sleutel te kiezen dan noem je dat kandidaat-sleutels. Meestal kies je als primaire sleutel de eenvoudigste kandidaat-sleutel; het liefst één kolom, en vaak wordt er daarom een extra kolom toegevoegd met een nummer, die dan als sleutelveld dienstdoet.

De tabellen van de database tennisvereniging staan niet los van elkaar, er bestaat een bepaald verband tussen, ze hebben een relatie.

competitiesoort
soortspeeldagaanvoerder
HDdonderdag11
HEzaterdag6
DDdinsdag3
JDwoensdag2
GDzaterdag 

In de tabel competitiesoort hierboven staat in de eerste rij in de kolom soort HD, dat staat voor "heren dubbel". Verder zie je in de laatste kolom dat de aanvoerder nummer 11 is.
Als je wilt weten wie daarmee bedoeld wordt moet je naar de leden-tabel kijken; daar zie je dat lidnummer 11 Kees uit Veenklooster is.
Zo'n verband tussen de gegevens in de ene tabel en die in een andere tabel noem je een verwijzing of referentie-sleutel, in het engels foreign key.

Verwijzingen kunnen door een RDBMS worden gecontroleerd. Als je bij een competitiesoort als nummer van de aanvoerder een nummer invult, dat niet voorkomt bij de leden, dan kan het programma een foutmelding geven. Tenminste als in het programma is aangegeven dat die relatie er is.
Het controleren van de verwijzingen noemen we het bewaken van de referentiële integriteit.

Het strokendiagram.
Een overzicht van de tabellen, met de kolommen, sleutels en verwijzingen, wordt vaak weergegeven in een strokendiagram.
Dat is een schema waarin de tabellen als stroken verschijnen, met daarin de namen van de kolommen.


leden
lidnrnaamwoonplaatsgeborenleeftijdlidsoortscore
1AnnieBuitenpost1944-06-0262senior2075
2WillemVeenklooster1992-09-1314jeugdlid987
3HillegienKollum1968-01-1138senior1598
4MargreetKollum1980-09-1826aktielid234
5ElineBuitenpost1996-11-0410jeugdlid435
6GerritTwijzel1958-05-0448senior5989
7FemkeAugustinusga1993-09-1913jeugdlid798
8DonaBurum2000-05-156mkmt155
9ChrisBurum1998-12-127mkmt236
10DieuwkeBuitenpost1959-09-0647senior7345
11KeesVeenklooster1965-07-2741senior6345
12LeonAugustinusga1980-06-0626aktielid380
13SabineDrogeham1970-11-1036senior4999
14FemkeDrogeham1979-07-0627senior3768
competitiesoort
soortspeeldagaanvoerder
HDdonderdag11
HEzaterdag6
DDdinsdag3
JDwoensdag2
GDzaterdag 
competitielid
compnrlidnrsoort
16HD
211HD
312HD
46HE
511HE
61DD
73DD
87DD
92JD
107JD