Home » Cursus Microsoft Access » Primaire sleutel & relaties tussen tabellen (5/10)

Primaire sleutel & relaties tussen tabellen (5/10)

Hoe voeg je relaties toe tussen tabellen? Wat is referentiële integriteit? Wat is het jointype? Hoe druk je een overzicht van de relaties tussen tabellen af?

Op deze pagina gaat het over relaties. ❤️ Spijtig genoeg niet over liefdesrelaties, maar wel over relaties tussen ... tabellen.

Tot nu hebben we onze tabellen enkel los van elkaar gebruikt, maar je moet ze natuurlijk aan elkaar vastknopen,. Dat gaan we hier doen.

Zonder relaties heb je ook geen relationele database, natuurlijk.

Relaties maken

Het venster waar je de relaties legt, is bereikbaar via de ontwerpweergave en de gegevensbladweergave. Soms is het leven gemakkelijk en kan je kiezen. ????

Ik vertrek nu van de gegevensbladweergave en klik dan op de tab tabel.

Je ziet nu de in de groep relaties de knop relaties staan. Klik op relaties.

Het tabblad relaties opent nu.

In dit scherm leg je de relaties tussen items. De items zelf staan rechts.

Het is best om vooraleer we verdergaan eerst de tabeltabs die open staan te sluiten. Anders krijg je daarover straks een foutmelding te lezen. Sla op als je nog wijzigingen had gedaan.

Aan de rechterkant zie je het venster tabellen toevoegen. Je merkt dat je tabellen, koppelingen en query’s (waarover later meer) kan toevoegen om de relaties te leggen.

Je ziet onder tabellen de tabellen die in je database zitten.

Het is nu de bedoeling om die tabellen toe te voegen onder het tabblad relaties. Dat doe je door de tabellen in het lijstje te selecteren (eventueel meerdere items tegelijk door shift in te drukken en dan de tabellen aan te klikken) en dan te klikken op de knop geselecteerde tabellen toevoegen. Je kan gewoon dubbelklikken op een tabel om die aan de relaties toe te voegen.

Je ziet nu de tabellen naast elkaar verschijnen, met ook de velden per tabel. De primaire sleutel wordt aangeduid met een sleutelicoontje.

Hier worden tabellen toegevoegd aan het relaties-scherm. Je kan ze gemakkelijk verplaatsen of de grootte veranderen.

Je kan zoals je hierboven ziet de volgorde van de tabellen veranderen door op de titel van de tabel te klikken zodat er een gekleurd kader rond verschijnt. Vervolgens kan je door klikken en slepen de tabel verplaatsen. Je kan door te slepen ook gemakkelijk de afmetingen aanpassen.

Om relaties te maken sleep je een veld uit de ene tabel naar het overeenkomstige veld in de andere tabel.

Als je bijv. in de boekentabel elk record een bepaalde locatie wil kunnen geven om aan te geven waar dat boek te vinden is, dan moeten we dus een relatie leggen van het locatieveld in de boekentabel naar het locatieveldveld in de locatietabel. Je verwijst dus in de boeken naar een bepaald veld in de locatietabel.

Dat lukt alleen maar als je dat locatieveld 2 x hebt: 1 x in de locatietabel, en 1 x in de boekentabel. Er zijn velden nog die overeenkomen om relaties tussen de tabellen te kunnen leggen.

Ik mijn voorbeeld had ik alleen een locatieveld gemaakt in de locatietabel. Wat ik nu dus moet doen is ook in de boekentabel iets zeggen over de locaties. Ik doe dat door daar een nieuw veld bij te maken. Met de wizard opzoeken zorg ik ervoor dat ik in de boekentabel dezelfde locaties zie als in de locatietabel.

In de bewerkweergave voeg ik een nieuw veld toe. De waarden voor dat veld komen via de wizard opzoeken uit de tabel met locaties.

Is dat gelukt? Ok, dan zijn we klaar om de relaties te leggen. Sluit nu opnieuw alle openstaande tabellen, en schakel over naar de tab relaties.

