Zie ook:
| PCMenu | Access uitgeplozen | Tabellen en databaseontwerp |
| Query's | Formulieren | Andere formulieren |
| Rapporten | Modules |
In deze tekst:
In AdresMenu zijn alle tabellen in het programma zelf opgenomen, er zijn dus geen tabellen gekoppeld. Dit is uitsluitend gedaan omdat dit makkelijker is in de presentatie en de verspreiding van het programma. Als u het programma wilt gebruiken, dan is het splitsen van het programma in een gegevensdeel en een programmadeel aan te raden, zeker in een omgeving waar meerdere mensen van hetzelfde programma gebruik maken. Zie ook Access voor gevorderden. Tabellen met de technische gegevens over het programma en de versie van de front end en tabellen die instellingen van de front end beheren, horen bij de front end, deze tabellen neemt u dus niet op in de backend. In AdresMenu zijn dat de tabellen: tblWijziging (beschrijft de wijzigingen van de front end), tblAfdruk (beschrijft welke rapporten u kunt gebruiken) en tblKleurset (lijst van kleuren die u als achtergrond van de drie hoofdformulieren kunt instellen).

AdresMenu heeft twee hoofdtabellen: de tabel tbllNaam en de tabel tblGroep. In de tabel tblNaam staan alle adresgegevens die u straks invoert. In de tabel tblGroep staan de gegevens over de groepen waar de namen uit tblNaam lid van kunnen zijn. Alle andere tabellen zijn direct of indirect afhankelijk gemaakt (zie verderop) aan de tabel tblNaam of tblGroep, behalve de volgende tabellen:
| tblAfdruk: in deze tabel staan de soorten afdrukken die mogelijk zijn vanuit AdresMenu. | |
| tblInformatie: deze tabel bevat één record met informatie over het programma, zoals de titel, de auteur enzovoort. Deze gegevens worden elders in het programma gebruikt en getoond. | |
| tblWijziging: deze tabel bevat een beschrijving van alle wijzigingen die in het programma in de loop van de tijd aangebracht zijn. |
| Bedenk wat uw hoofdtabellen moeten worden. Als de gegevens van twee of meer tabellen grotendeels overeenkomen, probeer dan deze tabellen samen te voegen en extra velden te maken voor de verschillen tussen de gegevens. Bijvoorbeeld: voor een catalogus voor videobanden, dvd's en cd's maakt u één tabel en zet u in het veld Mediumtype per record of het record een videoband, dvd of cd betreft. | |
| Geef alle tabellen duidelijke namen en vermijdt spaties of andere leestekens (een _ is wel toegestaan) in de naamgeving. Als uw programma groter wordt dan ondervindt u veel voordelen van een consequente en duidelijke naamgeving. |
Het eerste veld van de tabel tblNaam is het veld ID_Naam.

