Belangrijke punten

Een databank moet logisch en simpel zijn maar niet gecompliceerd.
In het algemeen gebruiken we formulieren om data toe te voegen, deze data wordt dan opgeslagen in de tabellen welke op hun beurt weer een relatie hebben met elkaar. Door het gebruik van Query’s kunnen we dan specifieke informatie uit deze tabellen halen. Deze Query’s gebruiken we dan in het aanmaken van rapporten.

Het maken van een nieuwe Databank

Een nieuwe Databank is simpel een nieuwe georganiseerde container die elke tabel, formulier, rapport, query, macro en module bijhoudt.
Klik op de knop Bestand (File) – Nieuw (New)
Dit zal het takenvenster (TaskPane) openen
Hier kiezen we “Lege Databank” (Blank Database)

les02_image01

Er verschijnt een dialoogvenster waarin je de naam voor de nieuwe database kunt ingeven en de plaats waar je deze wil opslagen kunt kiezen.

les02_image02

Geef een naam in en kies de map waar je de databank wil opslagen
en klik op Maken (Create)

De Kaartenbak of “Flat File”

les02_image03

Voor vele types van gegevensbestanden of lijsten, zou de structuur die hierboven wordt getoond wel werken.

Dit is een typisch voorbeeld van een “1 aan 1” (one to one) relatie, wat hiermee wordt bedoelt is dat je slechts één stuk van informatie registreert (zoals Voornaam, Familienaam etc.) voor 1 gegeven, in dit geval de klant.

Maar wat zou er nou gebeuren mocht een klant nu meerdere bestellingen plaatsen of mocht ie meerdere artikelen bestellen, dan moeten we voor elke bestelling of voor elk artikel een nieuwe kolom toevoegen. Niet erg praktisch.

Willen we dus onze klanten koppelen aan al hun aankopen is een “1 aan meerdere” (one to many) relatie de oplossing.
En zo komen we tot onze relationele databank.

Conclusie: Voor een simpele kaartenbak hebben we Access niet nodig, dit kunnen we ook met Excel. (zie afbeelding hierboven)

Het relationele model voor data opslag

Het relationeel model voor data opslag staat ons toe om makkelijker en effectiever een complex concept te maken zoals bvb “Verkoop
Het relationeel model voor data opslag elimineert overtollige data, wat dan resulteert in een kleinere en vluggere databank.

Wanneer we een relationele databank ontwerpen is het goed eerst eens alle gegevens die we nodig hebben van de verschillende tabellen en hun relatie op papier te zetten.

les02_image04

Vervolgens maken we een paar tekeningen van de tabellen met hun velden en hun informatie.

les02_image05

Eénmaal we een ruw idee hebben over welke tabellen en welke gegevens onze tabellen moeten hebben, moeten we er ons van verzekeren dat elke tabel een “primary key” heeft.
Een “primary key” is een kolom (of een combinatie van kolommen) dat een unieke waarde geeft aan elke rij in die kolom.

Een voorbeeld: je hebt 2 personen met dezelfde naam bvb Peter De Smet, toch moeten we een onderscheid kunnen maken tussen deze twee personen.
Daarvoor voegen we een kolom met een primary key toe aan elke tabel (vb. klantenID, verkoopID, artikelID).

les02_image06

De primary key is heel belangrijk in relationele databank want het is door die primary key dat we relaties kunnen leggen tussen de verschillende tabellen.
Bijvoorbeeld, neem de verhouding tussen klanten tabel en verkoop tabel, je kan één klant hebben met verschillende bestellingen, dus moeten deze tabellen een “1 aan meerdere” (one to many) relatie hebben.
Dit is de meest voor de hand liggende relatie tussen tabellen.

Wat we vervolgens moeten doen is een oplossing vinden om de “many” tabel te verbinden met de “one” tabel.
m.a.w. we moeten tonen hoe elk gegeven van de verkoop tabel verwant is met de klanten tabel.
Om de tabellen te verbinden met elkaar moeten ze dus over een gedeelde of gemeenschappelijk veld beschikken. Dit moet dus een veld zijn met dezelfde gegevens in beide tabellen.
In dit voorbeeld proberen we dus elke verkoop toe te wijzen aan een klant.
Om dit te doen moeten we een veld toevoegen aan de verkoop tabel dat overeenkomt met een veld in de klanten tabel.Welk veld zouden we toevoegen?
Het antwoord is het “primary key” veld.