Omdat we net de wizard opzoeken hebben gebruikt, is nu automatisch al een relatie toegevoegd. Je ziet dat aan het lijntje tussen de locatietabel en de boekentabel. Als je goed kijkt zie je dat die relatie eigenlijk van het locatie_id veld naar het locatieveld loopt.

Zie je het relatiepijltje tussen de 2 tabellen?

Je moet nu eens dubbelklikken op die lijn tussen de 2 tabellen. Er opent nu een venstertje waar je in detail ziet welke relatie je instelt.

Hier zie je de instellingen voor de relatie
  • Je ziet welke velden uit weke tabellen je aan elkaar vastknoopt.
  • Je ziet onderaan wat voor relatie het is. Hier is dat “een-op-veel”: 1 locatie kan terugkomen bij veel boeken, terwijl 1 boek maar 1 locatie kan hebben.
  • Jointype: dit heeft te maken met wat er met de records moet gebeuren die al in de database zitten, ik leg dat straks uit.
  • Referentiële integriteit: hiermee stel je in wat er moet gebeuren als je met een wijziging aan je records of tabel de relatie verstoort. Wat moet er in de boekentabel gebeuren als je een auteur in de auteurtabel wist? Daarover gaat referentiële integriteit. Meer info vind je hieronder.

Zorg dat er zeker een vinkje bij referentiële integriteit staat en klik ik gewoon op OK. De uitleg over referentiële integriteit volgt straks.

Je ziet nu een dikkere lijn tussen de 2 tabellen staan. Er staat ook een 1 en ∞ symbool bij om aan te geven dat het een 1 op veel relatie is. Die extra symbolen verschijnen omdat we de referentiële integriteit aangevinkt hebben.

Nu we “referentiële integriteit” afdwingen geeft de lijn tussen de tabellen meer informatie over het type relatie: 1 op ∞

Wil je later een relatie wissen? Klik dan op de lijn te klikken en druk de delete-toets in.

Als je de wizard opzoeken gebruikt, leg je dus relaties. Je kan die ook manueel leggen in het relatievenster. We gaan dat eens proberen.

Laat ons dat eens doen met de relatie tussen de onderwerptabel en de boeken. Die is ook 1 op veel in dit geval: een onderwerp hoort bij meer boeken, maar een boek heeft maar 1 onderwerp.

Wat we dan eerst doen is in de boekentabel een nieuw veld onderwerp aanmaken. Ik kies voor veldtype numeriek omdat we gaan linken met de onderwerp_id, en dat is gewoon een nummertje.

Ik kies voor een numeriek veld

Vervolgens bewaren we dat en sluit ik de boekentabel.

In het relatievenster maken we de relatie nu manueel: klik op onderwerp_id in de onderwerptabel en sleep dat naar onderwerp in de boekentabel. Vervolgens opent opnieuw het relatievenster waar je de referentiële integriteit aanvinkt.

Zo maak je manueel een relatie.

Laat ons nu even terugkeren naar onze auteurstabel. Vlak voor de eerste kolom Auteur-ID, zie je nu plustekentjes staan. Als je daarop klikt, zie je voor welke boeken dat bepaalde ID gebruikt wordt.

Het stukje wat openklapt noemen we een subgegevensblad, een gegevensblad in een gegevensblad.

Je kan zelfs in zo’n subgegevensblad ook data typen, om zo meteen data in te geven in 2 tabellen tegelijk.

Handig hé?

Referentiële integriteit

Tijd om dit concept met de moeilijke naam een beetje verder uit te spitten.

Wat is referentiële integriteit?

Zoals je weet hebben we in het relatievenster daarnet het vinkje bij referentiële integriteit aangevinkt.

Dat betekent dat Microsoft Access ons gaat helpen om de database zuiver, zonder fouten te houden wanneer we wijzigingen willen aanbrengen in de tabellen die door de relatie met elkaar verbonden zijn.

Wat als ik bijvoorbeeld een boek ingeef met een onderwerp-ID wat niet bestaat? Dan verstoor ik de relatie.