U ziet dat dit veld van het Gegevenstype Autonummering is. Dit betekent dat Access zelf dit veld invult met een oplopend getal vanaf 1. AutoNummering velden zijn altijd van het type Lange integer: hele getallen vanaf -2.147.483.648 tot en met 2.147.483.647.
In de marge voor de Veldnaam ziet u een sleuteltje. Dit geeft aan dat dit veld het sleutelveld van de tabel is. Een sleutelveld bevat altijd unieke waarden: elke waarde komt slechts één keer in dit veld in de tabel voor. De waarde van een sleutelveld is daarom een herkenningswaarde voor het record: als u naar het sleutelveld verwijst, verwijst u in feite naar het hele record. In principe hebt u altijd in een tabel precies één sleutelveld. In sommige gevallen geeft u in een tabel twee of meer velden samen als de sleutel van het record aan, zie verderop bij Tussentabellen van Veel-op-veel relaties.
Bij de beschrijving kunt u een korte tekst zetten over waar dit veld voor is. U ziet deze beschrijving straks terug in de Statusbalk van formuliervelden.
De meeste andere velden zijn van het type Tekst, met een lengte van bijvoorbeeld 20, 50, 150 of (maximaal) 255 tekens. U kunt zelf de maximale lengte bepalen, maar als u het veld ook in een andere tabel gebruikt (zie Relaties tussen de tabellen), dan moet de lengte in beide velden gelijk zijn.
Onderin de tabel staan velden met een ander Gegevenstype:
| Numeriek: u kunt kiezen uit de types Lange integer (een heel getal, positief of negatief of 0), Integer (idem, maar dan tussen ± -32.000 en +32.000), Byte (een heel getal tussen 0 en 255), Enkele precisie (een getal met een aantal decimalen) of Dubbele precisie (idem, maar dan met nog meer nauwkeurigheid). | |
| Valuta: een getal in Euro's, met twee decimalen. Access neemt de standaard valutainstelling over van Windows: als deze bij het aanmaken van de tabel in $ is, dan is de valutawaarde ook in $. | |
| Ja/nee: een waarde Ja, Nee of geen waarde. Access 'vertaalt' de waarde Ja (of Waar / True) naar de getalswaarde -1 en de waarde Nee (of Onwaar / False) naar de getalswaarde 0. | |
| Datum/tijd: een datum en/of tijd. Bij de Standaardwaarde kunt u desgewenst Date() invullen om voor elk niet record standaard de huidige datum in te vullen, of Now() om standaard de huidig datum en tijd in te vullen. | |
| Memo: dit is een tekstvak met bijna onbeperkte tekstlengte. | |
| OLE-object (zie het veld Logo in de tabel tblInformatie): een OLE-object is bijvoorbeeld een afbeeldingbestand of een geluids- of videofragment. |

| Bepaal wat het unieke veld van elke tabel is. Als elk record een uniek gegeven heeft (bijvoorbeeld een artikelnummer of een personeelsnummer) dan kunt u dit veld als sleutelveld gebruiken. Als er echter uitzonderingen zijn, bijvoorbeeld records zonder personeelsnummer of een artikelnummer dat twee keer voor kan komen, dan kunt u het beste een extra veld ID van het type AutoNummering toevoegen en dit als sleutelveld gebruiken. | |
| Bepaal het gegevenstype van alle velden. Wilt u velden van de tabel afhankelijk maken van dezelfde velden uit een andere tabel, zorg er dan voor dat het gegevenstype in beide precies velden gelijk is. | |
| Bepaal ook de veldlengte van tekstvelden. Te lange velden kunnen uw database onnodig groot maken. | |
| Geef elk veld een duidelijke, korte naam. Vermijd spaties en andere leestekens in de naamgeving, een _ is wel toegestaan. | |
| Voeg desgewenst een veld Datum_invoer of Datum_aanmaak toe met de Standaardwaarde Date(). Met dit veld kunt u altijd zien wanneer het record aangemaakt is. |
In het volgende schema ziet u hoe alle tabellen met elkaar samenhangen. U kunt het schema zelf oproepen vanuit het Databasevenster bij Extra >> Relaties...
Klik op de afbeelding om deze te vergroten
Links van de tabel tblNaam ziet u een vijftal Opzoektabellen. Dit zijn tabellen die de detailgegevens bevatten van de gegevens die in de tabel tblNaam gebruikt worden. Met een opzoektabel hoeft u niet steeds alle gegevens uit te werken, maar kunt u volstaan met het opnemen van een uniek kenmerk van de opzoektabel in de hoofdtabel. Een voorbeeld: in de tabel tblTitel staan alle gegevens van een titel: bij de titel Dhr. hoort het geslacht Man, de formele aanhef Geachte heer en de persoonlijke aanhef Beste. In de hoofdtabel neemt u alleen het kenmerk Dhr. op, alle bijbehorende gegevens kunt u uit de opzoektabel tblTitel halen.

U kunt de relatie bekijken en/of bewerken door met de rechter muis op de verbindingslijn te klikken.

Kies dan voor Relatie bewerken...