Herinner je dat elk “primary key” veld uniek is, om dit te kunnen identificeren in een tabel.
Zo kunnen we een veld toevoegen aan de verkoop tabel dat verwijst naar de waarde van klantenID in de klanten tabel.

Als we dus in de toekomst een verkoop record invoegen moeten we enkel het klantenID invoegen van de klant aan wie de verkoop was verwezenlijkt. (de eerste keer dat we overtollige data verminderen).
Het begint nu duidelijk te worden dat we enkel voordeel halen met een relationele databank.
We moeten de informatie over een klant slechts éénmaal ingeven door hun een uniek klantenID toe te wijzen.

Als we dus een verkoop ingeven voor de klant in de verkooptabel moeten we enkel refereren naar het desbetreffende klantenID van dat verkooprecord, om te kunnen identificeren wie de aankoop heeft gedaan.
Dit vereist dus dat we heel wat minder informatie moeten ingeven, wat dan weer resulteert in een kleinere en snellere databank in vergelijk met onze kaartenbak of “flat file“.
Het is belangrijk dat we het klantenID veld dat we toevoegen aan onze verkooptabel geen “primary key” is. Deze tabel had reeds een “primary key“, het verkoopID-veld, welke uniek, elke verkoop identificeert.
Technisch, noemen wij het veld in de “many” tabel die tot een verwijzing naar de “primaire key” in de “one” tabel leid, een “foreign key“.
Het enige doel is de twee lijsten met elkaar te verbinden, de waarden binnen een “foreign key” zijn bijna altijd niet uniek.

Maak je nog niet ongerust hoe we juist de gegevens ingeven, hoe tabellen te verbinden met elkaar of hoe we “primary key’s” ingeven, hier komen we later nog op terug.
Voor nu, probeer om het concept en het redeneren achter het relationele databankontwerp te begrijpen.
Kijk even naar onderstaand diagram om te zien hoe het is gewijzigd met de onlangs gemaakte verbindingen tussen klanten en verkoop.

les02_image07

Nu keren we even terug en onderzoeken hoe we de andere relaties tussen de tabellen kunnen bereiken.

Bijvoorbeeld, wat is de verband tussen Klanten en Artikelen.
Elke tabel moet niet rechtstreeks verbonden zijn met elkaar, de enige weg dat Klanten en Artikelen met elkaar verbonden zijn is als een klant een artikel aankoopt.
Hoewel, in een relationele databank, zolang elke tabel wordt verbonden op de aangewezen manier met de correcte tabel, kunnen we uitvinden hoe ze verwant zijn en waardoor zij worden verbonden.

Samenvattend: de klanten zijn verbonden met de artikelen maar enkel door de verkoop.
Zo hoe is de verkoop dan verbonden met de artikelen?

Wel, voor elke verkoop kunnen er meerdere artikelen zijn, ook kan één artikel meerdere keren voorkomen op één verkoop.
In een relationele databank mag je (of zou je ) niet, een “meer aan meer” (many to many) relatie mogen maken.

Dat zou van een strikt logisch standpunt geen steek houden.
We moeten kunnen zien welke artikelen op welk order zijn besteld terwijl we de ingegeven gegevens tot een minimum herleiden.

Ook zien we een volgend probleem opduiken:
het Aantal veld is geplaatst in de tabel Verkoop.
Hoe kunnen wij de prijs van het artikel op het tijdstip van verkoop registreren?
Wat als de prijs in de toekomst verandert?
Is “Prijs”een attribuut van de tabel Artikel?

Wat we zien is dat wij een link moeten kunnen maken tussen de unieke verkooprecords met de unieke artikelen die zijn besteld bij die verkoop.
Hiervoor hebben we een VerkoopDetail tabel nodig.
Maar wat plaatsen wij in de VerkoopDetail tabel?

Het antwoord is, om het even wat dat een aspect is van de “veel” kant van de verkoop transactie.
Bijvoorbeeld,
het “Verkoopdatum” veld in de “Verkoop” tabel kan blijven, aangezien elke verkoop slechts één maal gebeurt.

Het aantal van de artikelen die zijn aangekocht op de verkoopdatum is eigenlijk een “veel” aspect van de verkoop, en zou moeten worden verplaatst naar de nieuwe tabel “VerkoopDetail” samen met het “Aantal” veld.