Ik probeerde hier een boek toe te voegen met onderwerp-id 1000. Dat bestaat natuurlijk niet. Omdat de referentiële integriteit voor de relatie tussen de 2 tabellen is aangevinkt accepteert het systeem deze ingave niet.

Wanneer ik dat probeer te doen verschijnt een foutmelding. Die voorkomt dat ik per ongeluk een niet bestaande onderwerp gebruik.

2 extra vinkjes wanneer je relaties met referentiële integriteit instelt

Wanneer we een relatie instellen en het vinkje bij referentiële integriteit zetten, dan kunnen we 2 extra vinkjes zetten:

  • gerelateerde velden trapsgewijs bewerken
  • gerelateerde records trapsgewijs verwijderen
2 extra opties onder het vinkje voor referentiële integriteit

Als je dit zo leest, betekent het waarschijnlijk weinig. Daarom probeer ik hieronder kort uit te leggen wat je ermee kan doen. ????

Het ene vinkje bepaalt wat er gebeurt als je velden in verbonden tabellen bewerkt, terwijl het andere vinkje bepaalt wat er gebeurt als je velden verwijdert.

Gerelateerde velden trapsgewijs bewerken

Het eerste bepaalt wat er moet gebeuren als de primaire sleutel wordt aangepast.

Als je het vinkje niét zet, is zo’n aanpassing niét mogelijk (de aanpassing brengt dan de integriteit in gevaar). Aanpassingen zijn niet toegestaan.

Als je het vinkje wél zet, dan wordt het record in de andere tabel aangepast wanneer je het in de ene tabel wijzigt. Je bewerking in de ene tabel wordt ook doorgevoerd in de andere.

Omdat in mijn tabel de unieke sleutels uit een autonummering bestaat, kan ik hier moeilijk dat effect laten zien.

Gerelateerde velden trapsgewijs verwijderen

Wat moet er gebeuren met mijn boek (in de boekentabel) als ik een onderwerp verwijder uit de onderwerptabel?

Als dit vinkje is ingeschakeld, dan kan je een onderwerp verwijderen, maar dan worden ook de boeken over dat onderwerp verwijderd. Dat is dus een serieuze ingreep. Je records worden gewist. Je krijgt wel een waarschuwing die je erop attent maakt, maar toch. Goed opletten is de boodschap. ❗

Als dit vinkje niet is ingeschakeld, maar wel referentiële integriteit, dan kan je géén onderwerp verwijderen zolang dit ergens in de boekentabel wordt gebruikt.

Ik kan dit onderwerp niet gebruiken omdat er in een andere tabel naar verwezen wordt.

Jointype

Wanneer je een relatie legt, zie je ook een knopje staan waarmee je het zogenaamde jointype instelt. Die knop is nuttig om te bepalen wat het systeem moet doen met de data die al in je tabellen zitten wanneer we straks query’s gaan maken.

Stel dat je bijvoorbeeld een boek hebt waarvoor het onderwerpveld niet is ingevuld. Mag dat boek dan getoond worden? Of mogen enkel boeken getoond worden die een onderwerp hebben?

En andersom kan ook, wat met onderwerpen die niet aan een boek zijn toegewezen. Heeft het nut om die te tonen?

Zodra je op het jointype knopje klikt, kan je kiezen uit 3 mogelijke gevallen:

Dit zijn de 3 joinopties die je terugvindt via de knop jointype in het venster waar je de relaties bewerkt

Vertaald naar ons voorbeeld betekenen deze opties:

  1. Gegevens uit de ene tabel worden alleen getoond als ze in gebruik zijn in de andere tabel, dat is dus de meest strenge situatie.
  2. Onderwerpen worden getoond (ook als ze nog niet aan een boek zijn toegewezen); boeken worden enkel getoond als ze een auteur hebben
  3. Boeken worden getoond (ook als ze nog geen auteur hebben); onderwerpen worden enkel getoond als ze zijn toegewezen aan een boek.

Snap je het? Jointype bepaalt dus welke impact de tabellen op elkaar hebben.

Alle relaties verder uittekenen en de verbindingstabel maken