U ziet nu welke velden uit de twee tabellen met elkaar verbonden zijn: het veld Titel uit de tabel tblTitel is verbonden met het veld Titel uit de tabel tblNaam.
U ziet ook dat het vakje bij Referentiële integriteit afdwingen aangevinkt is. Dit betekent dat de twee velden met elkaar verbonden zijn: elke waarde in het veld Titel in de tabel tblNaam moet bestaan in het veld Titel in de tabel tblTitel (de opzoektabel). Het veld Titel in de tabel tblTitel is het Sleutelveld van de tabel tblTitel, het veld Titel in de tabel tblNaam is een Vreemde sleutel in de tabel tblNaam. U kunt overigens alleen referentiële integriteit afdwingen als het veld in de opzoektabel het sleutelveld is van deze tabel. Ook moeten beide velden altijd van precies hetzelfde type zijn: u kunt geen relatie leggen tussen bijvoorbeeld een tekstveld en een numeriek veld, maar ook niet tussen een numeriek veld van het type Lange integer met een numeriek veld van het type Dubbele precisie. U kunt wel twee tekstvelden van verschillende lengte met elkaar verbinden, maar dit is niet aan te raden: houd bij voorkeur de veldlengte in beide velden gelijk.
Ook het vakje bij Gerelateerde velden trapsgewijs bijwerken is aangevinkt. Dit betekent dat, als u een waarde van het veld Titel in de tabel tblTitel aanpast, alle zelfde waarden in het veld Titel van de tabel tblNaam bijgewerkt worden. Verandert u bijvoorbeeld in de tabel tblTitel de waarde Dhr. van het sleutelveld Titel in Mnr., dan worden alle Titels in de tabel tblNaam waar Dhr. in staat ook automatisch gewijzigd in Mnr.
Het vakje bij Gerelateerde velden trapsgewijs verwijderen is niet aangevinkt. Als u dit wel aangevinkt zou hebben, dan worden alle records uit de tabel tblNaam met een titel Dhr. verwijderd, als u in de tabel tblTtitel het record Dhr. zou verwijderen. Dat is niet de bedoeling! Omdat dit vakje niet aangevinkt is, betekent dat overigens wel dat u geen records uit de tabel tblTitel kunt verwijderen waarbij de Titel ook nog (als vreemde sleutel) voorkomt in de tabel tblNaam.
Onderin het venster ziet u dat Access een Een-op-veel relatie aanmaakt tussen de twee tabellen. Dit gaat automatisch, als het veld uit de ene tabel (de opzoektabel) een sleutelveld is en het veld geen sleutelveld is in de andere tabel. Als het veld in beide tabellen het enige sleutelveld is, dan maakt Access een Een-op-een relatie tussen de twee velden.
Ook de vier velden Telefoontype 1 t/m 4 (met de waarden overdag, zakelijk, fax, mobiel, ...) zijn gekoppeld aan een Opzoektabel, de tabel tblTelefoontype. Omdat in de hoofdtabel tblNaam het telefoontype in vier velden gebruikt wordt, is de tabel tblTelefoontype vier keer weergegeven in het venster Relaties. Elk veld Telefoontype is met een van de vier weergaven van dezelfde tabel tblTelefoontype gekoppeld.

Bij Jointype kunt u eventueel instellen dat ook waarden van de hoofdtabel mag gebruiken, die niet in de opzoektabel voorkomen. In het relatievenster zult u meestal voor de standaardwaarde kiezen (alle waarden moeten in beide tabellen voorkomen), in query's zult u soms voor een ander jointype kiezen.

De hoofdtabel tblNaam is zelf ook weer een opzoektabel voor twee andere tabellen: de tabellen tblGebeurtenis en tblTranscatie. Ook hier is een Een-op-veel relatie gelegd, nu tussen de tabel tblNaam en de tabellen tblGebeurtenis en tblTranscatie.Het sleutelveld ID_Naam uit de tabel tblNaam is een vreemde sleutel in de tabel tblGebeurtenis.

