Tabellen koppelen
De student moet meerdere tabellen op de gepaste wijze aan elkaar kunnen
koppelen waardoor een relationele database wordt gecreëerd.
In de inleiding van DEEL 4 werd reeds uitgelegd dat Microsoft Access een relationele databasemanager is, die toelaat om meerdere tabellen aan elkaar te
koppelen. Het maken van dergelijke koppeling - ook wel het 'leggen van relaties
tussen tabellen' genoemd - is voordelig omdat dan één en hetzelfde gegeven
nooit meermaals in verschillende tabellen van dezelfde database moet worden ingevoerd en dus nadien ook niet meermaals
moet worden
gewijzigd of gewist.
Onderstel dat we in de Personeelsdatabase op je USB-stick, harde schijf of Homedrive voor elke werknemer
willen invoeren of en hoeveel verschillende computeropleidingen hij/zij gevolgd
heeft sedert de indiensttreding.
In dat geval lijkt het aangewezen om een nieuwe tabel aan de database toe te
voegen, waarin van elke gevolgde computeropleiding wordt bijgehouden: wie ze
gevolgd heeft, hoe de opleiding genoemd wordt, wanneer ze gevolgd werd, hoe lang ze duurde en
hoeveel ze gekost heeft.
Deze nieuwe tabel kunnen we dan koppelen aan de tabel 'Werknemers Adressen' zodat de 'persoonsgegevens' (naam, voornaam, adres,...) die we eerder in de tabel 'Werknemers Adressen' hebben ingevoerd eveneens beschikbaar zijn.
Door een relatie te leggen tussen de tabel 'Werknemers Adressen' en de nieuwe tabel 'Computercursussen' wordt voorkomen dat in deze laatste tabel opnieuw de naam, voornaam,... van elke werknemer moet worden ingevoerd.
- Open je Personeelsdatabase op je memory stick of Homedrive
- Maak een nieuwe tabel 'Computercursussen'
aan:
- Klik op het tabblad 'Maken'
- Klik in de groep 'Tabellen' op de knop 'Tabelontwerp'
- Voer in het Ontwerpvenster van de nieuwe tabel volgende veldnamen in:
- CursusId met als gegevenstype 'Autonummering',
geïndexeerd
zonder duplicaten. Dit veld bevat een volgnummer voor elke
ingevoerde cursus en zal als Primaire
Sleutel worden gebruikt voor deze nieuwe tabel.
- WerknemersId, gegevenstype 'Numeriek', 'Lange Integer',
geïndexeerd duplicaten OK. Dit veld zal het WerknemersID uit de
tabel 'Werknemers Adressen' overnemen en geldt als sleutelveld
voor de koppeling aan het gelijknamige veld in de tabel 'Werknemers
Adressen'. Vermits een werknemer meerdere computercursussen kan volgen
werd voor de indexering de optie 'Duplicaten OK' gekozen.
- Cursusnaam, gegevenstype 'Korte tekst', lengte 75, vereist
- Startdatum, gegevenstype 'Datum', vereist
- Aantal uur, gegevenstype 'Numeriek', 'Geheel getal' vereist
- Kostprijs, gegevenstype 'Valuta', 0 decimalen, vereist
- Bewaar de nieuwe tabel onder de naam 'Computercursussen' en sluit de tabel door op het sluiticoon te klikken.
Wanneer je efficiënt wil omspringen met twee tabellen waartussen een relatie
bestaat, dan moet je een zogenaamde 'standaardrelatie' definiëren.
De voorwaarde voor een standaardrelatie is dat beide aan elkaar gekoppelde
tabellen een 'gemeenschappelijk' veld hebben (of nog: een 'sleutelveld'), dat overigens niet noodzakelijk dezelfde
veldnaam moet hebben, hoewel dit het werk natuurlijk wel wat eenvoudiger
maakt....
Daarenboven moet het sleutelveld in de twee te koppelen tabellen van hetzelfde gegevenstype zijn: allebei numeriek of alfanumeriek, of een combinatie van beide.
Vaak is dit gemeenschappelijke veld in één van de tabellen de primaire
sleutel. In ons voorbeeld kan het volgnummer van de werknemer (het
werknemersidentificatienummer 'WerknemersId') als gemeenschappelijk veld tussen
de tabellen 'Werknemers Adressen' en 'Computercursussen' gebruikt worden.
- De standaardrelatie wordt vastgelegd in het venster 'Relaties' dat
wordt geopend wanneer je de opdrachtknop 'Relaties'
van de groep 'Relaties' van het tabblad 'Hulpmiddelen voor databases' aanklikt.
- Wanneer nog niet eerder relaties tussen tabellen werden vastgelegd,
verschijnt meteen ook het dialoogvenster 'Tabel weergeven', waarin kan
worden opgegeven tussen welke tabellen of query's een relatie moet worden gelegd.
Noot: Zorg ervoor dat alle tabellen waartussen je relaties wil leggen gesloten zijn, alvorens onderstaande procedure te volgen, zo niet verschijnt straks een foutmelding!
- Selecteer thans beide tabellen in het dialoogvenster:
- klik op de naam van de eerste tabel om deze te selecteren
- klik vervolgens op
knop 'Toevoegen'
- doe dit ook voor de tabel 'Werknemers Adressen'
- klik op de knop 'Sluiten' wanneer beide tabellen werden toegevoegd aan het
venster 'Relaties'
- Voor elke toegevoegde tabel wordt een lijst met veldnamen in het
dialoogvenster 'Relaties' ingevoegd. Deze lijst kan je verplaatsen,
groter of kleiner maken of verwijderen.
- Een standaardrelatie wordt tot stand gebracht wanneer een veld uit de ene
lijst naar het sleutelveld in de andere lijst wordt
gesleept.
In dit voorbeeld moet je dus het veld 'WerknemersIdentificatie' uit de lijst
'Werknemers Adressen' met de linkermuisknop ingedrukt naar het
veld 'WerknemersID' in de lijst 'Computercursussen' slepen. Tijdens het slepen,
verandert de muiswijzer daartoe in een klein plustekentje (zie in onderstaande
figuur in de lijst 'Computercursussen').
- Laat de muisknop pas los wanneer de muiswijzer precies boven de veldnaam 'WerknemersID'
in de lijst 'Computercursussen' werd geplaatst. Daardoor opent zich
het dialoogvenster 'Relaties bewerken'.
-
In dit dialoogvenster worden de twee tabelnamen
en de twee gerelateerde (gekoppelde) velden weergegeven. Het bevat
daarenboven volgende opties:
- Referentiële integriteit afdwingen. Wanneer deze optie
wordt aangevinkt, krijgt de gebruiker - telkens wanneer de primaire
sleutel wordt veranderd of verwijderd - een waarschuwing dat dit
onmogelijk is, tenzij de gegevens in de gekoppelde tabel worden
gewijzigd.
In ons voorbeeld: indien referentiële integriteit wordt afgedwongen:
- kan een gebruiker geen werknemers uit de tabel 'Werknemers Adressen' verwijderen, wanneer voor deze werknemer één of meerdere cursussen werden ingevoerd in de tabel 'Computercursussen'. Dit lijkt in dit voorbeeld meer dan aangewezen, omdat er anders in de tabel 'Computercursussen' cursussen kunnen voorkomen van onbekende (uitgestroomde, ontslagen,...) werknemers, die uit de tabel 'Werknemers Adressen' werden verwijderd.
- kunnen geen records met gegevens aangaande computercursussen in de tabel 'Computercursussen' worden ingevoerd, wanneer deze niet kunnen gekoppeld worden aan een 'WerknemersIdentificatie' in de tabel 'Werknemers Adressen'. Dit voorkomt dan weer dat er 'naamloze' computercursussen kunnen worden ingevoerd in de tabel 'Computercursussen', die op geen enkele wijze verwijzen naar de naam, voornaam,... van de werknemer die de cursus volgde.
- Gerelateerde velden trapsgewijs bijwerken. Wanneer deze
optie wordt aangevinkt en de primaire sleutel wordt gewijzigd dan wordt
automatisch het gerelateerde sleutelveld in de andere tabel
gewijzigd. Indien niet aangevinkt krijg je, wanneer je de primaire
sleutel wil bewerken, een waarschuwing dat er geen veranderingen kunnen
worden aangebracht.
In ons voorbeeld: onderstel dat het veld 'WerknemersID' in de tabel 'Computercursussen' niet van het type 'Autonummering' is (waardoor je het niet kàn wijzigen), maar wel van het type 'Numeriek'. Indien je in dat geval de waarde van het veld 'WerknemersID' in de tabel 'Werknemers Adressen' voor een bepaalde werknemer wijzigt, dan zouden de overeenkomstige waarden in het veld 'WerknemersIdentificatie' van de tabel 'Computercursussen' automatisch in dezelfde waarde worden gewijzigd, wanneer de optie 'Trapsgewijs bijwerken' is aangezet. Aldus wordt de koppeling tussen een werknemer en zijn/haar gevolgde computercursussen automatisch gewaarborgd.
- Gerelateerde records trapsgewijs verwijderen. Wanneer deze optie
is aangevinkt, dan worden bij het verwijderen van een record meteen ook
alle gerelateerde records, die met de primaire sleutel overeenkomen,
verwijderd in de andere tabel. Indien niet afgevinkt verschijnt er
een waarschuwing dat je een record niet kan verwijderen, zo lang er
gerelateerde records bestaan in de gekoppelde tabel.
In ons voorbeeld: Wanneer we deze optie aanvinken dan leidt het verwijderen van een werknemer in de tabel 'Werknemersadressen' ertoe dat automatisch alle gevolgde computercursussen van deze werknemer in de tabel 'Computercursussen' eveneens worden verwijderd, - wat weer voorkomt dat er 'naamloze' computercursussen in de tabel 'Computercursussen' zouden voorkomen.
- Voor deze oefening vinken we deze drie opties aan. Onder aan het
dialoogvenster 'Relaties bijwerken' wordt tevens het 'Type relatie:'
opgegeven. In dit voorbeeld gaat het om een 'Een-op-veel'-relatie
omdat elke (één) werknemer in de tabel
'Werknemers Adressen' meerdere computercursussen (veel)
kan laten optekenen in de tabel 'Computercursussen'.
- Ten slotte kan in het dialoogvenster 'Relaties bewerken' worden opgegeven
welk 'Jointype' deze koppeling kenmerkt. Klik daartoe op de knop 'Jointype...',
waardoor het dialoogvenster 'Joineigenschappen' wordt geopend.
- In dit geval kiezen we in het dialoogvenster 'Joineigenschappen' voor de tweede optie, omdat we een koppeling willen
maken tussen alle werknemers in de tabel 'Werknemers Adressen', enerzijds,
en alle cursussen in de tabel 'Computercursussen' die door één van de
werknemers in de andere tabel werden gevolgd, anderzijds.
-
Klik op 'OK' wanneer je de tweede optie gemarkeerd hebt om terug te keren
naar het dialoogvenster 'Relaties bewerken'.
- Klik op de knop 'Maken' om
dit dialoogvenster te sluiten.
- Bemerk in het venster 'Relaties' dat de beide tabellen met elkaar
verbonden zijn door een lijn, die de zo juist gemaakte relatie
weergeeft. In dit geval gaat het om een één-op-veel-relatie die in het venster
met het cijfer 1, aan de ene kant, en een oneindigheidsteken, aan de andere
kant is weergegeven.
Hiermee is de koppeling tussen de twee tabellen gelegd.
Klik op de sluitknop
(het kruisje rechtsboven in het venster 'Relaties') en
bewaar de gewijzigde relaties in de database wanneer Access daarom vraagt.
Wanneer je een eerder gelegde relatie tussen twee tabellen wenst te wijzigen,
dan kan je dat op volgende wijze doen.
- Open het venster 'Relaties' door in het tabblad 'Hulpmiddelen voor databases' op de
opdrachtknop 'Relaties' te klikken.
- Klik heel precies met de linkermuisknop op het schuine gedeelte van de lijn die
de koppeling tussen de sleutelvelden in de twee tabellen aangeeft. Daardoor wordt deze lijn vetjes weergegeven.
- Klik vervolgens in het tabblad 'Ontwerp' op de opdrachtknop 'Relaties bewerken' .
- Daardoor wordt het dialoogvenster 'Relaties bewerken' opnieuw geopend waarin je de relatie kan bewerken.
- Om de relatie te verwijderen klik je met de rechtermuisknop, alweer heel precies, op het lijnstuk dat de relatie weergeeft en kies je in het vervolgmenu voor de optie 'Verwijderen'
Noot: Bemerk dat, door met de rechtermuisknop op een relatie te klikken, in voornoemd vervolgmenu een alternatieve wijze wordt aangeboden om een relatie te bewerken: de menu-optie 'Relatie bewerken...', die er eveneens toe leidt dat het gelijknamige dialoogvenster wordt geopend.
Wanneer je eerder een relatie tussen twee of meerdere tabellen hebt aangemaakt, dan kan je later nog andere relaties toevoegen als volgt:
- Klik in het lint op het tabblad 'Hulpmiddelen voor databases'
- Klik in de groep 'Relaties' op de opdrachtknop 'Relaties' om het venster 'Relaties' te openen
- Klik in het tabblad 'Ontwerp' op de opdrachtknop 'Tabel weergeven'
- Selecteer in het daardoor geopende dialoogvenster 'Tabel weergeven' de gewenste tabellen (of query's)
- Klik op de knop 'Toevoegen' om de geselecteerde tabellen aan het venster 'Relaties' toe te voegen
- Klik op de opdrachtknop 'Sluiten' om het dialoogvenster te sluiten.
- Herschik de tabellen door ze te verslepen en eventueel de grootte van de tabellen aan te passen
- Leg de nieuwe relatie(s)
- Maak de tabel 'Computercursussen' zoals hoger beschreven in je 'Personeelsdatabase'.
- Leg een relatie tussen de tabel 'Werknemers Adressen' en tabel
'Computercursussen', zoals hoger uitgelegd.
- Voer op dit moment nog geen gegevens in in de tabel 'Computercursussen'
In de oefendatabase 'PersoneelsdatabaseVoorbeeld.accdb'
kan je een voorbeeld van de tabel 'Computercursussen' en van de relatie tussen
de tabellen 'Werknemers Adressen' en 'Computercursussen' vinden, evenals een voorbeeld van een relatie tussen de tabellen 'Jobstudenten' en 'Jobstudenten Tewerkstelling'.
Helpprogramma bij Microsoft Access 2013: zoek op 'relaties'.