Het klantenID veld mag blijven in de Verkooptabel, omdat elke aankoop slechts gebeurd door één klant.
Laat ons eens kijken hoe de nieuwe tabel “VerkoopDetail” ons diagram beïnvloed:

les02_image08

We moeten er ook aan denken om onze nieuwe tabel “VerkoopDetail” een “primary key” te geven.
Maar voor we dit doen gaan we eens zien hoe we de relatie tussen de Verkoop tabel en de VerkoopDertail tabel moeten leggen.

De lijsten zijn verwant in die zin dat elke verkoop één of meerdere artikelen in elke verkoop kan hebben.
Zo, we willen dus elk record in de “VerkoopDetail” verbinden met het “Verkoop” record waaraan het beantwoord.

Om dit te doen maken we een “foreign key” in de VerkoopDetail tabel die verbonden is met een “primary key” in de Verkoop tabel.

Wij voegen dus het verkoopID veld toe aan de VerkoopDetails tabel.
Wat is het verband tussen “Verkoop” tabel en de “VerkoopDetail” tabel?

Voor elk artikel besteld in een transactie in de “VerkoopDetail” tabel, moet het een verwijzing maken in de “Artikel” tabel naar een uniek artikel.

Dus willen we ook een “foreign key” van “ArtikelID” aanmaken in de tabel “VerkoopDetail“.
Dan pas kunnen we een verbinding maken tussen hun gemeenschappelijke velden.

Laat ons eens kijken hoe de diagrammen er uitzien na deze twee wijzigingen:

les02_image09

Nu we de nodige relaties tussen de tabellen hebben aangebracht, moeten we nog een “primary key” aanmaken in de “VerkoopDetail” tabel.
We zouden een extra veld kunnen toevoegen, bvb. VerkoopDetailID, maar we kunnen ook kijken of er geen combinatie is van velden die een unieke waarde geven.
En, wie had dat verwacht 😉 , er is er één : de combinatie van VerkoopID en ArtikelID. Er zouden nooit twee dezelfde waarden kunnen voorkomen in deze twee kolommen.
Als dit toch het geval zou zijn, zou dit betekenen dat hetzelfde artikel op hetzelfde order tweemaal zou voorkomen. Mocht dit zo zijn zou er een twee moeten staan in het veld “Aantal” en geen twee keer dezelfde waarde.

Laat ons nog ’s kijken naar ons diagram:

les02_image10

Tips voor het maken van relationele databanken

Er zijn geen regels om relationele databanken aan te maken, maar hier vind je wel een paar tips:

  1. bekijk alle informatie die je wil gebruiken bij het opslaan van de gegevens in je databank.
  2. denk na wat de databank nodig heeft aan rapporten en formulieren en voor wie.
  3. bij de aanmaak van je databank begin met een model zoals hierboven beschreven met de verschillende relaties, dit is heel handig om de structuur van je databank te bepalen.
  4. het is ook belangrijk te weten hoe gegevens in je databank op te slaan onafhankelijk is hoe de gebruikers de gegevens opslaan in tabellen via formulieren. Eénmaal we meer leren van formulieren wordt dit duidelijk

Bij het maken van een model kan je beginnen met een lijstje op te maken van de tabellen samen met hun eigenschappen en velden die je nodig hebt. Je kan het ook makkelijker vinden om eerst de velden te noteren en dan uit te zoeken welk veld bij welke tabel hoort.

Eénmaal dat is verwezenlijkt, kunnen we de velden in de tabellen plaatsen en kunnen we een “primary key” toekennen. Daarna kunnen we de relaties vastleggen tussen de tabellen.

Het maken van een relationele databank tabellen

Na al die theorie wordt het tijd dat we overgaan naar de praktijk.
We openen dus Access en maken een nieuwe databank aan we klikken dus op de knop

Nieuw (New) les02_image11  en kiezen “Lege Databank” (Blank Database) rechts in het takenvenster.
We kiezen Verkoop als naam voor onze databank.

Het eerste wat we doen is een tabel aanmaken van onze klanten.

  • Dubbelklik op “Tabel maken in ontwerpweergave” (Create table in Design View)

les02_image12

Of je kan ook op de knop Nieuw (new) drukken in de werkbalk.
Let er wel op dat je in het objectenpaneel Tabellen (Tables) hebt gekozen

les02_image13

Dit zal het Nieuwe Tabel (New table) dialoog venster openen.
We kiezen voor Ontwerp Weergave (Design View) en klikken op OK

