Relaties tussen tabellen

In het semantisch gegevensmodel (SGM) komen infologische relaties tussen primaire entiteittypen voor. Zo kan er een infologische relatie bestaan tussen de entiteittypen medewerker en afdeling, die tot uitdrukking komt in het beweringtype:

medewerker werkt op afdeling.

In het operationeel gegevensmodel bij dit model kun je tabellen aantreffen voor de entiteittypen medewerker en afdeling. Deze zouden er, aangevuld met enkele gegevens, als volgt uit kunnen zien.

 
MEDEWERKER
Medewerker-
nummer
Naam Voornaam
24680 De Groot Karel
46802 Van Dam Joost
68024 Geestman Marlieke
23457 De Boer Klaas
54367 Dorman Brigitte
58638 Grootenboer Johan
22116 Dorst Geert
 
AFDELING
Afdeling-
code
Afdeling Ingangsdatum geldigheid Einddatum geldigheid
BA Bedrijfsadministratie 01-10-1978
P1 Productie-1 01-10-1978
P2 Productie-2 01-10-1978
P3 Productie-3 01-05-1991
PB Postbehandeling 01-10-1978 15-03-1995
PZ Staf Personeelszaken 01-12-1993
SC Secretariaat 01-01-1982

De vraag is nu, hoe de bedoelde relatie tussen de twee entiteittypen in dit tabellenmodel tot uitdrukking gebracht kan worden. Een directe manier is door de primaire sleutel (afdelingscode) uit de tabel afdeling als extra attribuuttype in de tabel medewerker op te nemen. Het tabellenmodel ziet er dan als volgt uit.

 
MEDEWERKER
Medewerker-
nummer
Naam Voornaam Afdeling
24680 De Groot Karel BA
46802 Van Dam Joost P1
68024 Geestman Marlieke P2
23457 De Boer Klaas PZ
54367 Dorman Brigitte SC
58638 Grootenboer Johan P2
22116 Dorst Geert P1
 
AFDELING
Afdeling-
code
Afdeling Ingangsdatum geldigheid Einddatum geldigheid
BA Bedrijfsadministratie 01-10-1978  
P1 Productie-1 01-10-1978  
P2 Productie-2 01-10-1978  
P3 Productie-3 01-05-1991  
PB Postbehandeling 01-10-1978 15-03-1995
PZ Staf Personeelszaken 01-12-1993  
SC Secretariaat 01-01-1982  

Er bestaat dus een relatie tussen tabel A (Afdeling) en tabel B (Medewerker), indien tabel B attribuuttypen heeft die de primaire sleutel vormen van tabel A.

Dit verwijzende attribuuttype wordt een externe sleutel of ook wel vreemde sleutel genoemd. De afdelingscode in de tabel Medewerker is een externe sleutel, omdat deze attributen elk precies één rij uit een andere tabel (namelijk Afdeling) aanwijzen.

In het SGM gaan we bewust om met de relaties. D.w.z. we specificeren daar bijvoorbeeld dat er een infologische relatie bestaat tussen medewerker en afdeling, hetgeen tot uitdrukking komt in een gegevenstype ‘medewerker werkt op afdeling’. Het relatiebegrip gaat echter verder. We zeggen dan ook dat er een relatie bestaat tussen tabel A en tabel B, als beide tabellen attribuuttypen bevatten, die op hetzelfde domein zijn gespecificeerd. Het verschil met het hiervoor genoemde enge begrip is, dat die attribuuttypen geen primaire of externe sleutels behoeven te zijn.

pijl_aandacht.gif (955 bytes)Alleen de relaties in de enge zin moeten voldoen aan de eis van referentiële integriteit.

In het proces-gegevensmodel zijn de cardinaliteiten benoemd, zowel cijfermatig in de diagrammen (0, 1, n, ...), als in de vorm van teksthaken en accolades in de beweringtypen. Ook hiervan vinden we de effecten in het logische gegevensmodel. Zo kan in het SGM het volgende beweringtype zijn gespecificeerd:

beweringstype een op meer

Uit bovenstaand model vloeien de volgende cardinaliteiten voort:

  1. iedere medewerker werkt op een afdeling;

  2. een medewerker kan op ten hoogste één afdeling werken;

  3. op een afdeling behoeven geen medewerkers te werken;

  4. op een afdeling kan meer dan één medewerker werken.

Kijken we naar het tabellenmodel, dan vinden we daarin van deze cardinaliteiten het volgende terug:

  1. In de tabel MEDEWERKER is voor iedere rij het attribuuttype afdelingscode gevuld;

  2. Inherent aan de structuur van het tabellenmodel is, dat een medewerker bij ten hoogste één afdeling kan werken (per rij kun je namelijk slechts één afdelingscode registreren).

  3. Er zijn rijen in de tabel AFDELING waarvan de primaire sleutel niet als externe sleutel in de kolom afdelingscode van de tabel MEDEWERKER voorkomt.

  4. In de kolom afdelingscode van de tabel MEDEWERKER komt meermalen dezelfde waarde voor (bij verschillende medewerkers).

In het proces-gegevensmodel kunnen ook zgn. meer op meer relaties zijn gespecificeerd, zoals in onderstaand voorbeeld:

beweringstype meer op meer

Uit dit voorbeeld blijkt, dat een medewerker op meer afdelingen kan werken, en dat op een afdeling meer medewerkers kunnen werken. We zeggen dan, dat tussen medewerker en afdeling een n:m-relatie bestaat. In het tabellenmodel moeten deze worden opgelost, iets waarvoor de volgende truc is uitgevonden:

MEDEWERKER
Medewerker-
nummer
Naam Voornaam
24680 De Groot Karel
46802 Van Dam Joost
68024 Geestman Marlieke
23457 De Boer Klaas
54367 Dorman Brigitte
58638 Grootenboer Johan
22116 Dorst Geert
AFDELING
Afdeling-
code
Afdeling Ingangsdatum geldigheid Einddatum geldigheid
BA Bedrijfsadministratie 01-10-1978  
P1 Productie-1 01-10-1978  
P2 Productie-2 01-10-1978  
P3 Productie-3 01-05-1991  
PB Postbehandeling 01-10-1978 15-03-1995
PZ Staf Personeelszaken 01-12-1993  
SC Secretariaat 01-01-1982  

relatietabel:

MEDEWERKER_IN_AFDELING
Medewerker-nummer Afdeling-code
24680 BA
24680 P1
68024 P1

Aan het model is een tabel toegevoegd, die uitsluitend is bedoeld om de relatie tussen medewerker en afdeling te kunnen representeren (relatietabel). Daarin is bijvoorbeeld geregistreerd dat de medewerker met nummer 24680 (waarvan we in de medewerkertabel kunnen zien dat daarmee Karel de Groot wordt bedoeld) werkt op zowel de afdeling BA als de afdeling P1. Daarnaast kunnen we zien, dat op afdeling P1 tevens de medewerker met nummer 68024 werkt.

De relatietabel kan nog andere in het SGM gespecificeerde attribuuttypen over die relatie bevatten zoals de ingangs- en einddatum van de relatie en het percentage van de tijd waarin de medewerker op de betreffende afdeling werkt.

pijl_aandacht.gif (955 bytes)De relatietabel is een voorbeeld van een tabel, die niet als primair entiteittype in het proces-gegevensmodel is gespecificeerd.

 

Lees verder: Integriteit van tabellen