- 1Introductie
- 2Databasegeschiedenis
- 3Voordelen en mogelijkheden van relationele databases
- 4Klantcontactsysteem
- 5Tabellen en de primaire sleutel
- 6Gegevens koppelen
- 7De één op veel relatie
- 8De veel op veel relatie
- 9De één op één relatie
- 10Database normaliseren
- 11De eerste normaalvorm (1NF)
- 12De tweede normaalvorm (2NF)
- 13De derde normaalvorm (3NF)
- 14Het definitieve database-ontwerp
- 15Nog een voorbeeld: webwinkel
- 16Conclusie
Cursus database ontwerpen
De veel op veel relatie
De veel op veel relatie is een relatie waarbij meerdere rijen uit tabel A gekoppeld kunnen zijn aan meerdere rijen uit tabel B. Een voorbeeld is een school, waarbij docenten les geven aan studenten. Elke docent geeft les aan 0, 1 of meer studenten. Andersom kan elke student les krijgen van 0, 1 of meerdere docenten. Een ander voorbeeld is de relatie tussen biermerken en leveranciers. Elke leverancier levert meerdere biermerken, maar elk biermerk kan ook door meerdere leveranciers geleverd worden. De veel op veel relatie modelleer je met drie tabellen. Twee brontabellen en één koppeltabel.
Tabel A en tabel B zijn beide tabellen met een primaire sleutel. Tabel A_B verbindt records uit tabel A en B en heet een 'koppeltabel'. Een koppeltabel bestaat uit maar twee kolommen die allebei een vreemde sleutel bevatten. De vreemde sleutel in de linkerkolom verwijst naar de primaire sleutel uit tabel A en die in de rechterkolom naar de primaire sleutel uit tabel B. De primaire sleutel in koppeltabel A_B is samengesteld uit de twee vreemde sleutels. Je ziet in het voorbeeld dan ook dat de combinatie van de twee velden uniek moet zijn in koppeltabel A_B. In het klantcontactsysteem komt (vooralsnog) geen veel op veel relatie voor, daarom staat hieronder een voorbeeld met bieren en hun leveranciers.
Tabel bier
|
Tabel bier_leverancier
|
Tabel leverancier
|
Bovenstaande tabellen koppelen bieren en leveranciers in een veel op veel relatie. Eén bier kan door 0, 1 of meerdere leveranciers geleverd worden. Gentse Tripel (157) wordt bijvoorbeeld geleverd door Horeca Import NL (157, AC001), Jansen Horeca (157, AB899) en Petersen Drankenhandel (157, AC009). Andersom levert Petersen Drankenhandel 3 bieren uit de bierentabel, te weten Gentse Tripel (157, AC009), Uilenspiegel (158, AC009) en Jupiler (163, AC009).
Merk op dat in bovenstaande tabellen de primaire sleutels in de tabelkop onderstreept is weergegeven. In modellen van relationele databases worden primaire sleutels vaak onderstreept. Zoals je ziet is de primaire sleutel van de koppeltabel 'bier_leverancier' samengesteld uit twee velden. De combinatie van deze velden moet dus uniek zijn.