Tijd nu om heel onze database eens uit te tekenen. Alle tabellen moeten met elkaar in verbinding gebracht worden.

Eerder hadden we al gezegd dat de relatie tussen de auteurs en de boeken een veel-op-veel relatie is. Een auteur kan terugkomen bij meerdere records in de boekentabel, en een boek kan terugkomen bij meerdere auteurs in de auteurtabel.

Zoals gezegd maken we daarvoor een verbindingstabel. Dat is een gewone tabel, met in dit geval maar 2 velden (auteur_ID en boek_ID). Bedoeling is nu dat we 2 primaire sleutels aanmaken, voor elk veld een. Waarom 2? Omdat in dit geval niet het auteur-ID of het boek_ID uniek is, maar wel de combinatie van de 2. Geen 2 records zullen dezelfde combinatie van eenzelfde auteur_ID en boek_ID hebben.

Dat doe je door in de ontwerpweergave de 2 rijen te selecteren, en dan te klikken op de knop primaire sleutel in de groep extra op de tab tabelontwerp.

Ik heb de velden Boek_id & Auteur_id tegelijk geselecteerd en er dan primaire sleutels van gemaakt

Vervolgens zetten we deze tabel tussen de auteurstabel en boektabel, en leggen we de relaties. Ik verschuif de tabellen nu ook een beetje om alles goed overzichtelijk te maken. Je ziet duidelijk dat de boekentabel in onze database centraal staat.

Nu zijn alle relaties in onze eenvoudige database gelegd.

Wat ik tot slot nu nog moet doen is in de verbindingstabel de data ingeven. Dus voor elk Boek_ID aangeven welke Auteur-ID’s toegevoegd moeten worden. Dat is een tijdrovend werkje waarvoor we later nog een beter alternatief zullen uitleggen.

Hier maak ik duidelijk welke combinaties van boeken en auteurs mogelijk zijn.

Relaties mooi weergeven & afdrukken

Tot slot van dit deel nog iets over de weergave van de relaties zodat je als je dat zou willen een mooi overzicht zou kunnen afdrukken van de relaties in je rapport.

Geef de relaties weer via hulpmiddelen voor databases. Klik daarna op op de knop relatierapport in de groep extra op de tab relatieontwerp.

De cursor staat in de afbeelding op de knop waarop je moet drukken.

Het venster wat nu opent is eigenlijk het afdrukvoorbeeld van een rapport. Je herkent bovenaan vast en zeker de opties, zoals die ook in een afdrukvoorbeeld in Word worden weergegeven.

Dit is het relatierapport.

Met het lint kan je op de tab afdrukvoorbeeld aanpassingen doen aan de opmaak van je rapport. Ik heb mijn relatierapport bijvoorbeeld liggend gemaakt door in de groep pagina-indeling liggend te selecteren in plaats van staand.

Je kan het afdrukken met de knop afdrukken in het lint.

Om het rapport verder te bewerken klik je in het lint op afdrukvoorbeeld sluiten.

Je ziet dat het rapport nu geopend wordt in een bewerkweergave, waardoor je het kan wijzigen (bijvoorbeeld de koptekst).

Je kan nu de koptekst van je rapport bewerken.

Om je aanpassingen te bewaren en het rapport op te slaan zodat je het ook later gemakkelijk kan oproepen druk je op ctrl s en geef je het rapport een naam. Ik noem het bijvoorbeeld relatierapport.

Vanaf nu is het beschikbaar in het navigatiedeelvenster.

Vanaf nu is het rapport beschikbaar in het navigatiedeelvenster.

Office-toepassingen

Cursus MS Excel

Cursus MS Word

Cursus MS PowerPoint

Cursus MS Outlook

Cursus MS Access

Grafische programma's

Basiscursus Adobe Photoshop

Basiscursus GIMP

Basiscursus Adobe Lightroom

Mobiel

Cursus Android smartphones

Bedrijfstoepassingen

Cursus Google Analytics

Cursus Google Ads

Cursus SEO

Cursus Wordpress