Académique Documents
Professionnel Documents
Culture Documents
Databaseontwikkeling 4
Access 2007
Ben Groenendijk
Alle rechten voorbehouden. Alle auteursrechten en databankrechten ten aanzien van deze uitgave worden uitdrukkelijk
voorbehouden. Deze rechten berusten bij Sdu Uitgevers bv.
Behoudens de in of krachtens de Auteurswet 1912 gestelde
uitzonderingen, mag niets uit deze uitgave worden verveelvoudigd, opgeslagen in een geautomatiseerd gegevensbestand
of openbaar gemaakt in enige vorm of op enige wijze, hetzij
elektronisch, mechanisch, door fotokopien, opnamen of enige
andere manier, zonder voorafgaande schriftelijke toestemming
van de uitgever.
Voorzover het maken van reprograsche verveelvoudigingen uit deze uitgave is toegestaan op grond van artikel 16 h
Auteurswet 1912, dient men de daarvoor wettelijk verschuldigde vergoedingen te voldoen aan de Stichting Reprorecht
(postbus 3051, 2130 KB Hoofddorp, www.reprorecht.nl).
Voor het overnemen van gedeelte(n) uit deze uitgave in
bloemlezingen, readers en andere compilatiewerken (artikel
16 Auteurswet 1912) dient men zich te wenden tot de Stichting
PRO (Stichting Publicatie- en Reproductierechten Organisatie,
Postbus 3060, 2130 KB Hoofddorp, www.cedar.nl/pro). Voor
het overnemen van een gedeelte van deze uitgave ten behoeve
van commercile doeleinden dient men zich te wenden tot de
uitgever.
Hoewel aan de totstandkoming van deze uitgave de uiterste zorg is besteed, kan voor de afwezigheid van eventuele
(druk)fouten en onvolledigheden niet worden ingestaan en
aanvaarden de auteur(s), redacteur(en) en uitgever deswege
geen aansprakelijkheid voor de gevolgen van eventueel voorkomende fouten en onvolledigheden.
All rights reserved. No part of this publication may be reproduced, stored in a retrieval system, or transmitted in any form
or by any means, electronic, mechanical, photocopying, recording or otherwise, without the publishers prior consent.
While every effort has been made to ensure the reliability of
the information presented in this publication, Sdu Uitgevers
neither guarantees the accuracy of the data contained herein
nor accepts responsibility for errors or omissions or their consequences.
Woord vooraf
vi
Het is niet noodzakelijk eerst het deel Informatieanalyse te behandelen alvorens over te gaan op het deel gegevensanalyse en eventueel te besluiten met SQL. De delen staan los van elkaar en kunnen
dus in willekeurige volgorde naast of na elkaar gebruikt worden.
Uiteraard moet er bij dit boek gewerkt kunnen worden met Microsoft Access versie 2007 in de Nederlandse versie. De bij dit boek
behorende databases kunnen gedownload worden via de pagina bij
dit boek op www.academicservice.nl. Van elk hoofdstuk zijn de
uitwerkingen van de opgaven ook bij deze bestanden te vinden.
Bij dit boek is een docentenhandleiding beschikbaar. Hierin is per
hoofdstuk toegelicht op welke wijze het betreffende hoofdstuk zou
kunnen worden behandeld. Verder wordt bij de in het boek opgenomen vragen extra toelichting gegeven. U kunt de docentenhandleiding aanvragen via het e-mailadres: accountmanagement@sdu.nl.
Daarnaast zijn van de hoofdstukken 3 en 4 (normaliseren) de opgaven en voorbeelden als PowerPoint presentaties beschikbaar.
Bovendien zijn er cases om de deelnemers extra te laten oefenen
met het opzetten, inrichten en gebruiken van databases. Een voorbeeld van een uitgewerkte case is te vinden in bijlage C.
De eerste twee serie cases richt zich met name op de eerste zeven
hoofdstukken van het boek, dus normaliseren, eenvoudige bewerkingen in Access en het werken met rapporten en formulieren.
De derde serie cases richt zich op het werken met SQL. Daarbij is
ook een vrij grote database beschikbaar.
Iedere serie cases bestaat uit 18 verschillende opgaven. De opgaven
zijn in Word-formaat beschikbaar en dus eventueel nog aan te passen aan uw eigen wensen. De cases worden bij de docentenhandleiding meegestuurd. Vragen of opmerkingen over dit boek zijn
welkom. Stuur deze aan b.j.groenendijk@hro.nl.
Ben Groenendijk
februari 2010
vii
Inhoud
Inleiding
xi
1
1.1
1.2
1.3
1.4
1.5
Gegevens en betrouwbaarheid
Gegevens en informatie
Integriteit
Consistentie en redundantie
Klassieke en moderne wijze van gegevensopslag
Samenvatting
1
1
2
4
6
10
2
2.1
2.2
2.3
Relationele databases
Databasemanagementsysteem
Relationele databases
Samenvatting
13
13
16
21
3
3.1
3.2
3.3
3.4
3.5
3.6
3.7
Normaliseren, inleiding
Stap 1, de nulde normaalvorm
Stap 2, de eerste normaalvorm
Stap 3, de tweede normaalvorm
Stap 4, de derde normaalvorm
Terminologie
Entiteit Relatie Diagram (ER-Diagram)
Samenvatting
23
23
28
31
33
37
38
43
4
4.1
4.2
4.3
4.4
4.5
4.6
Normaliseren, verdieping
Dubbele (geneste) repeterende groepen
Dubbele (opeenvolgende) repeterende groepen
Opmerkingen met betrekking tot normaliseren
Integreren
Datadictionary
Samenvatting
49
49
58
61
63
66
69
5
5.1
5.2
5.3
5.4
75
75
76
77
84
viii
5.5
5.6
5.7
5.8
5.9
Records manipuleren
Met meerdere tabellen tegelijkertijd werken
Gegevens selecteren en manipuleren
Rapporten
Formulieren
89
96
102
137
151
6
6.1
6.2
6.3
6.4
6.5
6.6
6.7
Uitgebreide formulieren
Keuzemogelijkheden
Bijlagen
Keuzelijsten
Hoofd- en subformulieren
Tabbladen
Opdrachtknoppen
Draaitabellen/Draaigraeken
161
161
168
173
184
193
199
205
7
7.1
7.2
7.3
7.4
Uitgebreide rapporten
Rapport zonder duplicaten
Rapport met groepen
Rapport met meerdere groepen
Rapport met veel rekenvelden
221
221
227
239
247
8
8.1
8.2
8.3
Macros
Een eenvoudige macro
Een eenvoudige ingesloten macro
Geavanceerde macros
259
260
266
270
9
9.1
9.2
9.3
9.4
9.5
287
288
292
294
316
330
10
10.1
10.2
10.3
10.4
343
343
344
345
346
ix
Inhoud
347
347
353
356
360
362
365
371
382
385
Veldeigenschappen
389
Opties
405
421
Index
441
Inleiding
Datases zijn in het dagelijkse leven niet meer weg te denken. Van
een afgestudeerde op MBO-niveau mag worden verwacht dat hij/
zij kennis van en inzicht in databases heeft. Naast de theoretische
kennis dienen er ook praktische vaardigheden aanwezig te zijn.
Dit boek beoogt de kennis van en vaardigheden met databases aan
te reiken. Dat gebeurt door stapsgewijs in te gaan op het totale proces van het (op papier) ontwerpen van een database tot het gebruik
van de database (in Microsoft Access) om de benodigde informatie
te genereren.
Allereerst zal het ontwerpen van databases ter sprake komen.
Hierbij wordt de techniek van het normaliseren gehanteerd.
Uitgaande van een informatiebehoefte zal via het normalisatieproces de informatiestructuur bepaald worden. Deze structuur
wordt vervolgens grasch weergegeven door middel van een
Entiteit Relatie Diagram. Hierbij geldt dat hoofdstuk 3 de basis legt
en hoofdstuk 4 een verdieping aanbrengt. Hierna wordt besproken
hoe een gevonden gegevensstructuur kan worden omgezet in een
database, gebruikmakend van het programma Access. De database
wordt gebouwd, gevuld en ten slotte gebruikt voor het opvragen
van informatie.
De volgende stap die wordt gezet, is die waarbij de wijze van gegevens opvragen steeds meer geautomatiseerd zal worden. Er zullen
formulieren, rapporten en macros worden ontworpen en gebruikt.
xii
De ontworpen rapporten, formulieren en macros worden vervolgens gebruikt bij het opzetten van een applicatie. Bij het opzetten
van de applicatie zal niet worden geprogrammeerd in de zin van
het ouderwetse coderen. De applicatie wordt gebouwd door op
grasche wijze bouwstenen te selecteren, deze iets aan te passen
en vervolgens samen te voegen tot professioneel ogende applicaties.
Omdat databases algemeen toepasbaar zijn, wordt het boek afgesloten met een hoofdstuk waarin de standaard vraagtaal SQL
wordt behandeld. Deze taal wordt niet alleen door Access ondersteund, maar door vrijwel ieder databasemanagementpakket dat op
de markt te verkrijgen is. Enige kennis van deze taal is dus onontbeerlijk.
Gegevens en
betrouwbaarheid
1.1
Gegevens en informatie
gegevens
informatie
1.2
muteren
integriteit
Integriteit
1 Gegevens en betrouwbaarheid
Na een verhuizing ontvangen mensen nogal eens onduidelijke brieven zoals in de volgende brief:
Basketbalvereniging Dunky
Postbus 2050
3070 AB Rotterdam
M.C. den Hoed
Leiweg 12
2907 TV Capelle a/d IJssel
Geachte mevrouw Den Hoed,
Hierbij ontvangt u uw nieuwe teamgegevens en het trainingschema voor het
komende basketbalseizoen. Hieronder staan de gegevens zoals deze in ons
computersysteem liggen opgeslagen.
M.C. den Hoed
Larenstraat 26
2984 EK Ridderkerk
Team: dames 1
Training: maandag van 19.00-20.30, woensdag van 19.30-21.00
Indien er onvolledige of onjuiste gegevens zijn vermeld, kunt u telefonisch contact opnemen met de heer Verkerk (010 4830554).
1.3
Consistentie en redundantie
Levensverzekering
PolisNaam
nummer
Adres
Postcode Plaats
Polisbedrag Premie
6798316
R. Ederzeel
Hoofdweg 67
1067 RT
Amsterdam
191.000,00
6798317
T. de Vries
Steenstraat 34
1380 VB
Weesp
161.000,00
62,50
40,50
6798318
E. van der
Wouden
Nieuwendam 67 1621 AP
Hoorn
145.000,00
124,80
6798319
E.R. Spruyt
Ringweg 56
1200 GH
Hilversum
127.000,00
113,90
6798320
B.J.
Larenstraat 26
Groenendijk
2984 EK
Ridderkerk
168.000,00
48,50
Hypotheek
Hyponummer
Naam
33-812347
R. van Dam
Loefweg 56
3965 JJ
Houten
113.500,00
33-812348
T. de Vries
Steenstraat 34
1380 VB
Weesp
191.000,00
5,9
33-812349
R. Ederzeel
Hoofdweg 67
1067 RT
Amsterdam
113.500,00
5,8
33-812350
B.J.
Leiweg 12
Groenendijk
2907 TV
Capelle a/d
IJssel
127.000,00
6,0
33-812351
E. van der
Wouden
Nieuwendam 67 1621 AP
Hoorn
181.500,00
5,9
33-812352
R. van Dam
Loefweg 56
Houten
168.000,00
5,5
Adres
Postcode Plaats
3965 JJ
Hypotheek Rente
Bedrag
Perc.
6,1
1 Gegevens en betrouwbaarheid
Merk op dat niet iedereen die een hypotheek afsluit ook voorkomt
bij de levensverzekeringen. Men kan namelijk zon verzekering
al bij een andere maatschappij hebben. Daarnaast kan een levensverzekering afgesloten worden zonder een hypotheek. De gegevens
kunnen dus in die beide systemen in een andere volgorde voorkomen.
Als een hypotheek gelijktijdig met een levensverzekering wordt
afgesloten, komen in beide bestanden nieuwe vermeldingen. De
adresgegevens worden dan twee keer opgeslagen. Hierdoor kunnen
er problemen ontstaan, zoals in het voorbeeld van guur 1.1 bij
B.J. Groenendijk. Maar ook bij R. van Dam kunnen er problemen
ontstaan. R. van Dam heeft namelijk nog een vakantiewoning
waarop ook een hypotheek is afgesloten.
inconsistent
redundantie
Hypotheek
Levensverzekering
Inboedelverzekering
Opstalverzekering
Levensverzekering
Inboedelverzekering
Opstalverzekering
1.4
1 Gegevens en betrouwbaarheid
Figuur 1.3
Klant
Hypotheek
Hypotheek
Levensverzekering
Inboedelverzekering
Opstalverzekering
Levensverzekering
Inboedelverzekering
Opstalverzekering
Woning
converteren
1 Gegevens en betrouwbaarheid
Na enig onderzoek komt men tot de ontdekking dat men de applicaties van de andere afdelingen ook moet aanpassen aan de nieuwe
gegevensstructuur van het klantenbestand, ook al zijn ze niet geinteresseerd in de geboortedatum van een klant. In plaats van vijf
gegevens (klantnummer tot en met plaats) moeten in de nieuwe
situatie zes gegevens (klantnummer tot en met geboortedatum)
per klant verwerkt worden. Als een afdeling meer gegevens van
een klant nodig heeft, vergt dat grote aanpassingen aan de computerprogrammas voor alle andere afdelingen die van het klantenbestand gebruikmaken, ook al zijn ze in die nieuwe gegevens niet
genteresseerd.
database
De moderne manier van gegevensopslag voorziet in een oplossing van het hiervoor genoemde probleem. Die moderne manier
van gegevensopslag noemen we een database (gegevensbank).
De oude manier van gegevensopslag noemen we sindsdien klassieke bestandsorganisatie. Er zijn nog veel bedrijven en instellingen die gebruikmaken van die klassieke gegevensopslag. Het zijn
veelal bedrijven die in een vroeg stadium zijn gaan automatiseren,
zoals banken, nancile instellingen, belastingdienst en oliemaatschappijen. Dit wordt de wet van de remmende voorsprong
genoemd. Het millenniumprobleem kwam voor een groot deel op
rekening van die systemen. En daar werden wereldwijd miljarden
euros aan besteed. Het wil overigens niet zeggen dat die systemen
slecht zijn, ze voldoen uitstekend. Ze zijn echter kostbaar in het
onderhoud. Denk hierbij aan een enkele wijziging in de gegevensstructuur. Maar ook bij moderne systemen kunnen problemen
ontstaan als bijvoorbeeld twee bedrijven fuseren. Ook al hebben
10
1.5
Samenvatting
1 Gegevens en betrouwbaarheid
11
6. Bij voetbalvereniging HGS wordt de nancile administratie verzorgd door de penningmeester, de heer Van Vliet. De ledenadministratie wordt verzorgd door de heer Rietman. Hiervoor gebruiken
ze beiden hun priv-computer. In de ledenadministratie worden de
adresgegevens en elftalgegevens vastgelegd. De penningmeester
registreert op de computer de adresgegevens en de maandelijkse
betalingen.
a. Welke gegevens zijn redundant opgeslagen?
b. Geef twee voorbeelden waarbij inconsistentie kan ontstaan.
c. Welke afspraken moet de penningmeester maken met de ledenadministrateur om de gegevens betrouwbaar te houden?
7. Veel grote ondernemingen maken nog gebruik van de klassieke
bestandsorganisatie. Waarom is dat?
8. De afdeling Levensverzekering van de hypotheekmaatschappij
wenst voor vrouwen een korting toe te kennen op de maandelijkse
premie. Vrouwen blijken langer te leven dan mannen, waardoor
een korting op de premie mogelijk is. In de klantgegevens moet
hiervoor een nieuw item Geslacht worden toegevoegd, waarin men
Man of Vrouw kan invullen. Wat heeft dat voor gevolgen voor de
automatiseringsafdeling van de afdeling Levensverzekering en
voor de overige afdelingen die van het klantenbestand gebruikmaken?
Relationele databases
In dit hoofdstuk wordt uitgelegd wat een databasemanagementsysteem is. Ook wordt toegelicht wat een datamodel en een relationele database is, en verklaren we enkele begrippen uit de gegevensanalyse.
2.1
DBMS
Databasemanagementsysteem
Figuur 2.1
Hypotheek
Levensverzekering
Inboedelverzekering
Opstalverzekering
DBMS
Hypotheek
Levensverzekering
Klant
Woning
Inboedelverzekering
Opstalverzekering
14
conceptueel of
functioneel
view
databaseadministrator
2 Relationele database
15
Als nu de gegevensstructuur van een bestand aangepast moet worden, wordt dat doorgegeven aan de database-administrator. Stel dat
de afdeling Inboedelverzekeringen het telefoonnummer van een
klant wenst, dan wijzigt de database-administrator de gegevensstructuur van het klantenbestand door het telefoonnummer toe te
voegen. Nadat de database-administrator dat heeft gedaan, zal het
DBMS vragen om een bevestiging. Hierna wordt door het DBMS
de conversie van de gegevens die liggen opgeslagen automatisch
uitgevoerd (omzetten van de gegevens naar de nieuwe structuur,
zoals is uitgelegd in hoofdstuk 1). De computerprogrammas van
bijvoorbeeld de afdeling Hypotheken ondervinden hier geen enkele hinder van. Het enige dat zij zien van het klantenbestand is
klantnummer, naam, adres, postcode en plaats. Al zouden er nog
tien andere items van klanten zijn vastgelegd, zij weten dat niet,
waarom zouden ze het ook moeten weten?
autorisatie
We hebben al gezegd dat de view op de database wordt vastgelegd per afdeling. Het kan zelfs verder gaan. We kunnen zelfs per
persoon aangeven wat zijn view op de database is. Veel gegevens
zijn privacygevoelig, vertrouwelijke bedrijfsgegevens of volkomen
nutteloos op deze werkplek. Eigenlijk hoort een medewerker alleen
de beschikking te krijgen over voor hem relevante gegevens. De
medewerker heeft een autorisatie (of permissie) voor deze gegevens, oftewel toestemming om deze gegevens te gebruiken. Zo kan
bijvoorbeeld alleen de personeelsfunctionaris het salaris van een
werknemer zien en de andere personen die gebruikmaken van de
werknemergegevens niet. Vertegenwoordigers die in rayons werken, bijvoorbeeld provincies, zien alleen de klantgegevens uit hun
rayon. Een overzicht van alle klanten levert dan bijvoorbeeld alleen
maar klanten uit de provincie Utrecht.
Met autorisatie (permissie) kunnen we ook vastleggen dat een gebruiker de gegevens alleen mag raadplegen. Het toevoegen, wijzigen of verwijderen van gegevens is dan niet toegestaan. Natuurlijk
zijn alle variaties hierop mogelijk, zoals wel toevoegen van nieuwe
gegevens maar niet het verwijderen van gegevens.
Het DBMS kan nog meer taken uitvoeren, zoals back-ups maken en de database over meerdere computers verspreiden als dat
noodzakelijk is, bijvoorbeeld bij grote ondernemingen. Het DBMS
zorgt er ook voor dat twee personen niet tegelijkertijd hetzelfde
16
record-locking
2.2
Relationele databases
17
2 Relationele database
Figuur 2.2
Hypotheek
Hyponummer
Naam
Adres
Postcode Plaats
33-812347
R. van Dam
Loefweg 56
3965 JJ
Houten
113.500,00
33-812348
T. de Vries
Steenstraat 34
1380 VB
Weesp
91.000,00
5,9
33-812349
R. Ederzeel
Hoofdweg 67
1067 RT
Amsterdam
113.500,00
5,8
33-812350
B.J.
Groenendijk
Leiweg 12
2907 TV
Capelle a/d
IJssel
127.000,00
6,0
33-812351
E. van der
Wouden
Nieuwendam 67 1621 AP
Hoorn
181.500,00
5,9
33-812352
R. van Dam
Loefweg 56
Houten
68.000,00
5,5
3965 JJ
Hypotheek Rente
Bedrag
Perc.
6,1
Figuur 2.3
Levensverzekering
Polisnummer
Naam
Adres
Postcode Plaats
Polisbedrag Premie
6798316
R. Ederzeel
Hoofdweg 67
1067 RT
Amsterdam
90.000,00
62,50
6798317
T. de Vries
Steenstraat 34
1380 VB
Weesp
61.000,00
40,50
6798318
E. van der
Wouden
Nieuwendam 67 1621 AP
Hoorn
145.000,00
124,80
6798319
E.R. Spruyt
Ringweg 56
1200 GH
Hilversum
127.000,00
113,90
6798320
B.J.
Groenendijk
Larenstraat 26
2984 EK
Ridderkerk
68.000,00
48,50
18
Figuur 2.4
Klant
Klantnr
Naam
Adres
Postcode
Plaats
10001
T. de Vries
Steenstraat 34
1380 VB
Weesp
10002
R. Ederzeel
Hoofdweg 67
1067 RT
Amsterdam
10003
B.J. Groenendijk
Leiweg 12
2907 TV
10004
1621 AP
Hoorn
10005
E.R. Spruyt
Ringweg 56
1200 GH
Hilversum
10006
R. van Dam
Loefweg 56
3965 JJ
Houten
Hypotheek
Hyponummer
Hypotheek
Bedrag
Rente
Perc.
Klantnr
33-812347
113.500,00
6,1
10006
33-812348
91.000,00
5,9
10001
33-812349
113.500,00
5,8
10002
33-812350
127.000,00
6,0
10003
33-812351
181.500,00
5,9
10004
33-812352
68.000,00
5,5
10006
Polisbedrag
Premie
Klantnr
6798316
91.000,00
62,50
6798317
61.000,00
40,50
10001
6798318
145.000,00
124,80
10004
6798319
127.000,00
113,90
10005
6798320
68.000,00
48,50
10003
Levensverzekering
Polisnummer
10002
19
2 Relationele database
luidt: het klantnummer uit de tabel Klant is gelijk aan het klantnummer uit de tabel Hypotheek.
denitie database
Nu kunnen we ook de denitie van een database geven. Een database is een verzameling bij elkaar behorende tabellen inclusief hun
onderlinge relaties.
Als nu een hypotheek in de database wordt opgezocht, worden
automatisch de bijbehorende klantgegevens, via het klantnummer,
in de tabel klant opgezocht, zie guur 2.5.
Figuur 2.5
Hypotheek
Hyponummer Hypotheek
Bedrag
Rente
Perc.
Klantnr
33-812350
127.000,00
6,0
10003
Klantnr
Naam
Adres
Postcode
Plaats
10003
2907 TV
Klant
Maar het kan ook andersom. Als de heer R. van Dam belt voor
informatie over zijn hypotheek, worden de gegevens van de heer
R. van Dam in de computer opgezocht. Door de relatie met de
tabel Hypotheek kunnen die gegevens op het beeldscherm worden
getoond, zie guur 2.6.
Figuur 2.6
Klant
Klantnr
Naam
Adres
Postcode
Plaats
10006
R. van Dam
Loefweg 56
3965 JJ
Houten
Hyponummer Hypotheek
Bedrag
Rente
Perc.
Klantnr
33-812347
113.500,00
6,1
10006
33-812352
68.000,00
5,5
10006
Hypotheek
Tegen de heer Van Dam kan direct gezegd worden: Ik zie dat u
twee hypotheken bij ons hebt afgesloten. Wat kan ik voor u doen?
20
Door het klantnummer van Van Dam (nummeridenticatie) worden automatisch de bijbehorende klant- en hypotheekgegevens
gevonden.
informatiebehoefte
informatie-analyse
gegevensanalyse
2 Relationele database
front-end/
back-end
21
kunnen die database niet gebruiken als zij geen toegang hebben
tot de harde schijf van die computer. De grote databases worden
op de hoofdcomputer (server) in het netwerk geplaatst, waardoor
honderden personen van de gegevens in de database gebruik kunnen maken. Vaak is dit een ander databasepakket, zoals Oracle
of SQL-server. Omdat Access eenvoudig is in het gebruik, vooral
bij het maken van allerlei formulieren en rapporten, wordt Access
ook toegepast op pcs (clients) waarbij Access gebruikmaakt van
de Oracle-database of SQL-Server op de server. Access wordt dan
front-end software genoemd en Oracle of SQL-Server op de server
de back-end. Access wordt dan dus alleen gebruikt voor de in- en
uitvoer, niet voor de echte opslag. Dat doet de Oracle-database
of SQL-Server. Het front-end/back-end-principe wordt in grotere
organisaties voor hun databases veel toegepast. De combinatie van
gebruiksgemak aan de front-endkant en degelijkheid aan de backendkant is dan ook een heel aantrekkelijke.
Helaas vergeten vele gebruikers eerst de informatiebehoefte nauwkeurig te bepalen. Het normaliseren van de gegevens wordt dan
niet of slechts intutief uitgevoerd. Al snel na het werken met de
database zullen daardoor problemen ontstaan. Deze worden dan
met trucs, kunst- en vliegwerk opgelost. Uiteraard ontstaat hierdoor weer redundantie en inconsistentie aangezien de gegevens
niet goed geanalyseerd zijn, waardoor het datamodel niet correct
is. Men kan het beste Access spelenderwijs leren door gebruik te
maken van n of twee tabellen. Maar voor een bedrijfsmatige
aanpak dient men eerst de benodigde informatie te verzamelen, te
analyseren en vervolgens te normaliseren. Met het dan ontstane
conceptuele datamodel kunnen in Access de tabellen en relaties
worden gemaakt. Dat wordt ook wel het indelen / inrichten van
de database genoemd. Het op een juiste manier leren werken met
Access wordt vanaf hoofdstuk 5 uitgelegd.
2.3
Samenvatting
In dit hoofdstuk hebben we besproken dat een relationele database een verzameling tabellen is met hun onderlinge relaties. Om
de structuur van een database te ontwerpen moet eerst vastgelegd
worden wat de informatiebehoefte is. Hierin wordt bepaald wat
de gewenste uitvoer van het nieuwe computersysteem is. Die gegevens worden geanalyseerd om tot een datamodel te komen. Dit
ontworpen datamodel kan vervolgens toegepast worden in een
relationele database. Een database beschikt over een database-
22
managementsysteem (DBMS). Hiermee kunnen de tabellen worden gemaakt, de relaties worden gelegd, de tabellen gevuld worden, gegevens worden geraadpleegd, gemuteerd, enzovoort. Verder
kunnen met behulp van het DBMS rechten worden toegekend en
wordt de integriteit van de database bewaakt. De database wordt
beheerd door de database-administrator. Er zijn verschillende
databasepakketten, zoals Access, MySQL en Oracle. De Accessdatabase is ook te gebruiken aan de gebruikerskant (client) terwijl
de gegevens liggen opgeslagen in een grote database, zoals Oracle
(server). Access is dan de front-end- en Oracle de back-endkant.
Opgaven
1. Omschrijf in het kort de taak van het DBMS.
2. Wat wordt bedoeld met een conceptueel of functioneel datamodel?
3. De rma Innovision verkoopt computers via vertegenwoordigers.
Het is een modern bedrijf, alle gegevens liggen in een relationele
database opgeslagen. Per provincie is n vertegenwoordiger
actief. Als een vertegenwoordiger een afdruk laat maken van alle
klanten uit de database, worden alleen de klanten uit zijn provincie
afgedrukt. Hoe noemen we dit principe?
4. Wat wordt verstaan onder autorisatie?
5. Wat is de taak van de database-administrator?
6. Welke drie typen databases onderscheiden we?
7. Wat wordt bedoeld met informatie-analyse?
8. Wat is record-locking?
9. Reisorganisatie TravelCheap heeft n grote database (Oracle)
waarin alle reizen en boekingen worden opgeslagen. Bij een groot
aantal reisbureaus heeft men Access-software genstalleerd op de
lokale pcs, zodat direct reizen geboekt kunnen worden. Die boekingen worden door middel van datacommunicatie direct in de
Oracle-database verwerkt. De Access-database doet alleen dienst
als in- en uitvoermedium. Hoe wordt dit principe genoemd?
Normaliseren,
inleiding
normaliseren
Voor het bepalen van de indeling van de database bestaan verschillende technieken. Wij zullen gebruikmaken van de techniek van
het normaliseren, zoals die door de Amerikaan Edgar Codd in de
jaren zeventig is opgesteld. Normaliseren houdt in dat we in een
viertal stappen de gegevens uiteenrafelen en indelen in een beperkt
aantal, overzichtelijke tabellen. De stappen die we daarbij zullen
uitvoeren, zijn klein van omvang en daardoor goed te begrijpen en
toe te passen. Hierbij geldt echter wel: oefening baart kunst. Alleen
door veel en goed te oefenen kunnen we de kunst van het normaliseren in onze vingers krijgen.
3.1
24
25
3 Normaliseren, inleiding
van een of meer overzichten en ervoor zorgen dat de daarop aanwezige informatie kan worden verzorgd. Het door Paul gewenste
overzicht is afgebeeld in guur 3.1.
We nemen aan de hand van guur 3.1 de eerste stap om de gegevens uiteen te rafelen. We krijgen dan de zogenaamde nulde normaalvorm. We bepalen de nulde normaalvorm door alle elementaire, relevante gegevens te bepalen en op te schrijven.
Op ons overzicht staat een aantal verschillende gegevens.
Figuur 3.1
Titel
HomeTown Glory
Billie Jean
I Known You Love Me
Puzzle Me
Boom Boom Pow
Sweet Dreams
Etc
Artiest(en)
Adele
Michael Jackson
Pitbull
Ilse Delange
Black Eyes Peas
Beyonc
Etc
Soort
C CD
C CD
S Single
C CD
S Single
S Single
Etc
Terzijde
We zien op dit moment de naam DJ Paul als een constante. We
kunnen ons echter ook afvragen of dit systeem in de toekomst
ook door andere DJs gaat worden gebruikt. In dat geval kunnen we de naam natuurlijk niet als een constante opvatten. Houd
daarom bij alle afwegingen die je maakt tijdens het normaliseren
altijd rekening met mogelijke wensen en uitbreidingen die in de
toekomst een rol kunnen gaan spelen!
26
Vervolgens zien we een aantal gegevens die iedere keer zullen verschillen: de datum en de gegevens van de gedraaide muziek. Deze
gegevens moeten we natuurlijk wel opnemen in de database omdat
we ze anders kwijt zijn.
procesgegeven
elementaire gegevens
samengestelde
gegevens
kenmerk
Ten slotte zien we onder in het overzicht nog een totaal aantal
getoond. Dit totaal is af te leiden uit het overzicht door simpelweg
het aantal afgedrukte en dus gedraaide nummers te tellen. Als het
totaal niet onder in het overzicht zou staan afgedrukt, zouden we
het zelf op eenvoudige wijze even kunnen bepalen. Het totaal aantal kunnen we daarom ook weglaten uit de database. We noemen
het totaal aantal een procesgegeven. We kunnen het gegeven namelijk bepalen door een rekenproces, in dit voorbeeld tellen van de
regels, te laten uitvoeren. Procesgegevens nemen we nooit op in de
database.
Wat we overhouden aan relevante gegevens bestaat uit: datum,
code, titel, artiest en soort. De aanduiding soort is echter niet
elementair. Met de aanduiding soort bedoelen we twee gegevens,
te weten een soortcode (bijvoorbeeld S) en een soortomschrijving
(bijvoorbeeld Single). We moeten de aanduiding soort daarom
splitsen in twee elementaire gegevens, te weten soortcode en
soortomschrijving. Dit splitsen moeten we altijd doen in het geval
dat we te maken hebben met samengestelde gegevens.
We houden nu dus over de elementaire gegevens: datum, code,
titel, artiest, soortcode en soortomschrijving. In plaats van de term
gegeven zullen we kenmerk (item, element, eigenschap) gebruiken,
zie ook paragraaf 3.5 Terminologie
Met de door ons gevonden kenmerken is iets speciaals aan de
hand. Het eerste kenmerk, de datum, komen we maar n keer tegen. De andere gegevens komen we meerdere keren tegen. Om dit
verschil duidelijk te maken noteren we onze gegevens daarom op
de volgende manier:
datum, RG (code, titel, artiest, soortcode, soortomschrijving)
repeterende groep
3 Normaliseren, inleiding
sleutelkenmerk
Het overzicht uit guur 3.1 is het overzicht van 17 juni 2010. Paul
beschikt echter voor iedere dag dat hij een programma heeft gepresenteerd over een dergelijk overzicht. Om uit de hele stapel
met alle overzichten precies het door ons getoonde overzicht te
pakken, moeten we weten van welke datum we iets willen weten.
De datum wijst in ons geval precies n overzicht aan. De datum
geeft ons toegang tot precies n overzicht. We noemen daarom de
datum ook wel het sleutelgegeven ofwel sleutelkenmerk. We geven
het sleutelkenmerk aan door dit te onderstrepen. We hebben nu
uiteindelijk de nulde normaalvorm gevonden. We noteren dit op de
volgende manier:
0 NV
identity integrity
27
Bij het begrip sleutelkenmerk kunnen we nog het volgende opmerken. Allereerst zal een sleutelkenmerk altijd een waarde moeten
hebben. Stel namelijk dat in onze stapel met overzichten er een
drietal zit waarop de datum niet staat vermeld. Hoe moeten we
dan n van deze overzichten aanwijzen? En bij welke uitzenddag
horen ze thuis?
Daarnaast moet een sleutelwaarde altijd uniek zijn, dit wordt met
een moeilijk woord identity integrity genoemd. Met andere woorden, er mogen in onze stapel geen twee overzichten voorkomen
met daarop dezelfde datum. In dat geval zouden we immers niet
weten welke van de twee de juiste is.
Vervolgens geldt dat een sleutelkenmerk altijd zo minimaal mogelijk moet zijn. Als de datum volstaat als sleutel, dan zal ook de
combinatie dagaanduiding met datum volstaan. We zouden dan de
sleutel datum + dag krijgen (bijvoorbeeld : 23-1-2010 + zaterdag).
Omdat we echter ook met een deel hiervan (datum) als sleutel kunnen werken, zijn we verplicht het overtollige deel, de dagaanduiding, weg te laten. We kunnen volstaan met alleen de datum omdat
bij iedere datum slechts n dagaanduiding hoort.
Verder is belangrijk dat de kenmerken die in aanmerking komen
als sleutelkenmerk gezocht moeten worden buiten de repeterende
groep. In ons voorbeeld is dat alleen het kenmerk datum. Er is dus
geen enkele andere optie.
Ten slotte merken we nog even op dat er soms sprake is van meerdere kenmerken die als sleutelkenmerk zouden kunnen fungeren.
28
kandidaatsleutels
3.2
29
3 Normaliseren, inleiding
Datum
Code
Titel
Artiest
Soortcode
Soortomschrijving
.
16-06-2010
17-06-2010
17-06-2010
17-06-2010
17-06-2010
17-06-2010
17-06-2010
.
18-06-2010
Etc
.
D5651
A2734
J7654
P9856
D4532
B7651
B3451
.
J7654
Etc
.
Outta Here
HomeTown Glory
Billie Jean
I Known You Love Me
Puzzle Me
Boom Boom Pow
Sweet Dreams
.
Billie Jean
Etc
.
Esme Denters
Adele
Michael Jackson
Pitbull
Ilse Delange
Black Eyes Peas
Beyonc
.
Michael Jackson
Etc
.
S
C
C
S
C
S
S
.
C
Etc
.
Single
CD
CD
Single
CD
Single
Single
.
CD
Etc
30
3 Normaliseren, inleiding
31
(datum)
(datum, code, titel, artiest, soortcode, soortomschrijving)
3.3
Zoals reeds gezegd heeft de door ons gevonden eerste normaalvorm nog steeds het nadeel dat dezelfde gegevens steeds opnieuw
worden opgeslagen. In de volgende stap, de stap naar de tweede
normaalvorm, zullen we dit nadeel grotendeels wegwerken.
Om te komen tot de tweede normaalvorm onderzoeken we in de
eerste normaalvorm of er kenmerken (gegevens) zijn die niet tot de
sleutel behoren (niet onderstreept) en die niet van de gehele sleutel
afhangen, maar slechts van een gedeelte van de sleutel. We zullen
deze moeilijk lijkende regel aan de hand van ons voorbeeld toelichten. We kijken alleen maar naar groepen in de eerste normaalvorm
waarbij de sleutel samengesteld is, dus uit meerdere kenmerken
bestaat. Als die groepen niet bestaan, er zijn alleen maar groepen
met een enkelvoudige sleutel, is de tweede normaalvorm precies
32
3 Normaliseren, inleiding
33
De nu gevonden groepen:
(code, titel, artiest, soortcode, soortomschrijving)
(datum, code)
vullen we ten slotte aan met de groepen die we in de eerste normaalvorm al hadden gevonden maar waar geen samengestelde
sleutel in aanwezig was.
We krijgen dan uiteindelijk de tweede normaalvorm, bestaande uit
drie groepen:
2 NV
3.4
We zijn op dit moment gevorderd tot en met de tweede normaalvorm. We nemen nu de laatste stap, het bepalen van de derde normaalvorm. De door ons gevonden tweede normaalvorm zag eruit
als:
2 NV
34
Er zit in deze tweede normaalvorm nog een vorm van overtolligheid (redundantie). Die heeft te maken met de kenmerken soortcode en soortomschrijving. Bij ieder nummer staan beide gegevens
opgenomen. Als we de gegevens van 1000 nummers op single
hebben, zal de combinatie S, Single dus 1000 keer zijn opgenomen.
Ook hier zouden we met n keer klaar moeten zijn. Wel bij iedere
single noteren dat het een single is (soortcode = S), maar slechts
n maal noteren dat de code S staat voor de omschrijving Single.
Door deze overtolligheid eruit te halen ontstaat de derde normaalvorm.
Het proces van de derde normaalvorm lijkt op het proces van de
tweede normaalvorm. We zoeken opnieuw naar afhankelijkheden
tussen kenmerken. In de tweede normaalvorm wordt gezocht naar
afhankelijkheden tussen sleutelkenmerken en niet-sleutelkenmerken (alleen bij gegevensgroepen met een samengestelde of
meervoudige sleutel). In de derde normaalvorm gaan we bij alle
gegevensgroepen uit de tweede normaalvorm zoeken naar afhankelijkheid tussen alle niet-sleutelkenmerken (niet-onderstreepte
kenmerken). De kenmerken die afhankelijk zijn, worden verwijderd uit de gegevensgroep en daarvan wordt een aparte gegevensgroep gemaakt. Het kenmerk waarvan ze afhankelijk zijn, wordt in
de nieuwe groep de sleutel. Deze moeilijke lijkende regel zullen we
aan de hand van ons voorbeeld toelichten.
Zoals bekend, we hadden al de volgende 2NV gevonden:
2 NV
3 Normaliseren, inleiding
35
voor artiest. Een artiest heeft meerdere titels en meerdere soortcodes en soortomschrijvingen. Titel, soortcode en soortomschrijving
zijn dus niet afhankelijk van artiest. Maar als je een soortcode
hebt, dan hoort daar altijd precies n soortomschrijving bij.
Soortomschrijving is daardoor afhankelijk van soortcode. Neem
de twee kenmerken daarom apart in een nieuwe groep:
(soortcode, soortomschrijving)
Daarbij geldt dat de soortcode het sleutelkenmerk zal worden:
vertel ons de code en wij vertellen u de omschrijving. Dus:
(soortcode, soortomschrijving)
In de originele groep laten we nu het afhankelijke niet-sleutelkenmerk(soortomschrijving) achterwege. We houden dan over:
(code, titel, artiest, soortcode)
Let erop dat het kenmerk dat sleutel is geworden in de nieuwe
groep, in de oorspronkelijke groep gewoon blijft bestaan!
Door de beide zojuist gevonden groepen aan te vullen met de andere, niet veranderde groepen uit de tweede normaalvorm, ontstaat
de volgende derde normaalvorm:
3 NV
(soortcode, soortomschrijving)
(code, titel, artiest, soortcode)
(datum, code)
(datum)
36
SOORT
TRACK
DRAAILIJST
DATUM
(soortcode, soortomschrijving)
(code, titel, artiest, soortcode)
(datum, code)
(datum)
SOORT
(soortcode, soortomschrijving)
TRACK
(code, titel, artiest, soortcode)
DRAAILIJST (datum, code)
Het komt vaker voor dat een van de gevonden groepen in de derde
normaalvorm mag worden weggelaten. Dit zijn dan altijd groepen
waarin alleen maar sleutelkenmerken voorkomen. De groepen
mogen alleen maar worden weggelaten als daardoor verder geen
informatie verloren gaat. Niet iedere groep die bestaat uit alleen
maar sleutelkenmerken mag dus worden weggelaten! Controleer
altijd terdege. De groep DRAAILIJST mag in ons voorbeeld niet
weggelaten worden omdat daar nu precies in staat welke nummers
op welke datum zijn gedraaid. Zonder deze groep zouden we
alleen maar de gegevens van de nummers hebben. En dan kunnen
we dus niet het door Paul gewenste overzicht maken.
3 Normaliseren, inleiding
37
Ten slotte willen we nog even opmerken dat het niet altijd zo is
dat er bij de stap van de ene naar de andere normaalvorm altijd
iets gedaan kan worden. Regelmatig blijken twee normaalvormen
gelijk aan elkaar te zijn. In dat geval zullen we gebruikmaken van
een verkorte notatiewijze. Als de derde normaalvorm gelijk blijkt
te zijn aan de tweede normaalvorm, noteren we bij de derde normaalvorm: 3NV = 2NV.
Maak opgave 3.4.
3.5
Terminologie
attribuut
attribuutwaarde
entiteit
entiteit-occurence
SOORT
(soortcode, soortomschrijving)
TRACK
(code, titel, artiest, soortcode)
DRAAILIJST (datum, code)
In plaats van kenmerken wordt in de literatuur gesproken over attributen. Zo staat in het bovenstaande voorbeeld onder andere het
attribuut titel vermeld. Een attribuut kan een bepaalde waarde
aannemen, de zogenaamde attribuutwaarde. Bij het attribuut titel
zou de attribuutwaarde Billie Jean kunnen optreden. De attributen zien we in het schema van guur 3.3 terug als kolommen.
Attributen beschrijven groepen, groepen die voor de gebruiker,
in ons geval Paul, betekenisvol zijn. In plaats van de term groep
gebruiken ze in de literatuur de term entiteit. In de voorgaande
derde normaalvorm komen we de entiteiten SOORT, TRACK en
DRAAILIJST tegen. De entiteit TRACK bevat dus de gegevens
van alle tracks die voor PAUL van belang zijn. Een afzonderlijke
track wordt wel een entiteit-occurence genoemd. Deze bevat dus
alle gegevens van n enkele track, de afzonderlijke rijen in het
schema van guur 3.3.
38
Figuur 3.3
Entiteit : TRACK
Attributen
Code
Titel
Artiest
Soortcode
A2734
HomeTown Glory
Adele
J7654
Billie Jean
Michael Jackson
P9856
..
Entiteit-occurences
Attribuutwaarden
3.6
SOORT
(soortcode, soortomschrijving)
TRACK
(code, titel, artiest, soortcode)
DRAAILIJST (datum, code)
39
3 Normaliseren, inleiding
DRAAILIJST
Datum
Code
16-06-2010 D5651
17-06-2010 A2734
17-06-2010 J7654
17-06-2010 P9856
17-06-2010 D4532
17-06-2010 B7651
17-06-2010 B3451
....
....
18-06-2010 J7654
....
....
TRACK
Code
Titel
Artiest
Soortcode
....
....
....
....
A2734
HomeTown Glory
Adele
A3212
B3451
Sweet Dreams
Beyonc
B7651
B7689
I Gotta Feeling
D5651
Outta Here
Esme Denters
D4532
Puzzle Me
Ilse Delange
J1987
Beat It
Michael Jackson
J7654
Billie Jean
Michael Jackson
P9856
....
....
....
SOORT
Soortcode
Soortomschrijving
Single
CD
S
....
40
Het bijzoeken van gegevens lukt natuurlijk alleen maar als de codes in DRAAILIJST ook voorkomen in TRACK. In dat geval zouden namelijk de titel en artiest er niet bijgezocht kunnen worden.
We kunnen dan ook onze draailijsten niet meer laten afdrukken.
Een probleem dus.
vreemde sleutel
referentile integriteit
41
3 Normaliseren, inleiding
Entity Relationship
Diagram
Figuur 3.5
TRACK
DRAAILIJST
o.b.v. code
SOORT
o.b.v. soortcode
42
3 Normaliseren, inleiding
43
3.7
Samenvatting
In dit hoofdstuk hebben we de eerste beginselen van het normaliseren geleerd. Daarbij rafelen we de ongestructureerde gegevens,
zoals die op een overzicht worden getoond, in een aantal stappen
uiteen tot een gestructureerd geheel. Daarbij maken we gebruik
van de techniek van het normaliseren.
Eerst stellen we de nulde normaalvorm op door alle elementaire
gegevens te noteren. Daarbij laten we alle vaste teksten (constanten) en procesgegevens achterwege. We bepalen de sleutel. Het
bepalen van de sleutel doen we ook bij iedere volgende stap.
Vervolgens bepalen we de eerste normaalvorm door de repeterende groep te verwijderen.
Hierna bepalen we de tweede normaalvorm. Daarbij nemen we alle
kenmerken apart die slechts van een deel van de sleutel afhangen
en niet van de gehele sleutel.
Ten slotte bepalen we de derde normaalvorm. Daarbij nemen we
alle kenmerken apart die helemaal niet van de sleutel afhangen,
maar die van een ander niet-sleutelkenmerk afhangen.
Nadat we derde normaalvorm hebben gevonden, gaan we na of er
misschien groepen zijn die weggelaten mogen worden zonder dat
we informatie verliezen. We hoeven hierbij alleen maar de groepen
te onderzoeken die uit alleen maar sleutelkenmerken bestaan.
De gegevensstructuur die we nu hebben gevonden, geven we
vervolgens grasch weer door middel van een Entiteit Relatie
Diagram (ER-Diagram). We laten daarbij de relatie tussen de
diverse gegevensgroepen zien. Deze relaties zijn gebaseerd op
vreemde sleutels. Een vreemde sleutel mag alleen maar waarden
aannemen die ook in de overeenkomstige andere groep voorkomen
(referentile integriteit).
44
44
Opgaven
3.1 Nulde normaalvorm
a. In de nulde normaalvorm mogen geen procesgegevens worden
opgenomen. Geef aan waarom dat is en gebruik in het antwoord
de termen efcint ruimtegebruik en consistentie.
b. In een bibliotheek zal men de afzonderlijke boeken moeten kunnen aanduiden. Hiertoe zullen zij een sleutelkenmerk hebben
gedenieerd. Zou men hiervoor het ISBN gebruiken? Verklaar
het antwoord.
c. Gegeven het overzicht uit guur 3.6. Stel hiervan de nulde normaalvorm op.
Figuur 3.6
Garage t Vuurtje
Populierendreef 3
4334 CE Middelburg
Uw dealer in de regio
Klant: 5775
J. Jansen
Kerstraat 45
4339 FT Middelburg
Kenteken
Datum APK
53-SN-DH
52-XK-HG
7 mei
23 oktober
45
45
3 Normaliseren, inleiding
Figuur 3.7
Artikelnr
233
358
168
Omschrijving
Aantal
Bedrag
3,00
25,00
12,95
10
1
2
30,00
25,00
25,90
Subtotaal:
Korting 10%:
Te voldoen:
80,90
8,09
72,81
Slof astronauten
1000 klapper
Sterrenregen
U ontvangt 10% korting tegen inlevering van deze bon uit de krant, of 5% korting indien uw
totaalbedrag meer dan 150,00 euro bedraagt.
Alle bedragen in euros, inclusief BTW.
Artikelnr
233
358
168
Omschrijving
Slof astronauten
1000 klapper
Sterrenregen
Aantal
Bedrag
3,00
25,00
12,95
10
1
2
30,00
25,00
25,90
Subtotaal:
Korting 10%:
Te voldoen:
80,90
8,09
72,81
U ontvangt 10% korting tegen inlevering van deze bon uit de krant, of 5% korting indien uw
totaalbedrag meer dan 150,00 euro bedraagt.
Alle bedragen in euros, inclusief BTW.
46
46
b. Wat is het wezenlijke verschil tussen de 1 NV zoals die bij opgave 3.3a is gegeven en zoals die hieronder staat afgedrukt?
1 NV (bestelnummer, naam klant)
(bestelnummer, artikelnr, omschrijving, prijs p/s, aantal,
kortings%)
3.4 Derde normaalvorm
a. Iemand heeft de volgende tweede normaalvorm gevonden. Deze
hoort bij een order die door een klant is geplaatst. Daarbij geldt
dat de korting, het percentage, alleen maar afhankelijk is van
het aantal dat men van n artikel koopt. Bij n stuk ontvangt
men 2% korting, bij twee stuks 3%, bij drie stuks 5%, enzovoort. Ten slotte geldt dat iedere klant een eigen uniek klantnummer heeft dat altijd voor hem gebruikt wordt.
2 NV (ordernummer, klantnummer, klantnaam)
(ordernummer, artikelnr, aantal, kortings%)
(artikelnr, omschrijving, prijs p/s)
Bepaal uitgaande van deze tweede normaalvorm de derde normaalvorm.
b. Een voetbalvereniging maakt gebruik van (onder andere) het
overzicht van guur 3.9. Een lid van de vereniging hoeft geen
commissiewerk te doen, maar mag het wel. Indien gewenst kan
hij (of zij) zelfs deel uitmaken van meerdere commissies.
Normaliseer het overzicht tot en met de derde normaalvorm.
Figuur 3.9
Commissie : BC Barcommissie
Lidnummer
Naam
Telefoon
34
L. Ketelaar
06-20898761
122
V. Borrelaar
06-23909871
307
M. Vervat
06-75413212
c. Het overzicht van guur 3.10 wordt bij een muziekschool gebruikt om bij te houden wie welk instrument bespeeld. Een lid
kan meerdere instrumenten bespelen. Normaliseer dit overzicht
tot en met de derde normaalvorm.
47
47
3 Normaliseren, inleiding
Figuur 3.10
Muziekschool: BeHappy
Instrument: TR Trompet
Categorie: 12 Blazers
Lidnr
Naam
Woonplaats
154321
S. Mahabier
Delft
276543
M. Ooijen
Pijnacker
254345
M. den Hoed
Rijswijk
etc.
Telefoonnr
06-10876711
06-11887765
06-12995486
(elftalcode, leidercode)
(leidercode, leidernaam, telefoonnummer)
(lidcode, lidnaam, lidadres, lidplaats, elftalcode)
48
48
o.b.v. werknemernummer
CHEF
AFDELING
o.b.v. chefnummer
Normaliseren,
verdieping
Dit hoofdstuk is een verdieping van de stof zoals die in hoofdstuk 3 is behandeld. In dit hoofdstuk gaan we moeilijker typen
overzichten normaliseren. Dit zijn overzichten waar meer dan
n repeterende groep in voorkomt. Er zijn twee manieren om die
overzichten te normaliseren. Die worden beide besproken. Daarna
wordt het integreren van gegevensgroepen toegelicht en het begrip
data-dictionary.
4.1
50
Figuur 4.1
Cijferoverzicht
Vak:
INF10 Basiskennis Informatica
Klas:
3BA1
Toetsdatum
Leerlingnummer
12-05-2010
75564
74421
69642
.
18-06-2010
75564
80032
74421
69642
.
Naam
Piet Overloon
Klaas Dam
Gerrit Stram
.
Piet Overloon
Gerda Roever
Klaas Dam
Gerrit Stram
.
Cijfer
7,3
4,2
9,0
.
8,7
5,4
7,2
8,4
.
Uitwerking 1
We zien in de bovenkant van het overzicht eenmalig de aanduiding
van het vak en van de klas. Vervolgens zien we een aantal keer een
datum. Deze datum keert regelmatig terug en vormt dus een repeterende groep. Bij n datum zien we vervolgens een aantal keer
de gegevens van een leerling en het cijfer dat deze heeft behaald.
Deze gegevens vormen bij n datum opnieuw een repeterende
groep. Dit heeft tot gevolg dat de voorlopige nulde normaalvorm er
op de volgende wijze uitziet:
(vakcode, vakomschrijving, klas, RG (toetsdatum, RG
(leerlingnummer, naam, cijfer))
Als sleutel zal hier moeten gelden de combinatie van vakcode en
klas. Om namelijk precies het overzicht uit de stapel te halen, moet
de docent eerst weten van welk vak hij de resultaten wenst te zien.
Hij geeft tenslotte les in meerdere vakken. Omdat hij een vak aan
meer dan n klas geeft, moet hij ook nog weten van welke klas
hij de vakresultaten wenst te zien. De combinatie vakcode en klas
vormt dus de sleutel. We krijgen dan:
0 NV (vakcode, klas, vakomschrijving, RG (toetsdatum, RG
(leerlingnummer, naam, cijfer)))
We zien nu dat we twee maal een repeterende groep hebben, waarbij de tweede groep onderdeel van de eerste is. We zeggen wel dat
de tweede groep genest ligt binnen de eerste groep.
4 Normaliseren, verdieping
51
52
De nieuwe sleutel bestaat hier uit de combinatie van vakcode, toetsdatum en leerlingnummer.
We hebben nu de eerste normaalvorm gevonden. Alle repeterende
groepen zijn verwijderd. Let erop dat bij het kiezen van de nieuwe
sleutel er iets speciaals aan de hand is. In de eerste groep van de
eerste normaalvorm wijzen we nu n cijfer aan van n leerling.
Immers, de repeterende groepen zijn verwijderd. Om een cijfer aan
te kunnen wijzen moeten we weten van welke leerling, van welk
vak en op welke datum de toets heeft plaatsgevonden. Het is niet
nodig om ook te weten in welke klas de leerling zit. De klasaanduiding is dus niet opgenomen in de sleutel!
Het zoeken naar de tweede en derde normaalvorm gaat op gelijke
wijze als in het vorige hoofdstuk is toegelicht.
De volgende stap is het bepalen van de tweede normaalvorm.
We moeten nu zoeken naar niet-sleutelkenmerken die slechts afhankelijk zijn van een deel van de sleutel. We moeten dus alleen
groepen onderzoeken die een samengestelde sleutel hebben. In ons
voorbeeld dus alle drie de gegevensgroepen. Verder moet in een
groep ten minste n niet-sleutelkenmerk (niet onderstreept kenmerk) zitten. In ons voorbeeld moeten we dus de eerste en laatste
gegevensgroep onderzoeken. We onderzoeken als eerste de eerste
4 Normaliseren, verdieping
53
54
55
4 Normaliseren, verdieping
3NV
RESULTAAT
LEERLING
TOETSDATUM
VAK-KLAS
VAK
We zien dat we twee groepen hebben die alleen maar uit sleutelkenmerken bestaan. Van deze groepen moeten we ons altijd afvragen of we deze mogen weglaten zonder dat er informatie verloren
gaat. In de groep TOETSDATUM ligt vastgelegd welke klas, voor
welk vak op welke datum een toets heeft gehad. Die informatie
kunnen we echter ook terugvinden in de groepen RESULTAAT
(welk vak en welke datum) en LEERLING (welke klas). We kunnen bij ieder cijfer op basis van het leerlingnummer de klas erbij
zoeken. We mogen dus de groep TOETSDATUM weglaten. Voor
de groep VAK-KLAS kunnen we dezelfde redenering volgen. Ook
de informatie uit deze groep kunnen we aeiden uit de groepen
RESULTAAT en LEERLING. We laten daarom ook de groep
VAK-KLAS weg.
De uiteindelijke derde normaalvorm ziet er dus uit als:
3NV
RESULTAAT
LEERLING
VAK
VAK
obv. vakcode
LEERLING
o.b.v. leerlingnummer
56
Cijferoverzicht
Vak:
INF10 Basiskennis Informatica
Klas:
3BA1
Toetsdatum
Leerlingnummer
12-05-2010
75564
12-05-2010
74421
12-05-2010
69642
.
.
18-06-2010
75564
18-06-2010
80032
18-06-2010
74421
18-06-2010
69642
.
.
Naam
Piet Overloon
Klaas Dam
Gerrit Stram
.
Piet Overloon
Gerda Roever
Klaas Dam
Gerrit Stram
.
Cijfer
7,3
4,2
9,0
.
8,7
5,4
7,2
8,4
.
Het overzicht is precies hetzelfde, alleen worden de dubbele datums getoond in het overzicht. Omdat we nu maar n repeterende
groep hebben verloopt het normaliseren iets anders. Het uiteindelijke resultaat de derde normaalvorm moet gelijk zijn. We gaan
dit voorbeeld op deze manier opnieuw (verkort) uitwerken.
Uitwerking 2
0NV
(vakcode, klas, vakomschrijving, RG (toetsdatum, leerlingnummer, naam, cijfer))
1NV
57
4 Normaliseren, verdieping
Voor de eerste groep geldt, dat een vakcode altijd precies n vakomschrijving heeft. Dus een afhankelijkheid en deze kenmerken
apart nemen in een nieuwe groep. Voor de tweede groep geldt dat
een leerlingnummer altijd precies n klas en n naam heeft. Dus
een afhankelijkheid en deze kenmerken opnemen in een aparte
nieuwe groep. De tweede normaalvorm wordt:
2NV
(vakcode, klas)
(vakcode, vakomschrijving)
(vakcode, toetsdatum, leerlingnummer, cijfer)
(leerlingnummer, naam, klas)
VAK-KLAS
VAK
RESULTAAT
LEERLING
(vakcode, klas)
(vakcode, vakomschrijving)
(vakcode, toetsdatum, leerlingnummer, cijfer)
(leerlingnummer, naam, klas)
VAK
RESULTAAT
LEERLING
(vakcode, vakomschrijving)
(vakcode, toetsdatum, leerlingnummer, cijfer)
(leerlingnummer, naam, klas)
58
We zien dat dit resultaat precies hetzelfde is als de eerste uitwerking. Je mag de opdrachten dus uitwerken door gebruik te maken
van een van beide manieren.
Maak opgave 4.1.
4.2
Automobielbedrijf Mandarijntje
Groningen
Werkplaats factuur
Merk
Type
Kenteken
Km. Stand
Datum
Aantal
1
1
1
1
1
4
1
1
1
1
4,75
: Citroen
: C6
: 58-TK-TB
: 47320
: 2-1-2010
Nummer
Factuurnummer: 0300278
Omschrijving
Bedrag
93110000
56
52
Onderhoud 45000 km
4-gas meting uitvoeren
Afmeldkosten APK
Totaal werkzaamheden
119,63
29,79
10,84
160,26
997918LOS
621632
BNL51240198
031327
6426E0
1109N3
BNL9945916
00
Koelvloeistof los
Steeklamp 5 Watt
Bollamp Amber
Pakking
Wisserblad LV
Oliefilter
Ruitspr. Vl. 1 ltr
Ultraoil 10W40
Totaal onderdelen
3,81
1,25
11,80
2,06
45,00
12,98
5,06
67,74
149,60
58,89
Totaal te voldoen
368,85
4 Normaliseren, verdieping
0NV
59
Je ziet dat hier iets speciaals aan de hand is. De prijzen zijn gesplitst in de werkelijk gerekende prijzen en de standaard adviesprijzen. We hebben bij de factuurregelgegevens, de tweede en
derde groep in de tweede normaalvorm, de werkelijke prijzen van
de factuur staan. Bij de laatste twee groepen van de tweede normaalvorm, waar de gegevens van de algemene werkzaamheden en
algemene onderdelen staan vermeld, is de adviesprijs toegevoegd.
Dit heeft een simpele reden. Als je een werknummer hebt, heb je
dan altijd precies n werkprijs? Neen, prijzen kunnen veranderen
in de tijd. Stel dat we op 31 december een auto repareren. De auto
60
61
4 Normaliseren, verdieping
FACTUUR
FACTUURWERK
FACTUURONDERDEEL
WERK
ONDERDEEL
4.3
62
vorige week getrouwd met de heer De Vries. Tot dan ging zij als
Ada Donkersloot door het leven en onder die naam staat zij ook
genoteerd in ons systeem.
Om dit soort vervelende situaties te voorkomen is het verstandig
altijd te werken met nummers of codes als sleutel en nooit met
namen of omschrijvingen. Dit wil natuurlijk niet zeggen dat we
niet de mogelijkheid moeten bieden om in een database ook te
zoeken op naam. Maar dan is het wel verstandig om de zoekactie
intelligent te maken, zodat er niet alleen op exacte spelling wordt
gezocht, maar ook op klank. Zoeken we dan op Jansen, dan zal
ook Janssen, of Janssens of.. als zoekresultaat worden getoond.
Een tweede opmerking die we graag willen maken, heeft ook te
maken met namen van personen. In al onze voorbeelden hebben
we steeds de naam van een persoon als n geheel gezien. In de
praktijk is het echter verstandig om een naam te splitsen in voorletters, tussenvoegsel en achternaam. Eventueel kan ook nog apart
de voornaam en de titulatuur worden opgenomen. Dit maakt het
namelijk mogelijk om met de naam te spelen. Op een etiket voor
een brief kunnen we dan de tekst Drs. J.P. van der Hoeve plaatsen,
terwijl we in de aanhef van de brief kunnen beginnen met bijvoorbeeld Geachte heer Van der Hoeve of misschien met Beste Jan
Pieter. Bovendien kunnen we nu goed sorteren op naam, dat wil
zeggen op achternaam.
Het splitsen in elementaire gegevens geldt overigens ook voor
straatnaam, huisnummer en toevoegsel. In het toevoegsel kunnen
we bijvoorbeeld de letter c kwijt uit het adres Kerkweg 3c. Door
het adres in drie delen te scheiden kunnen we bijvoorbeeld later de
combinatie postcode + huisnummer gebruiken als (alternatieve)
zoeksleutel. Maar hoe gaan we in dat geval overigens om met het
adres:
Fam. Vlietstra
Woonboot Neeltje, tegenover Koelandenweg 1
9534 TB Westdorp
Als laatste merken we op dat de nulde normaalvorm zelf ook een
repeterende groep is. We tonen maar n factuur als informatiebehoefte voor het normaliseren, maar het is er natuurlijk n uit vele
facturen. Die repeterende groep wordt niet getoond. Als je dus een
4 Normaliseren, verdieping
63
is gelijk aan:
0NV
4.4
Integreren
Tot nu toe hebben we steeds gekeken naar n overzicht tegelijkertijd. In de praktijk zal er binnen een bedrijf of organisatie echter
altijd sprake zijn van meerdere overzichten die gebruikt worden.
Al deze overzichten moeten dan gegenereerd kunnen worden vanuit dezelfde database. Hoe pakken we dat aan?
conceptueel en
functioneel datamodel
integreren
64
KLANT-1
KLANT-2
Deze twee groepen kunnen worden samengevoegd, want ze hebben beide dezelfde sleutel. We krijgen hieruit de gezamenlijke
gegevensgroep KLANT, waarin alle gegevens van de beide afzonderlijke groepen zijn opgenomen.
KLANT
In deze groep zijn alle gegevens uit de afzonderlijke groepen opgenomen. Gegevens die in beide tabellen voorkwamen (bijvoorbeeld
het telefoonnummer), nemen we uiteraard slechts n keer op.
homoniemen
synoniemen
Bij het integreren kan er sprake zijn van homoniemen en synoniemen. Een homoniem is een term waarmee we de ene keer dit en
de andere keer dat bedoelen. In de Nederlandse taal is een bekend
homoniem de term bank. Bedoelen we daarmee een nancile
instelling of een zitmeubel? Meestal blijkt uit de zin waarin we het
woord gebruiken wel wat we precies bedoelen.
Ook bij het normaliseren kun je homoniemen tegenkomen.
Bijvoorbeeld:
LEERLING
VAK
4 Normaliseren, verdieping
LEERLING
VAK
65
Bij het integreren kan ook sprake zijn van synoniemen. Hiermee
bedoelen we twee termen waarmee we eigenlijk hetzelfde bedoelen. In de Nederlandse taal zijn de woorden pils, bier, pint synoniemen. Ook dat is in het kader van de eenduidigheid ongewenst.
Bijvoorbeeld:
FACTUUR
KLANT
(factuurnummer, debiteurnummer,
factuurdatum, enzovoort)
(klantnummer, klantnaam, klantadres,
enzovoort)
Andersom had natuurlijk ook gekund. Alleen ligt het dan voor de
hand ook de andere gegevens uit de klantentabel een andere naam
te geven en alles te hernoemen naar DEBITEUR.
FACTUUR
DEBITEUR
Homoniemen en synoniemen komen met name voor als het normaliseren zoveel werk met zich meebrengt dat dit wordt verdeeld
over meerdere personen. Ieder neemt dan een aantal overzichten
voor zijn rekening en na aoop worden alle uitkomsten in elkaar
geschoven, gentegreerd. Als er slechts n persoon bezig is met
66
4.5
Datadictionary
tabellen
velden
Het ontwerp op papier dat ontstaat als resultaat van het normaliseren (datamodel) moet later worden omgezet in een echte database. In de database komen onze ontworpen gegevensgroepen,
tabellen genoemd in de database. In de tabellen moeten we onze
kenmerken, velden genoemd in de database, opgeven. Ook de relaties tussen de tabellen, het ER-Diagam, moet in de database worden aangegeven. De gegevensgroepen, kenmerken en de relaties
kunnen n-op-n worden overgenomen in de database. Er wordt
echter ook vastgelegd wat voor soort velden we willen vastleggen
en welke waarden daarbij zijn toegestaan. Zo kan een code bijvoorbeeld altijd opgebouwd zijn uit cijfers. We zouden er dan voor
kunnen kiezen om de code als een getal op te slaan. We kunnen
dan alleen cijfers invoeren. We kunnen er echter ook voor kiezen
om een code als tekst op te slaan. Hierdoor is het dan mogelijk om
ook letters op te nemen in de code.
In databasemanagementpakketten kunnen verschillende soorten
velden worden opgenomen. Bijvoorbeeld:
Numeriek: Getal, al dan niet voorzien van decimalen. Vaak
kan dit weer worden onderverdeeld in een geheel
getal(integer) of een decimaal getal. Soms wordt er
nog een aparte onderverdeling valuta gehanteerd, die
automatisch voorzien zal worden van het geldsymbool
en worden afgerond op twee decimalen.
4 Normaliseren, verdieping
67
Tekst:
Een tekst, die allerlei tekens kan bevatten, bijvoorbeeld een naam of postcode. De maximale lengte is
van tevoren vastgelegd.
Kladblok: Een tekst waarvan de lengte meestal onbeperkt is, ook
wel memo genoemd.
Datum:
Een datum, bijvoorbeeld een geboortedatum. Soms
maakt ook de tijd hier deel van uit.
Logisch: Een logisch veld van het type Ja/Nee, Waar/Niet waar.
Hier kan meestal een vinkje geplaatst worden, bijvoorbeeld Diploma gehaald?
Afhankelijk van het pakket bestaan er nog meer soorten velden of
zijn er speciale mogelijkheden voorhanden. We zullen later zien
wat Access ons precies te bieden heeft.
Naast het feit dat we altijd zullen moeten aangeven wat voor soort
gegevens we gaan gebruiken, moeten we ook altijd zoveel mogelijk
de grenzen opgeven waarbinnen de waarden van het veld mogen
liggen. Dit maakt het mogelijk een hele globale, automatische, controle uit te voeren op de ingevoerde gegevens (consistentie).
Als we te maken hebben met een klantcode, moeten we dus eerst
opgeven of deze code bestaat uit alleen cijfers (numeriek) of ook
uit letters of andere symbolen. In het laatste geval moeten we namelijk kiezen voor het type tekst. Daarnaast moeten we opgeven
welke waarden mogen worden ingevoerd. Bestaat de klantcode bijvoorbeeld altijd uit zes cijfers die moeten liggen tussen de 100.000
en 499.999 of bestaat de klantcode uit een code van twee letters
gevolgd door een spatie gevolgd door een getal van minimaal n
en maximaal drie cijfers?
Tevens dient altijd te worden beschreven of een bepaald gegeven
wel of niet verplicht moet worden ingevuld. Zo zal de klantcode
en de naam van de klant altijd bekend moeten zijn, dus zal het verplicht zijn deze gegevens in te vullen. Het telefoonnummer hoeft
niet verplicht te worden ingevoerd, omdat we rekening willen houden met klanten die hun telefoonnummer geheim willen houden.
We kunnen dan niets invullen.
De persoon die de database echt gaat bouwen, kan de door ons opgegeven beperkingen standaard opnemen in de database. Daardoor
68
datadictionary
Figuur 4.6
Type
Waardenbereik
Verplicht
Omschrijving
Klantcode
Geheel
getal
100.000-499.999
Ja
Telefoonnummer
Tekst
Precies 10 cijfers
Nee
Klantnaam
Tekst
Maximaal
25 tekens
Ja
Achternaam van de
klant
Geboortedatum
Datum
1-1-1860
t/m vandaag
Nee
Geboortedatum van de
klant.
Gehuwd
Logisch
Ja / Nee
Nee
Een datadictionary kan per gevonden gegevensgroep worden gemaakt. Er kan ook gekozen worden voor n grote datadictionary
waarin de gegevens van alle groepen gezamenlijk zijn opgenomen.
De laatste vorm heeft het voordeel dat we ieder gegeven slechts
n maal hoeven te beschrijven. Als we werken per gegevensgroep, hebben we te maken met gegevens die in meer dan n tabel
voorkomen. Die gegevens moeten we dan ook meerdere keren beschrijven.
metagegevens
4 Normaliseren, verdieping
4.6
69
Samenvatting
In dit hoofdstuk hebben we moeilijker type overzichten genormaliseerd. Dit zijn overzichten waar meer dan n repeterende groep in
voorkomt. Dit zijn echter ook de overzichten zoals ze in de praktijk
veelvuldig voorkomen. Door de stappen van het normaliseren consequent toe te passen kunnen dergelijke overzichten op een bijna
routinematige manier worden uiteengerafeld.
In dit hoofdstuk hebben we ook gekeken naar een aantal problemen en eigenaardigheden zoals die in de praktijk blijken voor te
komen. We kunnen eventueel zelfstandig sleutels bedenken en
gegevens, vanuit praktisch oogpunt, verder opsplitsen in zinvolle
deelgegevens.
Vervolgens hebben we geleerd hoe we bij meer dan n overzicht
de gevonden derde normaalvormen kunnen integreren tot n
eindresultaat. Daarbij spelen homoniemen en synoniemen een rol.
Ten slotte hebben we gezien hoe we een datadictionary moeten
opstellen. Een datadictionary beschrijft de gegevens die we tijdens
het normaliseren hebben gevonden. Kenmerken als type, bereik,
verplicht en omschrijving spelen daarbij een rol.
Opgaven
4.1 Geneste repeterende groepen
a. Het overzicht van guur 4.7 is in gebruik op de verkoopafdeling van de rma ZEEP BV. Deze rma levert aan zelfstandige
winkelbedrijven en heeft daartoe een twintigtal vertegenwoordigers in dienst die de winkels langsgaan en orders opnemen.
Normaliseer dit overzicht tot en met de derde normaalvorm.
Ga er daarbij van uit dat een vertegenwoordiger een vast rayon
heeft en nooit buiten zijn rayon werkzaam is. Teken ook het
bijbehorende ER-Diagram.
70
70
Figuur 4.7
24 Verhoeven
.
Omzet
Rayonomzet
34400
19560
41450
95410
54200
Totale omzet
567463
b. Het overzicht van guur 4.8 is in gebruik bij een MBO-instituut. Dit instituut biedt zijn leerlingen buiten de reguliere lessen
de mogelijkheid om tegen zeer gereduceerd tarief extra cursussen te volgen. Daarbij maakt men onder andere gebruik van het
overzicht uit guur 4.8. Normaliseer dit overzicht tot en met
de derde normaalvorm. Ga ervan uit dat een leerling meerdere
extra cursussen kan volgen, maar niet op dezelfde dag. Op n
dag worden er meerdere cursussen gegeven. Ten slotte geldt nog
dat een leerling bij maximaal n afdeling staat ingeschreven.
Aan het hoofd van een afdeling staat slechts n persoon, het
afdelingshoofd. Teken ook het bijbehorende ER-Diagram.
Figuur 4.8
17-6-2010
64837 H. Freiter
74432 C. Vermaas
Afdeling
BE
CE
BE
HB
CE
Afdelingshoofd
K.Nis
I.Parler
K. Nis
C. Hip
I. Parler
71
4 Normaliseren, verdieping
Artikel: R7865E
Zilveren oorbellen
Datum
Klant
03-mei-2010
S.Vliet@planet.nl
S. Vliet
V Visa 901655****
Martin33@hetnet.nl
A.C. Martin
M MasterCard 95765****
04-mei-2010
Tijd Ordernr
10:30 200915432
Aantal
1
15:55 200915534
Totaal:
Moostburg@hotmail.com
8:32
M. Oostburg
A American Express 760912****
3
1
200915687
Totaal:
Etc.
Werknemeroverzicht
Inschrijfnummer
Naam
Adres
Postcode
Plaats
Telefoonnummer
Uitgezonden naar:
Gevolgde cursussen
: 74493
: P. Reuvier
: Korte Kerkweg 3
: 3134 HT
: Spijkenisse
: 0181-638292
Naam bedrijf
Vanaf
Tot en met
Gem
Shell
Ladage
Pol Makelaardij
Makelaar Roer
Koopgoed
1-1-2001
1-7-2001
14-8-2004
1-1-2007
14-7-2007
1-1-2008
12-3-2001
31-12-2001
17-9-2004
15-6-2007
31-12-2007
30-4-2010
Cursuscode
Cursusnaam
Diploma gehaald?
ADM1
ADM2
LM
BM
Administratief medewerker 1
Administratief medewerker 2
Leerling makelaar
Bedigd makelaar
Ja
Ja
Ja
Nee
72
72
Computer BestBuy
Overzicht betalingen:
Factuurnr
Betaaldatum
10-0456
14-06-2010
10-0407
17-06-2010
10-0413
03-07-2010
10-0451
05-07-2010
10-0403
10-07-2010
10-0456
15-07-2010
Etc.
Klant
108 Putman, Gouda
167 Klipop, Utrecht
143 Yilmaz, Breda
113 Bakker, Best
113 Bakker, Best
108 Putman, Gouda
Bedrag
580,00
713,50
350,00
525,00
525,00
580,00
Betaald
290,00
713,50
180,00
200,00
200,00
290,00
Betaalmethode
B Bank
P Pinnen
B Bank
B Bank
B Bank
C Contant
4.4 Integreren
Gegeven is het overzicht zoals dat gebruikt wordt bij een camping,
zie guur 4.12. Daarbij is de volgende derde normaalvorm gevonden.
Figuur 4.12
Maximum
aantal
tenten
Maximum
aantal
personen
Prijs voor- en
naseizoen per
week
Prijs
hoogseizoen
per week
BOS 1
BOS 2
75
125
85
145
PARK 8
120
170
100
150
WEIDE 9
Voorzieningen
G: Geen
E: Elektriciteit
WE: Water +
Elektriciteit
W: Water
73
73
4 Normaliseren, verdieping
3 NV
PLAATS
VOORZIENING
Bij dezelfde camping maakt men ook gebruik van het overzicht
zoals afgebeeld in guur 4.13. Daarbij is de volgende derde normaalvorm gevonden.
Figuur 4.13
75594
8-7-2010
20-7-2010
Plaatscode: BOS 7
Toelichting bij plaats:
- dicht bij speeltuin gelegen
Klantcode:
Klant:
GR45
Groothuizen P.
Dorpsplein 45
3021 RS Rotterdam
506423743
010-4483263
Factuurdatum: 13-1-2010
Betaaldatum:
Bank/giro:
Telefoon:
Volgnummer
Geslacht
Voorletters
Naam
Geboortedatum
K.L.
Drieklauw
23-06-1975
P.
Groothuizen
09-11-1973
A.A.
Groothuizen
05-03-1999
3 NV
PLEK
KLANT
RESERVERING
NACHTREGISTER
74
74
Integreer de gevonden derde normaalvormen tot n derde normaalvorm (datamodel). Verwijder daarbij homoniemen en synoniemen. Teken tevens het bijbehorende ER-Diagram.
4.5 Datadictionary
a. In opgave 4.4 zijn twee normaalvormen gentegreerd tot n.
Maak voor deze gentegreerde normaalvorm n gezamenlijke
datadictionary.
b. In paragraaf 4.2 is als voorbeeld voor automobielbedrijf
Mandarijntje een overzicht genormaliseerd, zie guur 4.4.
Maak een data-dictionary van de gegevensgroepen zoals ontstaan uit de derde normaalvorm.
Eenvoudige
bewerkingen in Access
5.1
Inleiding
In dit hoofdstuk komt het werken met het pakket Access ter sprake.
Access is een databasepakket van Microsoft. Met een databasepakket zijn we in staat het functionele ontwerp (derde normaalvorm) zoals dat tijdens het normaliseren is ontstaan technisch te
implementeren. We kunnen vervolgens (grote hoeveelheden) gegevens invoeren, bijhouden, bewaren, manipuleren en opvragen. Het
pakket is toepasbaar in allerlei situaties. Zo kan een bibliotheek
bijhouden welke boeken aan welke personen zijn uitgeleend en een
magazijnmeester van een groot productiebedrijf kan bijhouden
welke goederen in voorraad zijn, in welke aantallen, wat het verbruik is en welke openstaande bestellingen er nog zijn.
Figuur 5.1
BOEKEN
Kolommen
Boeknummer
Titel
Schrijver
Aanschafdatum
Etc.
EC466-32
Boekhouden
geboekstaafd
Fuchs e.a.
23-5-2006
..
MM844-02
Marketing
Management
Kotler
06-7-2007
..
WK536-78
Basis wiskunde
23-5-2006
..
LO466-06
Inleiding logistiek
Schmidt e.a.
12-12-2008
..
Rijen
76
tabel
records
velden
database
resultaat van het structureren bestaat uit een verzameling gegevensgroepen die iets met elkaar te maken hebben die met elkaar
gerelateerd zijn. Een gegevensgroep kan ook gezien worden als een
tabel. In guur 5.1 is een tabel weergegeven waarin de gegevens
van de boeken van een schoolbibliotheek staan vermeld.
We kunnen een tabel opvatten als een verzameling rijen. En rij
bevat dan alle gegevens, alle van belang zijnde kenmerken, van
n boek. In plaats van rijen hebben we het in Access over records.
Een record bevat dan alle gegevens van n item uit de tabel, in dit
geval dus alle gegevens van steeds n boek. We kunnen een tabel
echter ook zien als een verzameling kolommen. In iedere kolom
wordt n gegeven bijgehouden: bijvoorbeeld de titel of de schrijver. In plaats van kolommen praten we in Access meestal over
velden. Om tabellen aan te kunnen duiden geven we ze een naam.
Deze naam dient een zo goed mogelijke beschrijving te zijn van de
gegevens zoals dat in de tabel wordt weergegeven. In dit voorbeeld
is als naam gekozen voor boeken.
Een aantal bij elkaar horende tabellen die tezamen een werkbaar
geheel vormen, wordt wel een database genoemd. De database
van de bibliotheek zou kunnen bestaan uit de tabellen boeken,
uitleningen, lezers en reserveringen. Hiermee kan worden vastgelegd wie welke boeken heeft geleend of wenst te lenen. We zullen in de rest van dit boek leren werken met tabellen en databases;
we laten zien hoe deze moeten worden gecreerd, gevuld, gemuteerd en geraadpleegd. Daartoe zal steeds eerst worden besproken
welke handelingen we moeten verrichten, waarna er een opdracht
volgt waarbij we de zojuist besproken handelingen gaan uitvoeren.
5.2
Om te kunnen werken met Access moeten we eerst op de gebruikelijke manier de computer opstarten en eventueel inloggen op
een netwerk. Ga naar de Start-knop en kies achtereenvolgens
Programmas, Microsoft Ofce en Microsoft Access.
De praktijk in dit boek wordt gedaan met behulp van databases die
te vinden zijn bij de downloadbestanden bij dit boek (zie de pagina
bij dit boek op www.academicservice.nl). Als in het boek staat
77
5.3
5.3.1
Na het starten van Access meldt het programma zich met het venster dat is afgebeeld in guur 5.2.
Figuur 5.2
In het openingsvenster kun je bepaalde standaarddatabases (sjablonen) openen, een nieuwe database maken of een onlangs geopende
database openen. Een database is een verzameling bij elkaar
behorende tabellen. Voordat we tabellen gaan maken of gebruiken, moet je eerst de bijbehorende database openen of selecteren.
Omdat er nog geen database gemaakt is, gaan we deze maken.
78
Selecteer de gewenste map en naam van de database (in ons voorbeeld Oefening), zie guur 5.4. Klik op OK
Klik vervolgens op de knop Maken in het venster van guur 5.3.
De database is nu gemaakt in de gewenste map. De database
bestaat uit een aantal tabellen die onderling verbonden zijn via
relaties. Er wordt standaard een eerste tabel, Tabel1, gemaakt, zie
guur 5.5.
Figuur 5.4
Figuur 5.5
79
80
81
82