Een van de doelstellingen van een goed databaseontwerp is het verwijderen van gegevensredundantie (dubbele gegevens). Als u dat doel wilt bereiken, verdeelt u de gegevens in veel op onderwerp-gebaseerde tabellen, zodat elk feit slechts eenmaal wordt gerepresenteerd. U verstrekt dan Access samen met een manier om de verdeelde gegevens weer samen terug te brengen — u doet dit door gemeenschappelijke velden te plaatsen in tabellen die zijn gerelateerd. Als u deze stap correct uitvoert, moet u de relaties begrijpen tussen tabellen, en deze vervolgens opgeven in uw database.
In dit artikel
Inleiding
Nadat u een tabel hebt gemaakt voor elk onderwerp in de database, moet u Access de mogelijkheid bieden om gegevens zo nodig weer te kunnen samenvoegen. U doet dit door gemeenschappelijke velden in gerelateerde tabellen te plaatsen en relaties tussen de tabellen te definiëren. Vervolgens kunt u query's, formulieren en rapporten maken waarin gegevens uit verschillende tabellen tegelijkertijd worden weergegeven. Het volgende formulier bijvoorbeeld bevat gegevens uit diverse tabellen:
1. De gegevens in dit formulier zijn afkomstig uit de tabel Klanten...
2. ...de tabel Orders...
3. ...de tabel Producten...
4. ...en de tabel Ordergegevens.
De klantnaam in het vak Factuur naar wordt opgehaald uit de tabel Klanten, de waarden voor de order-id en orderdatum uit de tabel Orders, de productnaam komt uit de tabel Producten en de waarden voor de prijs per eenheid en hoeveelheid uit de tabel Detailgegevens order. Deze tabellen zijn op allerlei manieren aan elkaar gekoppeld zodat gegevens uit elke tabel kan worden weergegeven op het formulier.
In het vorige voorbeeld moeten de velden in de tabellen bij elkaar staan, zodat ze informatie over dezelfde orde weergeven. Deze coördinatie wordt behaald met behulp van relaties tussen tabellen. Een tabelrelatie werkt met overeenkomende gegevens in de sleutelvelden - vaak een veld met dezelfde naam in beide tabellen. In de meeste gevallen zijn deze velden overeenkomende de primaire sleutel uit één tabel, met een unieke identifier voor elke record, en een refererende sleutel in een andere tabel. Werknemers kunnen bijvoorbeeld worden gekoppeld aan orders waarvoor ze verantwoordelijk zijn met het maken van een tabelrelatie tussen de werknemer-id-velden in de tabellen Werknemers en Orders.
1. Werknemer-id komt in beide tabellen voor als primaire sleutel...
2. ...en als externe sleutel.
Typen tabelrelaties
Er zijn drie typen tabelrelaties in Access.
-
Een-op-veel-relaties
Stel dat u een orderdatabase met een tabel Klanten en een tabel Orders hebt. Een klant kan een willekeurig aantal orders plaatsen. Dat betekent dat er voor elke klant in de tabel Klanten veel orders in de tabel Orders kunnen staan. De relatie tussen de tabel Klanten en de tabel Orders is dus een een-op-veel-relatie.
Als u een een-op-veel-relatie wilt weergeven in het databaseontwerp, neemt u de primaire sleutel van de 'een'-kant van de relatie en voegt u deze als extra veld(en) toe aan de tabel aan de 'veel'-kant van de relatie. In dit geval voegt u bijvoorbeeld een nieuw veld (het veld Id uit de tabel Klanten) toe aan de tabel Orders. Access kan vervolgens de klant-id in de tabel Orders gebruiken om de juiste klant voor elke order te vinden.
-
Veel-op-veel-relaties
Stel dat er een relatie bestaat tussen een tabel Producten en een tabel Orders. Eén order kan meer dan één product bevatten. Anderzijds kan één product voorkomen in veel orders. Daarom kan de tabel Producten veel records bevatten voor elke record in de tabel Orders. Bovendien kan de tabel Orders voor elke record in de tabel Producten veel records bevatten. Deze relatie wordt een veel-op-veel-relatie genoemd. Als u bestaande veel-op-veel-relaties tussen tabellen wilt opsporen, moet u letten op beide zijden van de relatie.
Om een veel-op-veel-relatie weer te geven, maakt u een derde tabel aan, ook wel een verbindingstabel genoemd, die de veel-op-veel-relatie splitst in twee één-op-veel-relaties. U voegt de primaire sleutel uit elk van de twee tabellen toe aan de derde tabel. Op die manier wordt in de derde tabel elke instantie van de relatie vastgelegd. De tabel Orders en de tabel Producten hebben bijvoorbeeld een veel-op-veel-relatie die is gedefinieerd door twee één-op-veel-relaties in de tabel Ordergegevens te maken. Elke order kan meerdere producten bevatten, en elk product kan voorkomen in een groot aantal orders.
-
Een-op-een-relaties
In een een-op-een-relatie heeft elke record in de eerste tabel maar één overeenkomstige record in de tweede tabel, terwijl elke record in de tweede tabel ook maar één overeenkomstige record in de eerste tabel heeft. Deze relatie komt niet veel voor omdat gegevens met een dergelijke relatie doorgaans in dezelfde tabel worden opgeslagen. U zou een een-op-een-relatie kunnen gebruiken om een tabel met veel velden op te splitsen, een deel van een tabel om veiligheidsredenen te isoleren of informatie op te slaan die alleen op een gedeelte van de hoofdtabel van toepassing is. Wanneer u een dergelijke relatie definieert, moeten beide tabellen een veld gemeenschappelijk hebben.
Waarom zou u tabelrelaties maken?
U kunt tabelrelaties expliciet maken in het venster Relaties of door een veld uit het deelvenster Lijst met velden te slepen. Aan de hand van tabelrelaties worden tabellen in Access gekoppeld wanneer u deze nodig hebt in een databaseobject. Er zijn verschillende redenen waarom u beter eerst tabelrelaties en dan pas andere databaseobjecten kunt maken, zoals formulieren, query's en rapporten.
-
Tabelrelaties bevatten informatie voor uw queryontwerpen
Als u met records uit meer dan één tabel werkt, moet u vaak een query maken waarmee de tabellen worden samengevoegd. Met de query worden de waarden in het primaire-sleutelveld van de eerste tabel gekoppeld aan de overeenkomstige waarde in een refererende-sleutelveld in de tweede tabel. Als u bijvoorbeeld rijen als resultaat wilt geven die alle orders voor elke klant bevatten, maakt u een query waarmee de tabel Klanten op basis van het veld Klant-id wordt gekoppeld aan de tabel Orders. In het venster Relaties kunt u handmatig opgeven welke velden u wilt koppelen. Als u echter al een relatie tussen de tabellen hebt gedefinieerd, wordt in Access de standaardjoin weergegeven, die op de bestaande tabelrelatie is gebaseerd. Als u met een van de querywizards werkt, worden in Access bovendien gegevens gebruikt uit de reeds gedefinieerde tabelrelaties om u zinvolle keuzes te bieden en instellingen van eigenschappen op voorhand te vullen met relevante standaardwaarden.
-
Tabelrelaties bevatten informatie voor uw formulier- en rapportontwerpen
Wanneer u een formulier of rapport ontwerpt, worden in Access de gegevens over de reeds gedefinieerde tabelrelaties gebruikt om u zinvolle keuzes te bieden en instellingen van eigenschappen op voorhand te vullen met relevante standaardwaarden.
-
Op basis van tabelrelaties kunt u referentiële integriteit afdwingen om niet-gekoppelde records in een database te helpen voorkomen. Een niet-gekoppelde record is een record die verwijst naar een andere niet-bestaande record, bijvoorbeeld een orderrecord die verwijst naar een niet-bestaande klantrecord.
Wanneer u een database ontwerpt, verdeelt u uw gegevens over tabellen die allemaal een primaire sleutel bevatten. Daarna voegt u aan gerelateerde tabellen refererende sleutels toe die naar deze primaire sleutels verwijzen. Deze combinatie van primaire en refererende sleutel vormt de basis van tabelrelaties en query's voor meerdere tabellen. Het is belangrijk dat deze verwijzingen tussen refererende en primaire sleutels gesynchroniseerd blijven. Referentiële integriteit is afhankelijk van tabelrelaties en zorgt ervoor dat verwijzingen gesynchroniseerd blijven.
Referentiële integriteit
Wanneer u een database ontwerpt, verdeelt u uw databasegegevens over verschillende tabellen op basis van het onderwerp om dubbele gegevens tot een minimum te beperken. Vervolgens plaatst u gemeenschappelijke velden in gerelateerde tabellen om Access een mogelijkheid te bieden om de gegevens weer aan elkaar te koppelen. Als u bijvoorbeeld een een-op-veel-relatie wilt weergeven, neemt u de primaire sleutel uit de 'een'-tabel en voegt u deze als extra veld toe aan de 'veel'-tabel. Als u de gegevens aan elkaar wilt koppelen, wordt in Access de waarde in de 'veel'-tabel gebruikt en daarbij de overeenkomende waarde in de 'een'-tabel gezocht. Zodoende verwijzen de waarden in de 'veel'-tabel naar de overeenkomende waarden in de 'een'-tabel.
Stel dat u een een-op-veel-relatie tussen Verzenders en Orders hebt en u een verzender wilt verwijderen. Als de verzender die u wilt verwijderen orders in de tabel Orders heeft, worden deze orders niet-gekoppelde records als u de Verzender-record verwijdert. De orders bevatten nog wel een verzender-id, maar deze is niet meer geldig omdat de bijbehorende record niet meer bestaat.
Referentiële integriteit is bedoeld om niet-gekoppelde records te voorkomen en verwijzingen gesynchroniseerd te houden zodat deze hypothetische situatie niet kan voorkomen.
U dwingt referentiële integriteit af door deze optie in te schakelen voor een tabelrelatie. Wanneer deze optie is ingeschakeld, worden in Access alle bewerkingen geweigerd die in strijd zijn met de referentiële integriteit van de betreffende tabelrelatie. Dat betekent dat Access zowel updates waarmee het doel van een verwijzing wordt gewijzigd als verwijderingen waarmee het doel van een verwijzing wordt verwijderd weigert. Het is mogelijk dat u een volstrekt geldige reden hebt om de primaire sleutel te wijzigen voor een verzender die orders in de tabel Orders heeft. In die gevallen zouden in Access eigenlijk alle betrokken rijen via één bewerking moeten kunnen worden bijgewerkt. Access voert de update dan volledig uit zodat de database niet wordt achtergelaten in een inconsistente toestand, waarbij sommige rijen wel en andere rijen niet zijn bijgewerkt. Daarom ondersteunt Access de optie Gerelateerde velden trapsgewijs bijwerken . Als u een primaire sleutel bijwerkt terwijl referentiële integriteit wordt afgedwongen en u de optie Gerelateerde velden trapsgewijs bijwerken hebt ingeschakeld, worden in Access automatisch alle velden bijgewerkt die naar de primaire sleutel verwijzen.
Het is ook mogelijk dat u een volstrekt geldige reden hebt om een rij en alle daaraan gerelateerde records te verwijderen, bijvoorbeeld een Verzender-record met alle gerelateerde orders voor deze verzender. Daarom wordt in Access de optie Gerelateerde records trapsgewijs verwijderen ondersteund. Als u een record aan de kant van de primaire sleutel van de relatie verwijdert terwijl referentiële integriteit wordt afgedwongen en u de optie Gerelateerde records trapsgewijs verwijderen hebt ingeschakeld, worden in Access automatisch alle records verwijderd die naar de primaire sleutel verwijzen.
Tabelrelaties weergeven
Klik op het tabblad Hulpmiddelen voor databases op Relaties als u de tabelrelaties wilt weergeven. Het venster Relaties wordt geopend en alle bestaande relaties worden weergegeven. Als er geen tabelrelaties zijn gedefinieerd en u het venster Relaties voor het eerst opent, vraagt Access of u een tabel of query aan het venster wilt toevoegen.
Het venster Relaties openen
-
Klik op Bestand, klik op Openen en selecteer en open de database.
-
Klik op het tabblad Hulpmiddelen voor databases in de groep Relaties op Relaties.
-
Klik op het tabblad Relaties ontwerpen in de groep Relaties op Alle relaties.
Hiermee worden alle gedefinieerde relaties in uw database weergegeven. Verborgen tabellen (tabellen waarvoor het selectievakje Verborgen is ingeschakeld in het dialoogvenster Eigenschappen van de tabel) en de bijbehorende relaties worden niet weergegeven, tenzij het selectievakje Verborgen objecten weergeven is ingeschakeld in het dialoogvenster Navigatieopties.
Een tabelrelatie wordt voorgesteld met een relatielijn tussen tabellen in het venster Relaties. Een relatie waarvoor geen referentiële integriteit is afgedwongen, wordt aangeduid met een dunne lijn tussen de gemeenschappelijke velden die de relatie ondersteunen. Wanneer u de relatie selecteert door op de lijn te klikken, wordt de lijn dikker om aan te geven dat de relatie is geselecteerd. Als u voor deze relatie referentiële integriteit afdwingt, wordt de lijn aan beide uiteinden dikker. Bovendien staat het getal 1 boven het dikke gedeelte van de lijn aan de ene zijde van de relatie en het oneindigheidssymbool (8) boven het dikke gedeelte aan het andere uiteinde van de lijn.
Wanneer het venster Relaties actief is, zijn de volgende opdrachten beschikbaar op het lint:
Ga op het tabblad Relaties ontwerpen naar de groep Extra :
-
Relaties bewerken Hiermee opent u het dialoogvenster Relaties bewerken. Wanneer u een relatielijn selecteert, kunt u op Relaties bewerken klikken om de tabelrelatie te wijzigen. U kunt ook op de relatielijn dubbelklikken.
-
Indeling wissen Hiermee wist u alle tabellen en relaties uit het venster Relaties. Hiermee verbergt u de tabellen en relaties alleen, u verwijdert deze niet daadwerkelijk.
-
Rapport Relaties Hiermee maakt u een rapport dat de tabellen en relaties in de database weergeeft. Het rapport bevat alleen de tabellen en relaties die in het venster Relaties niet zijn verborgen.
Ga op het tabblad Relatiesontwerp naar de groep Relaties :
-
Tabellen toevoegen Hiermee kunt u de selectie van tabellen weergeven in het venster Relaties.
-
Tabel verbergen Hiermee verbergt u de geselecteerde tabel in het venster Relaties.
-
Rechtstreekse relaties Hiermee geeft u alle relaties en gerelateerde tabellen voor de geselecteerde tabel in het venster Relaties weer als deze nog niet worden weergegeven.
-
Alle relaties Hiermee geeft u alle relaties en gerelateerde tabellen in de database in het venster Relaties weer. Verborgen tabellen (tabellen waarvoor het selectievakje Verborgen is ingeschakeld in het dialoogvenster Eigenschappen van de tabel) en de bijbehorende relaties worden alleen weergegeven als in het dialoogvenster Navigatieopties de optie Verborgen objecten weergeven is ingeschakeld.
-
Sluiten Hiermee sluit u het venster Relaties. Als u de indeling van het venster Relaties hebt gewijzigd, wordt u gevraagd of u deze wijzigingen wilt opslaan.