| Maak de opzoektabellen aan. De vuistregel is dat u uit een hoofdtabel
een opzoektabel kunt opsplitsen als een groepje gegevens meerdere keren in
dezelfde combinatie in uw hoofdtabel voorkomt. Voorbeeld: als u in een catalogusbestand tblCatalogus van een bibliotheek bij elk boek de plank, kast, zaal en vestiging opgeeft waar het boek staat, dan kunt u deze gegevens uit de hoofdtabel halen.U maak dan een tabel tblLocatie met de velden ID_Locatie, Vestiging, Zaal, Kast, Plank. In de tabel tblCatalogus neemt u dan alleen een veld ID_Locatie op. Access kan u ook helpen bij dit opsplitsen van opzoektabellen uit een hoofdtabel, zie Extra >> Analyseren... >> Tabel. | |
| Leg alle relaties tussen de opzoektabellen en de hoofdtabel(len) en leg de referentiële integriteit vast. | |
| Wilt u een opzoektabel met meerdere velden van uw hoofdtabel verbinden, geef de opzoektabel dan meerdere keren weer in het venster Relaties en leg voor elk veld een relatie met een andere weergave van de opzoektabel. | |
| Maak ook de andere tabellen aan waar de hoofdtabel de opzoektabel voor is. |
Als u de waarde van een tabelveld op wilt zoeken uit een opzoektabel, dan kunt u dit in de tabelontwerpweergave direct opgeven bij het tabblad Opzoeken. In de Rijbron geeft u aan welke velden u wilt tonen in de keuzelijst van dit veld. Access kan u met een Wizard helpen om deze rijbron samen te stellen, klik op de ... rechts van de regel Rijbron.

| Maak in de hoofdtabel van de velden die afhankelijk zijn van een opzoektabel de rijbrongegevens aan. Gebruik hiervoor desgewenst de Wizard. U kunt dit ook later doen, maar het is aan te raden om de Opzoekgegevens in te stellen vóórdat u formulieren gaat maken op basis van deze tabellen. Access maakt dan namelijk automatisch de juiste keuzelijsten in uw formulier aan. |
Hiervoor hebt u de Een-op-veel relaties in AdresMenu gezien. AdresMenu heeft echter ook een Veel-op-veel relatie, namelijk tussen de tabel tblNaam en de tabel tblGroep. Een naam kan in meerdere groepen voorkomen, maar omgekeerd kan een groep ook bij meerdere namen voorkomen. In een database zoals in Access kunt u niet rechtstreeks een veel-op-veel relatie aangeven, u moet hiervoor een tussentabel gebruiken. Een tussentabel bevat de sleutelvelden van beide tabellen, eventueel aangevuld met een of meer velden die iets zeggen over deze relatie.

U ziet hier dat de tabel tblNaam_Groep twee velden als sleutelvelden heeft. In het tabelontwerp geeft u dit aan door beide velden te selecteren (houdt de Control-toets ingedrukt en klik in de linkermarge van beide velden) en dan op het Sleuteltje te klikken.

Omdat beide velden samen de sleutel vormen van de tabel tblNaam_Groep, kan elke combinatie tussen een Naam en een Groep slechts één keer voorkomen. Als u wilt dat zo'n combinatie meerdere keren mag voorkomen (bijvoorbeeld wanneer iemand zich twee keer in een groep mag aanmelden, met twee verschillende datums of kenmerken), maak dan een extra ID-veld aan in de tabel tblNaam_Groep van het type Autonummering en maak alleen dat veld het sleutelveld van de tabel.

Bij een Veel-op-veel relatie kunt u wél instellen dat Gerelateerde records trapsgewijs verwijdert moeten worden. Immers, als een Naam verwijdert wordt, dan wilt u ook de relaties met de Groepen waar die naam in voorkomt verwijderen.

| Zoek de veel-op-veel relaties op in uw programma en maak de tussentabellen en hoofdtabellen voor deze relaties aan. Bepaal wat de sleutel van de tussentabel moet worden. | |
| Leg de relaties tussen de tabellen en stel de referentiële integriteit in. | |
| Laat alles een dagje liggen, voordat u verder gaat en kijk dan nog eens goed naar uw opzet. Een goed databaseontwerp levert u straks heel veel tijdwinst op. |
Lees verder bij:
| Opbouw AdresMenu - Query's | |
| Opbouw AdresMenu - Formulieren | |
| Zie voor meer informatie over tabellen en het databaseontwerp: Access - Tabellen en databaseontwerp |