les02_image14

Dit brengt ons in het venster “Ontwerp Weergave” (Design View) van onze tabel.
Van zodra we een veldnaam hebben ingegeven zien we dat ons venster bestaat uit twee delen:

  • Gegevensbladweergave (design grid)
  • Ontwerpweergave (field properties)

les02_image15

In het bovenste gedeelte geven we alle velden in + data type, die we nodig hebben in onze tabel.
In het onderste gedeelte geven we de eigenschappen voor dat veld in.

Links in het bovenste gedeelte van ons topvenster zie je ook een grijs pijltje
Dit is de rijselector. Wanneer je hierop klikt selecteer je een hele rij. Je zult dit meermaals moeten gebruiken dus raak ermee vertrouwd.

les02_image16

De Veld Naam (Field Name) kolom is waar we de namen typen voor onze velden in de nieuwe tabel.
De namen die je ingeeft mogen slechts één keer voorkomen in de tabel, m.a.w. deze moeten uniek zijn.

Mocht je later van plan zijn VBA code te schrijven (in een module) voor deze databank, kan je ook geen gebruik maken van spaties in de naam.

De volgorde die je gebruikt om veldnamen toe te voegen zal de volgorde zijn van links naar rechts in de datasheet view.

les02_image17

Na het toekennen van een veldnaam moeten we ook het Data type voor dit veld toewijzen.
De standaard waarde is steeds “Text”, maar we hebben nog meer mogelijkheden:
text, number, date/time, currency, etc….
Hieronder vindt je de verschillende data types en hun omschrijving:

Naam Omschrijving
Text Bevat tekst, of een combinatie van tekst, nummers, en andere informatie. De maximum lengte is 255 karakters
Memo Een langere versie van een tekstveld. De maximum lengte is 65..535 karakters
Number Kan enkel numerieke data bevatten waar je bewerkingen mee wil toepassen. GEEN telefoonnummers of postcodes.
Date/time Bevat een datum of tijd. Nuttig voor Date/Time bewerkingen.
Currency Gelijkaardig aan de Number data type, maar wordt geformatteerd als munteenheid.
AutoNumber Wijst een uniek nummer toe aan alle records in de tabel. (nuttig als primary key veld.
Yes/No Slaat logische gegevens op als “Yes/No” of “True/False” of “On/Off”.
Wordt gebruikt wanneer er slechts twee mogelijke waarden op een veld kunnen bestaan
OLE Object Verbindt een gebied met een andere toepassing van Windows. U kunt OLE Object- gegevenstypes gebruiken voor extra grafieken, kalenders, of video/audiodossiers.
Hyperlink Bevat een hyperlink adres op het WWW
Lookup Begeleid je met het opzetten van een opzoeklijst veld, wat waarden kan bevatten van een andere tabel of query. Handig voor comboboxen en listboxen.

Het onderste gedeelte is de “Ontwerpweergave” (field properties) sectie.
Het bestaat uit twee tabs “Algemeen” en “Opzoeken” (General en Lookup) Hier bepalen we de eigenschappen van het veld.
We zullen dit in detail bekijken in een latere les.

Een Primary Key aanmaken in een tabel

In Access moeten we aan elke tabel een Primary Key toewijzen. Een primary key is simpelweg een veld of groep van velden dat handelt als een uniek herkenningsteken voor elk record in de tabel.

De voordelen van het toekennen van een Primary key zullen meer en meer duidelijk worden wanneer we Access meer en meer gebruiken.

Je zal zien dat wanneer je een Primary Key toekent aan een tabel, deze automatisch zal sorteren op deze.

Omdat de Primary Key een unieke waarde geeft aan je record kunnen we nooit twee identieke records in onze databank hebben.

Je kan een Primary Key aan een veld toekennen door het veld te selecteren en op de knop Primary Key te drukken.

les02_image18

je ziet nu een afbeelding van een sleuteltje staan links van het veld klantID, dit is een aanwijzing dat we de primary key hebben toegewezen aan dat veld.

Wensen we de primary key te verwijderen, dan selecteren we terug eerst het hele veld en klikken nogmaals op de knop Primary key.

Wens je meerdere primary key’s toe te wijzen, hou je de Ctrl knop van je toetsenbord ingedrukt, selecteer je de velden en klik op de primary key knop.

Formidabel U hebt Les 2 voltooid START VOLGENDE LES