Het boek is geschikt voor Microsoft Access 2013 (Nederlandse en Engelse versie). Dankzij de vele vragen en gevarieerde opgaven in het boek en de portal AcademicX.nl (met directe feedback!) is Aan de slag met databases en Access 2013 zeer geschikt om zelfstandig door te werken. De benodigde hulpbestanden zijn via de portal beschikbaar. Via de portal zijn ook veel filmpjes te bekijken die de verschillende onderwerpen extra toelichten.
Ben Groenendijk is docent aan de Hogeschool Rotterdam.
Aan de slag met databases en Access 2013
Met Aan de slag met databases en Access 2013 leer je op een praktische manier hoe je een informatiebehoefte omzet in een op professioneel niveau bruikbare database. Aan bod komen onder meer normaliseren, eenvoudige bewerkingen in Access, formulieren en rapporten, en eenvoudige toepassingen van SQL (vanuit Access).
Bij het opzetten van de applicaties hoef je niet te programmeren: je bouwt de hele applicatie op door de in Access aanwezige bouwstenen op grafische wijze naar eigen inzicht in te richten en aan elkaar te koppelen. Het resultaat is een professioneel ogende applicatie.
Groenendijk
Aan de slag met … is een boekenreeks voor hbo-ict. Elk boek behandelt een specifiek softwarepakket of programmeertaal. Op de portal AcademicX.nl kunnen studenten toetsen en oefeningen maken en extra studiemateriaal raadplegen. Daarmee bereiden zij zich optimaal voor op het tentamen.
Aan de slag met databases en Access 2013
Van ontwerp tot professioneel gebruik Ben Groenendijk
+ONLINE
OEFENIN
KIJK OP W W W. A C ADEMICX .NL VOOR AL LE E X T R A’ S
978 90 395 2759 7 123 / 995
9 789039 527597
Zevende druk
GEN
Aan de slag met databases en Access 2013 Van ontwerp tot professioneel gebruik
Ben Groenendijk
Meer informatie over deze en andere uitgaven kunt u verkrijgen bij: BIM Media B.V. Postbus 16262 2500 BG Den Haag Tel.: (070) 304 67 77 www.bimmedia.nl
Gebruik onderstaande code om dit boek eenmalig toe te voegen aan uw boekenplank op www.academicx.nl. Let op: u kunt deze code maar een keer gebruiken.
© 2014 BIM Media B.V., Den Haag Academic Service is een imprint van BIM Media B.V. 7e druk 2014 (Access 2013)
Ontwerp omslag en binnenwerk: Studio Bassa, Culemborg Zetwerk: Redactiebureau Ron Heijer, Markelo Omslag: Carlito’s Design, Amsterdam ISBN: 978 90 395 2759 7 NUR: 123 Alle rechten voorbehouden. Alle auteursrechten en databankrechten ten aanzien van deze uitgave worden uitdrukkelijk voorbehouden. Deze rechten berusten bij BIM Media B.V. Behoudens de in of krachtens de Auteurswet 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 fotokopieën, opnamen of enige andere manier, zonder voorafgaande schriftelijke toestemming van de uitgever. Voorzover het maken van reprografische verveelvoudigingen uit deze uitgave is toegestaan op grond van artikel 16 h Auteurswet, 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) 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 commerciële 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 publisher’s prior consent. While every effort has been made to ensure the reliability of the information presented in this publication, BIM Media B.V. neither guarantees the accuracy of the data contained here in nor accepts responsibility for errors or omissions or their consequences.
Voorwoord Databases zijn in het dagelijks leven niet meer weg te denken. Van een afgestudeerde op HBO- of WO-niveau mag worden verwacht dat deze kennis van en inzicht in databases heeft. Naast de theoretische kennis dienen ook praktische vaardigheden aanwezig te zijn. Dit boek beoogt de kennis van en vaardigheden met databases aan te reiken. Dat gebeurt door in stappen te gaan van het (op papier) ontwerpen van een database tot en met het gebruik van de database (in Microsoft Access) teneinde de benodigde informatie te genereren. Allereerst komt het ontwerpen van databases ter sprake. Hierbij wordt de techniek van het normaliseren gehanteerd. Uitgaande van een informatiebehoefte zal via het normalisatieproces de informatiestructuur bepaald worden. Deze structuur wordt vervolgens grafisch weergegeven door middel van een Entiteit-Relatie-diagram. Hierna wordt besproken hoe een gevonden gegevensstructuur kan worden omgezet in een database, waarbij het programma Access zal worden gebruikt. De database wordt gebouwd, gevuld en ten slotte gebruikt voor het opvragen van informatie. Bij de volgende stap wordt de wijze van gegevens opvragen steeds meer geautomatiseerd. Er worden formulieren, rapporten en macro’s ontworpen en gebruikt. Deze worden vervolgens gebruikt bij het opzetten van een applicatie. In dit verband wordt niet geprogrammeerd in de zin van het ‘ouderwetse’ coderen. De applicatie wordt gebouwd door op grafische wijze bouwstenen te selecteren, deze iets aan te passen en ze vervolgens samen te voegen tot professioneel ogende applicaties. Omdat databases algemeen toepasbaar zijn, wordt het boek afgesloten met een hoofdstuk waarin de standaardvraagtaal SQL wordt behandeld. Deze taal wordt niet alleen door Access ondersteund, maar door vrijwel ieder databasemanagementpakket dat op de markt is. Enige kennis van deze taal is dus onontbeerlijk. In het boek wordt ieder onderwerp eerst besproken en toegelicht, waarbij volop gebruik wordt gemaakt van relevante schermafdrukken en instructiefilmpjes. Vervolgens worden bij ieder onderwerp opgaven aangeboden waarin de theoretische kennis direct praktisch kan worden toegepast. In de opgaven worden enkele bestaande databases gebruikt. Op de hierin opgeslagen gegevens moeten vervolgens de nodige bewerkingen worden uitgevoerd. De bij dit boek behorende databases en instructiefilmpjes kunnen worden gedownload of bekeken via de pagina bij dit boek op de portal www.AcademicX. nl. De uitwerkingen van elk hoofdstuk zijn hier ook te vinden. Op die portal zijn ook interactieve vragen en antwoorden uit hoofdstuk 2 te maken. Om met dit boek te kunnen werken dient u de beschikking te hebben over Access 2013. Daarbij maakt het niet uit of u de beschikking heeft over de Engelstalige of de Neder-
v
Aan de slag met databases en Access 2013
landstalige versie. In het boek is uitgegaan van de Nederlandstalige versie, maar steeds is ook het Engelstalige equivalent erbij gegeven. Bij dit boek is een docentenhandleiding beschikbaar. Hierin wordt per hoofdstuk een extra toelichting gegeven. Verder wordt een toelichting gegeven bij de vragen in het boek. Ook PowerPoint-presentaties van de voorbeelden en opgaven van hoofdstuk 1 worden meegeleverd met de docentenhandleiding. De bestanden die gebruikt zijn in de instructiefilmpjes behoren ook tot het docentenmateriaal. Ook zijn er (voorbeeld) toetsen, inclusief uitwerkingen, beschikbaar. Bovendien wordt extra cursusmateriaal meegeleverd. Het extra cursusmateriaal bevat cases betreffende de eerste vier hoofdstukken, dus normaliseren, eenvoudige bewerkingen in Access en het werken met formulieren en rapporten. Verder zijn er cases voor het werken met SQL. Daarbij is ook een vrij grote database beschikbaar. Iedere serie cases bestaat uit 18 verschillende opgaven. U kunt de docentenhandleiding aanvragen via het e-mailadres:
[email protected]. Geef hierbij uw school, opleiding, uw naam en de gewenste uitgave op. Toetsen en extra oefeningen op AcademicX.nl AcademicX.nl is de toets- en oefenportal van Academic Service. Daar vinden studenten bij elk hoofdstuk uit dit boek een aantal vragen en opdrachten, met feedback op de resultaten. De activeringscode om te registreren en in te loggen op AcademicX.nl staat op de copyrightpagina van dit boek. Na registratie hebben studenten onbeperkt en kosteloos toegang tot het extra studiemateriaal. De activeringscode kan echter maar eenmaal gebruikt worden. Vragen of opmerkingen over dit boek zijn welkom. Stuur deze aan:
[email protected] Ben Groenendijk januari 2014
vi
Inhoud
Voorwoord
v
1 Normaliseren 1.1 Inleiding databases 1.2 Inleiding normaliseren 1.3 Entiteittypen 1.4 Normaliseren, nulde normaalvorm 1.5 Normaliseren, eerste normaalvorm 1.6 Normaliseren, tweede normaalvorm 1.7 Normaliseren, derde normaalvorm 1.8 Normaliseren, voorbeeld 1.9 Het integreren van gegevensstructuren 1.10 ER-diagram 1.11 Geen repeterende groep 1.12 Dubbele (geneste) repeterende groepen 1.13 Herhalende repeterende groepen 1.14 Opmerkingen met betrekking tot normaliseren 1.15 Opgaven
1 1 5 6 8 11 13 15 18 20 22 25 27 31 34 35
2
45 45 46 46 46 51 52 52 53 55 56 56 57 57 57 57 58 60 60
Eenvoudige bewerkingen in Access 2.1 Inleiding 2.2 Het starten van het programma Access 2.3 Het creëren van de database en tabel 2.3.1 Aanmaken van een database 2.3.2 Aanmaken van een nieuwe tabel 2.4 Het openen van een bestaande database 2.4.1 Selecteren van een bestaande database 2.4.2 Selecteren van een bestaande tabel 2.4.3 Aanpassen van het ontwerp van de tabel 2.5 Records manipuleren 2.5.1 Records toevoegen 2.5.2 Records wijzigen 2.5.3 Records verwijderen 2.5.4 Records sorteren 2.5.5 Records filteren 2.5.6 Records zoeken 2.5.7 Records zoeken (en vervangen) 2.5.8 Totalen
vii
Aan de slag met databases en Access 2013
2.6 Werken met meerdere tabellen tegelijkertijd 2.6.1 Leggen van relaties 2.6.2 Verwijderen/bewerken van relaties 2.7 Gegevens selecteren en manipuleren 2.7.1 Gegevens selecteren, selectiequery 2.7.2 Gegevens opvragen, rekenkundige bewerkingen 2.7.3 Gegevens opvragen, geavanceerde selectiequery 2.7.4 Gegevens groeperen, group-by-query 2.7.5 Gegevens wijzigen, bijwerkquery 2.7.6 Gegevens verwijderen, verwijderquery 2.7.7 Overige query’s 2.7.8 Toepassing van relaties, referentiële integriteit 2.8 Rapporten 2.8.1 Rapport ontwerpen (snelle methode) 2.8.2 Rapport ontwerpen via de wizard 2.8.3 Etiket ontwerpen 2.9 Formulieren 2.9.1 Formulier ontwerpen (snelle methode) 2.9.2 Formulier ontwerpen via de wizard
62 62 66 66 66 74 77 82 87 89 91 92 98 99 102 107 111 112 113
3
Uitgebreide formulieren 3.1 Keuzemogelijkheden 3.2 Bijlagen 3.3 Keuzelijsten 3.3.1 Keuzelijst met getypte invoer 3.3.2 Keuzelijst met meerdere waarden 3.3.3 Keuzelijst om te zoeken 3.4 Hoofd- en subformulieren 3.5 Tabbladen 3.6 Opdrachtknoppen
121 121 126 131 132 133 136 139 147 152
4
Uitgebreide rapporten 4.1 Rapport zonder duplicaten 4.2 Rapport met groepen 4.3 Rapport met meerdere groepen 4.4 Rapport met veel rekenvelden
157 157 161 171 177
5 Macro’s 5.1 Een eenvoudige macro 5.2 Een eenvoudige ingesloten macro 5.3 Geavanceerde macro’s 5.4 Gegevensmacro’s
viii
187 188 193 198 210
Inhoud
6
Een applicatie zonder programmeren 6.1 Tabellen en relaties 6.2 Menustructuur 6.3 De formulieren 6.3.1 Formulier Klant 6.3.2 Formulier Bestemming 6.3.3 Formulier Reis 6.3.4 Formulier Boeking 6.3.5 Formulier Constant 6.3.6 Formulier Volgnummer 6.3.7 Formulier Vertreklijst 6.4 De rapporten 6.4.1 Rapport Boeking 6.4.2 Rapport Klantenlijst 6.4.3 Rapport Vertreklijst 6.4.4 Rapport Omzetlijst 6.5 Voltooien van de applicatie 6.5.1 Navigatieformulier 6.5.2 Opstarten 6.5.3 Lint verwijderen
215 216 219 220 221 229 234 234 241 242 248 250 250 256 256 259 263 263 270 271
7
SQL, Structured Query Language 7.1 Inleiding 7.2 Begrippen 7.3 Opbouw hoofdstuk 7.4 Database Bibliotheek (theorieopdrachten) 7.5 Database Alco (praktijkopdrachten) 7.6 Opvragingen uit één tabel 7.7 SQL gebruiken in Access 7.8 Eenvoudige opvragingen uit meerdere tabellen 7.9 Wijzigen van de volgorde 7.10 Rekenkundige bewerkingen 7.11 Groeperen 7.12 Subquery’s 7.13 Speciale joins en views 7.14 SQL, meer mogelijkheden
275 275 275 276 277 278 278 282 285 288 290 293 298 308 311
Bijlage A
Veldeigenschappen Veldlengte Notatiewijze Invoermasker Bijschrift Standaardwaarde Validatieregel Validatietekst Vereist
313 313 315 318 321 321 321 322 322
ix
Aan de slag met databases en Access 2013
Bijlage B
Lengte nul toegestaan Geïndexeerd Unicode-compressie IME-modus / IME-zinmodus Tekstuitlijning Datumkiezer weergeven Tekstopmaak Alleen toevoegen Expressie Resultaattype
322 322 324 324 324 324 324 325 325 325
Opties Categorie Algemeen (General) Categorie Huidige database (Current Database) Categorie Gegevensblad (Datasheet) Categorie Ontwerpfuncties voor objecten (Object Designers) Categorie Controle (Proofing) Categorie Taal (Language) Categorie Clientinstellingen (Client Settings) Categorie Lint aanpassen (Customize Ribbon) Categorie Werkbalk Snelle toegang (Quick Access Toolbar) Categorie Invoertoepassingen (Add-Ins) Categorie Vertrouwenscentrum (Trust Center)
327 328 328 331 332 334 334 336 337 337 337 339
Index
x
343
Hoofdstuk 1
Normaliseren 1.1
Inleiding databases
De huidige maatschappij kenmerkt zich door de enorme hoeveelheid gegevens en informatie die ons continu wordt aangeboden. Internet, Facebook, Twitter, radio, televisie, reclame en telefoon overspoelen ons daarmee. Niet alleen in ons privé-leven worden we overspoeld, ook in onze contacten met de ‘zakelijke wereld’ worden we er volop mee geconfronteerd. Een groot deel van de aangeboden gegevens/informatie ervaren we als niet-relevant. Maar er zijn ook zaken die we willen vastleggen. Soms omdat we daartoe verplicht zijn (bedrijfsleven), soms omdat we voor ons zelf zekerheid willen (afspraken in agenda, telefoonnummers van bekenden) en soms omdat we het gewoon leuk vinden (reisverslag van de vakantie, vliegtuigspotters, enzovoort). Voor het vastleggen van gegevens wordt tegenwoordig vrijwel altijd gebruik gemaakt van een computer. Alleen een computer volstaat niet, er dient ook software aanwezig te zijn waarmee de gegevens kunnen worden ingevoerd en opgeslagen. Daarbij hebben we de keus uit een grote verscheidenheid aan programma’s. Er zijn daarbij verschillende categorieën programma’s te onderkennen: tekstverwerkers (bijvoorbeeld Word), spreadsheets (bijvoorbeeld Excel) en databases (bijvoorbeeld Access). Welk soort programma u gebruikt, is een beetje afhankelijk van het doel en van de omstandigheden. Zo zult u het reisverslag van de vakantie waarschijnlijk vastleggen met behulp van een tekstverwerker. Immers, u wilt de zaak vastleggen, opmaken, voorzien van uw digitale foto’s en vervolgens verspreiden (internet of via e-mail). Daarbij biedt de tekstverwerker u alle mogelijkheden die u wenst. Een docent zou de cijfers van een toets kunnen opslaan in een tekstverwerker. Regels met naam student, naam toets, score, datum toets, etc. Het wordt alleen lastig als u die gegevens op een andere manier wilt presenteren, bijvoorbeeld op volgorde van de behaalde score (van laag naar hoog). Of hoeveel voldoendes heeft een bepaalde toets? In dat geval kan beter gekozen worden voor een spreadsheet-applicatie, bijvoorbeeld Excel. In de verschillende kolommen kunnen de gegevens (naam student, naam toets, score, etc.) geplaatst worden. Hierdoor ontstaat de mogelijkheid om de gegevens op een willekeurige manier te sorteren en te presenteren. Bovendien kunnen er eenvoudig tellingen uitgevoerd worden, bijvoorbeeld het aantal voldoendes. Op dezelfde manier zou de huismeester van een kantoorgebouw een lijst kunnen bijhouden met kamernummers, namen van de gebruikers en de nummers van de toegangssleutels. Komt een andere medewerker in een kamer te zitten of krijgt het slot een nieuwe cilinder en dus een andere sleutel, dan kan de wijziging eenvoudig worden aangebracht. In eenvoudige gevallen werkt dit goed. Meestal is de praktijk echter niet zo simpel en willen we meer. Zo wil een juwelier die via internet producten verkoopt niet alleen de adresgegevens van zijn klanten bijhouden. Ook de producten die gekocht zijn, het bedrag van de producten, manier van betalen en de verkoopdatum worden onder andere vastgelegd. Uit die gegevens kan bijvoorbeeld het gemiddelde bestedingsbedrag per order worden bepaald, welke productgroep
1
Aan de slag met databases en Access 2013
behaalt de meeste omzet, welke betalingsmethode wordt het meest gebruikt? Maar ook het bepalen van ABC-klanten (bestellen vaak, gemiddeld of laag), op basis hiervan kan een mailing opgesteld worden. Ook kunnen we meten wat het effect is van een reclamecampagne. Om dit te kunnen bepalen is niet alleen de huidige bestelling nodig, maar ook de gegevens uit het verleden moeten worden geregistreerd, omdat u anders de gewenste informatie niet kunt genereren. Alle opgeslagen gegevens moet u vervolgens op allerlei manieren met elkaar in verband kunnen brengen, bewerken en presenteren, teneinde de gewenste informatie te kunnen leveren. Een spreadsheet schiet hier duidelijk tekort. Hier kunnen we beter een beroep doen op een database. Een databaseprogramma stelt ons in staat om grote hoeveelheden gegevens op een gestructureerde manier op te slaan. Deze gegevens kunnen dan later op allerlei manieren worden bewerkt, waarna de resultaten overzichtelijk in rapportvorm kunnen worden gepresenteerd. Op basis van dergelijke rapporten kunnen dan conclusies getrokken worden en acties worden ondernomen. We spreken nu eigenlijk over een informatiesysteem. Bij het beheren van grote hoeveelheden gegevens zal vaak een database gebruikt worden. De gegevens zijn dan meestal samengebracht in bestanden, te vergelijken met elektronische kaartenbakken. Bij de eerste toepassingen (applicaties), geschreven voor het beheren van bestanden, beschikte iedere gebruiker (iedere applicatie) over een eigen bestand. Iedereen werkte op zijn of haar eigen eilandje, zie figuur 1.1.
Toepassing 1
Bestand A
Bestand B
Toepassing 2
Bestand B
Bestand C
Figuur 1.1
Het zal duidelijk zijn dat deze manier van werken nadelen heeft. Als verscheidene gebruikers over een eigen klantenbestand beschikken, zullen de gegevens in de diverse bestanden snel verouderd zijn. Wie garandeert immers dat een adreswijziging in alle bestanden wordt doorgevoerd? De verouderde, onjuiste gegevens geven aanleiding tot inconsistentie (tegenstrijdigheid en dus onbetrouwbaar). In het ene klantenbestand staan de gegevens van de klant al op het nieuwe adres, maar in het andere klantenbestand nog op het oude adres. Bovendien kunnen tussen de diverse klantenbestanden kleine structuurverschillen optreden: niet iedereen neemt exact dezelfde gegevens op. Zo zal de afdeling Verzending geïnteresseerd zijn in het afleveradres, wil de financiële afdeling het postadres opnemen
2
Hoofdstuk 1 – Normaliseren
en is de afdeling Verkoop geïnteresseerd in het maximaal te verlenen krediet. De uitwisselbaarheid van gegevens komt hiermee in het geding. Ten slotte brengt deze wijze van werken redundantie met zich mee. Met redundantie wordt bedoeld dat dezelfde gegevens meer dan één keer liggen opgeslagen. Een wijziging in een enkel gegeven moet daardoor ook meermalen worden aangebracht. Dat kan nooit de bedoeling geweest zijn. Om deze nadelen op te heffen werd al snel overgestapt op toepassingen waarmee het mogelijk was bestanden gezamenlijk te gebruiken. Er bestaat slechts één klantenbestand. Alle gebruikers die klantgegevens nodig hebben, gebruiken hetzelfde bestand. Hierdoor wordt voorkomen dat de gegevens inconsistent (onbetrouwbaar) worden. Verder is ook de redundantie teruggedrongen, zie figuur 1.2. Toepassing 2
Toepassing 1
Bestand A
Bestand B
Bestand C
Figuur 1.2
Nu ontstaan echter nieuwe problemen. Omdat de gegevens eenmalig liggen opgeslagen, krijgt iedere gebruiker te maken met dezelfde gegevensstructuur. Iedere gebruiker wordt er bijvoorbeeld mee geconfronteerd dat van klanten het afleveradres wordt genoteerd, ook de afdelingen die totaal niet in dat gegeven geïnteresseerd zijn. Als een afdeling meer gegevens van klanten wenst op te slaan, en dus de structuur van het bestand aanpast, zullen alle andere gebruikers ook geconfronteerd worden met deze nieuwe structuur. Dit vergt grote aanpassingen in alle gebruikte toepassingen. De moderne manier van gegevensopslag voorziet in een oplossing van het hiervoor genoemde probleem. We maken daarbij gebruik van een database. Gebruikers krijgen zelf geen directe toegang meer tot de bestanden, maar werken via een databasemanagementsysteem (DBMS), zie figuur 1.3. Het DBMS beheert de volledige gegevensstructuur van alle bestanden. Als de financiële afdeling zijn klantgegevens opvraagt, handelt het DBMS dit af. De specifieke klantgegevens van deze afdeling worden geselecteerd uit het volledige klantenbestand. Indien wijzigingen aan het volledige klantenbestand plaatsvinden die geen betrekking hebben op de afdeling financiën, heeft dat geen gevolgen voor de toepassingen van die afdeling. Door het DBMS is het mogelijk dat iedere toepassing zijn eigen ‘zienswijze’ heeft op de gegevensstructuur in de database. Dit wordt een view genoemd. Zo heeft bijvoorbeeld de afdeling financiën een andere view op de klantgegevens dan de afdeling expeditie. Het afleveradres is voor financiën niet van belang en wordt dan ook niet getoond bij het opvragen van ‘alle’ klantgegevens.
3
Aan de slag met databases en Access 2013
Toepassing 2
Toepassing 1
DBMS
Bestand A
Bestand B
Bestand C
Figuur 1.3
De volledige structuur van alle klantgegevens is vastgelegd in het conceptuele schema, de zienswijze van de volledige organisatie. Ook wel aangeduid als functioneel of logisch datamodel. In dit datamodel wordt de volledige structuur van alle gegevens vastgelegd. Hoe een dergelijk datamodel wordt ontworpen staat in de volgende paragrafen uitgelegd. De persoon die verantwoordelijk is voor de opslag van de gegevens, de database-administrator, bepaalt in overleg met de gebruikers welke gegevens op welke manier zullen worden opgeslagen. De administrator heeft ook de bevoegdheid de structuur van de database op te stellen, deze eventueel aan te passen en per gebruiker te bepalen welke gegevens hij mag inzien of muteren. Gebruikers kunnen alleen maar de handelingen verrichten die de database-administrator hun toestaat op de gegevens die de administrator aan hen ter beschikking stelt. Dit wordt autorisatie, machtiging of permissie genoemd. De gebruiker kan gegevens opvragen via het DBMS, dat hiervoor beschikt over speciale faciliteiten. In Access kan de gebruiker bijvoorbeeld gebruikmaken van een grafisch georiënteerde opvraagfaciliteit waarmee op eenvoudige wijze vragen (query’s) kunnen worden samengesteld. In Access kan ook gebruik gemaakt worden van de standaardvraagtaal SQL (Structured Query Language). Bovendien beschikt een DBMS onder andere over faciliteiten waarmee op eenvoudige wijze backups gemaakt kunnen worden. Tevens kunnen beschadigde bestanden hersteld worden of kan voorkomen worden dat twee gebruikers tegelijkertijd hetzelfde gegeven willen wijzigen (record locking). Een databasemanagementsysteem dat daarnaast in staat is te werken met de relaties die tussen bestanden bestaan, noemt men een relationeel databasemanagementsysteem. De meeste hedendaagse databases zijn relationele databases. Ook Access is daar een voorbeeld van.
4
Hoofdstuk 1 – Normaliseren
1.2
Inleiding normaliseren
Bedrijven bestaan bij de gratie van de beschikbaarheid van de door hen benodigde informatie. De aard van de informatie kan divers zijn. Het kan gaan om een factuur, een prijslijst, een omzetstatistiek, een loonstaat, de bezettingsgraad van vrachtauto’s, de tentamenresultaten van studenten, enzovoort. Deze informatie is over het algemeen niet direct beschikbaar maar moet worden gegenereerd uit de voorhanden zijnde gegevens. Een gegeven is te zien als een kaal feit, zonder directe waarde. De waarde ontstaat pas door gegevens te combineren en te bewerken tot informatie. Op basis van deze informatie kunnen vervolgens beslissingen genomen worden. Het al dan niet beschikbaar zijn van de benodigde gegevens is dus van belang. Deze moeten daarom op een goede, overzichtelijke en betrouwbare wijze worden opgeslagen. De gegevens moeten correct zijn, dus onderhoudbaar, denk aan het kunnen aanbrengen van een adreswijziging van een klant. We kunnen gegevens zomaar, zonder enige structuur, opslaan in de computer. Een factuur kunnen we eenvoudig in Excel maken, opslaan en afdrukken. De factuur is de gewenste informatiebehoefte. Voor een kleine onderneming is het wellicht een goede methode, voor een onderneming die veel facturen per dag moet maken niet. Bol. com, bijvoorbeeld, maakt meer dan 30.000 facturen per dag! Met facturen in Excel kan geen managementinformatie gemaakt worden. Denk hierbij aan per boek een voorspelling van het verkoopaantal voor de volgende dag, per klant de gemiddelde besteding, de omzet per week, een top-10 van de verkochte boeken, enzovoort. Dat is allemaal niet mogelijk als de facturen in Excel zijn gemaakt. Met een database is het wel mogelijk. In een database worden de gegevens (data) en de gewenste uitvoer apart opgeslagen. De gegevens van de facturen worden gestructureerd opgeslagen in gegevensgroepen. De factuur zelf (ongestructureerd) wordt via een rapport afgedrukt. Het rapport maakt daarbij gebruik van de data in de gegevensgroepen. In de gegevensgroepen wordt de data zo efficiënt mogelijk opgeslagen. Bijvoorbeeld een berekening uit Excel wordt niet opgeslagen. Dus een regeltotaal wordt niet opgeslagen, wel de gegevens waarmee de berekening is gemaakt (aantal en prijs per stuk). Het proces van informatiebehoefte (factuur) naar gestructureerde gegevensgroepen wordt normaliseren genoemd. Zoals eerder al verteld is, moet het uitgangspunt bij het ontwikkelen van een informatiesysteem de gewenste informatie zijn. Daarom zullen we ons in dit hoofdstuk bezighouden met het uiteenrafelen van de verlangde informatie in de elementaire gegevens en het structureren van deze gegevens. Een werkwijze die daarvoor heel geschikt is, bestaat uit het toepassen van het normalisatieproces, zoals dat door E.F. Codd geïntroduceerd is. Het resultaat van normaliseren is een aantal gestructureerde gegevensgroepen. Tussen deze verschillende groepen bestaan verbanden. Deze verbanden zullen we aangeven in een ER-diagram (Entiteit-Relatie-diagram).
5
Aan de slag met databases en Access 2013
1.3
Gegevensgroepen (Entiteittypen)
Voordat we ons gaan bezighouden met normaliseren, behandelen we enkele begrippen die daarbij aan de orde komen. Het doel van normaliseren is in feite het voorkomen van inconsistentie (tegenstrijdigheid, onbetrouwbaarheid) en redundantie (meervoudige opslag). We willen daartoe de ongestructureerde informatiebehoefte structureren door deze te splitsen in een aantal afzonderlijke gegevensgroepen. Zo kunnen gegevensgroepen ontstaan zoals KLANT, ORDER, ARTIKEL, TRANSPORT, PERSONEEL, etc. Een gegevensgroep is een verzameling van – voor de gebruiker – betekenisvolle kenmerken (eigenschappen, elementen, items), die samen een bepaalde eenheid vormen. Zo zal bijvoorbeeld de gegevensgroep ARTIKEL de kenmerken artikelnummer, omschrijving, artikelgroep, voorraad en verkoopprijs bezitten. De gegevensgroep en de kenmerken vertellen iets over de gehele groep, niet over één enkel exemplaar. We houden de diverse kenmerken immers bij voor alle exemplaren uit de gegevensgroep. Bij een exemplaar binnen de gegevensgroep horen de bijbehorende waarden van de kenmerken. Een exemplaar uit de gegevensgroep ARTIKEL is bijvoorbeeld: 87432; Bureaustoel Lena; Stoelen; 34; 79,95. Dit kunnen we ook schematisch weergeven, zie figuur 1.4. Gegevensgroep: ARTIKEL Artikelnr Omschrijving 83798 Tafel Bianca
Artikelgroep Tafels
87432 Etc.
Stoelen ….
Bureaustoel Lena ….
Voorraad 3 34 …
Verkoopprijs 895,00 79,95 ….,..
Figuur 1.4
De gegevensgroep ARTIKEL staat dus voor alle exemplaren binnen de gehele groep. Binnen het kenmerk (element, item, eigenschap) artikelnummer vallen alle waarden van het kenmerk. In een database worden de gegevens altijd op die manier opgeslagen: rijen met dezelfde soort gegevens en kolommen met allemaal dezelfde soort gegevens. Dit zou u in Excel ook op deze manier kunnen opslaan en dan verschillende tabbladen maken met de gegevens van de andere groepen. Het grote verschil tussen Excel en een database (bijvoorbeeld Access) is dat er tussen de groepen (tabbladen) relaties worden gelegd in een database. Als u zich de gegevens denkbeeldig voorstelt in Excel en u zou bijvoorbeeld in het tabblad KLANT een willekeurige klant selecteren en u selecteert daarna het tabblad ORDER (waarin alle orders staan; dit kunnen er miljoenen zijn in een database), dan zou u in een database alleen nog maar de orders zien van de geselecteerde klant, alle andere orders zijn automatisch gefilterd. Selecteert u daarna een willekeurige order in tabblad ORDER en selecteert u daarna tabblad ARTIKEL, dan zou u in een database alleen de artikelen zien van de geselecteerde order, alle andere artikelen zijn automatisch gefilterd. Dat is het grote verschil tussen een spreadsheetapplicatie zoals Excel en een database applicatie zoals Access. Een kenmerk of kenmerken waarmee een exemplaar uniek te selecteren is, noemen we sleutelkenmerk, kortweg sleutel of key. In ons voorbeeld is dat het kenmerk artikelnum-
6
Hoofdstuk 1 – Normaliseren
mer. Met een artikelnummer kunnen we uit alle exemplaren exact één uniek exemplaar selecteren. Voor een sleutelwaarde geldt altijd dat deze uniek is binnen de verzameling. We noemen dit ook wel identity integrity. Hierdoor is ieder exemplaar (regel) uniek, er zijn dus nooit twee of meer dezelfde exemplaren! Verder geldt dat een sleutel minimaal moet zijn, dat wil zeggen dat de sleutel geen kenmerken mag bevatten die niet absoluut noodzakelijk zijn voor het identificerende karakter. Zo is artikelnummer en omschrijving samen ook een sleutel, maar is niet minimaal. Verder geldt dat een sleutelwaarde nooit leeg mag zijn. Er moet altijd een waarde aanwezig zijn. Ten slotte merken we op dat het niet verstandig is, kenmerken die aan veranderingen onderhevig zijn op te nemen in de sleutel. Het identificerende karakter wordt dan immers tijdsafhankelijk. Het mobiele telefoonnummer van een persoon als sleutel kiezen is daarom niet verstandig. Bovendien kan een lege waarde optreden als iemand geen mobiele telefoon heeft. Het kan voorkomen dat in een gegevensgroep geen sleutel aanwezig is, zelfs als u alle kenmerken samen als sleutel kiest. In een dergelijke situatie dient een extra kenmerk als sleutel toegevoegd te worden. Als in ons voorbeeld het kenmerk artikelnummer niet had bestaan, dan zou geen sleutel aanwezig geweest zijn. Tafel Bianca is te bestellen in verschillende houtsoorten, met dezelfde prijs en bovendien kan de voorraad hetzelfde zijn. Indien u dan alle kenmerken als sleutel kiest kunnen meerdere exemplaren optreden. Dat is in strijd met de regel dat een sleutel uniek moet zijn. Er dient dan een extra kenmerk toegevoegd te worden, artikelnummer. In veel gegevensgroepen zitten van die sleutelkenmerken. Denk bijvoorbeeld aan studentnummer. Zonder een dergelijk nummer is een student niet uniek te identificeren. Een tweeling met dezelfde voorletters kan dan problemen opleveren. Het schema zoals in figuur 1.4 (in tabelvorm) is geen geschikte manier om de gegevensgroep ARTIKEL te beschrijven. Bij het beschrijven zijn we eigenlijk niet geïnteresseerd in de verschillende exemplaren en de waarden van hun kenmerken. Deze veranderen in de loop van de tijd voortdurend, waardoor de beschrijving achterhaald is. Het enige echt belangrijke van het voorgaande schema is de aanduiding van de betreffende gegevensgroep (waar gaat het over) en de verschillende kenmerken (welke kenmerken zijn van belang). Een betere beschrijving van de gegevensgroep ARTIKEL vindt u hieronder. Deze beschrijving toont alleen de belangrijke zaken. ARTIKEL (artikelnr, omschrijving, artikelgroep, voorraad, verkoopprijs) Let op De sleutel is onderstreept, omdat dit kenmerk een speciale rol speelt. De bovenstaande notatie zullen we in het vervolg veelvuldig hanteren.
Terminologie In de literatuur wordt een gegevensgroep aangeduid als entiteittype, een kenmerk (element, item, eigenschap) als attribuuttype, een exemplaar met entiteit-occurrence en een kenmerkwaarde als attribuutwaarde. Deze termen worden veel toegepast aangezien E.F. Codd ze heeft gebruikt. E.F. Codd was wiskundige en heeft op basis daarvan dit model uitgedacht. Een praktisch model in de vorm van een relationele database is pas later
7
Aan de slag met databases en Access 2013
ontwikkeld. Om het nog iets ingewikkelder te maken, de gevonden entiteiten vormen later, bij de technische implementatie, de basis voor de database. De entiteiten worden dan tabellen of bestanden genoemd. Attribuuttypen worden kolommen of velden genoemd en entiteit-occurrences (exemplaren) rijen of records. Als u op internet extra informatie over normaliseren wilt zoeken, gebruik dan voor uw zoekopdracht de woorden ‘normaliseren’, ‘entiteittype’ of ‘attribuuttype’.
1.4 Normaliseren, nulde normaalvorm De in de voorgaande paragraaf besproken notatiewijze voor gegevensgroepen is gemakkelijk te hanteren. Het blijkt ook eenvoudig te zijn een praktische uitwerking van die notatiewijze te implementeren in relationele databases. Men spreekt ook wel over het omzetten van het functionele model naar het technische ontwerp. We zullen later terugkomen op de praktische implementatie in Access. Omdat we in onze informatiebehoefte willen voorzien door een relationele database (Access) toe te passen, ligt het voor de hand de informatiebehoefte op voorgaande wijze te beschrijven. Normaliseren gebeurt altijd op basis van de informatiebehoefte. Laten we een veelvoorkomende informatiebehoefte als uitgangspunt nemen, zie figuur 1.5. De factuur moet gegenereerd kunnen worden aan de hand van de door ons te bepalen gegevensgroepen. Welke zijn dat en welke kenmerken onderscheiden we?
Verschoor Groothandel Munsterstraat 15
Factuurcode : 030458 PI
3045 LP Rotterdam
Datum
Klant Adres
: 02-04-2014
: Grootbroek P. : Afnamestraat 78
Postc/plaats : 4832 TR Kleinstad Telefoon : 0175-638564
Artikelnr
Omschrijving
DVDREC3 KTV06-M
DVDRecorder Arphlips Kleuren TV ANOY
Figuur 1.5
8
Aantal 2 1
Prijs 625,00 1595,00
Bedrag 1250,00 1595,00
Subtotaal Korting BTWtotaal
2845,00 200,00 2645,00
21% BTW TOTAAL
555,45 3200,45
Hoofdstuk 1 – Normaliseren
Het is niet in één oogopslag duidelijk welke gegevensgroepen en kenmerken (elementen, items) in het voorgaande overzicht een rol spelen. Daartoe is de informatiebehoefte te weinig gestructureerd. We zullen het een en ander moeten uitsplitsen. We maken daarbij gebruik van de techniek van het normaliseren, ontwikkeld door E.F.Codd. We zullen in vier stappen proberen te komen tot gestructureerde gegevensgroepen, die onderling geen afhankelijkheid vertonen. De stappen zijn nulde-, eerste-, tweede- en derde normaalvorm. (In de literatuur wordt nog een aantal extra stappen genoemd, deze vallen echter buiten het bestek van dit hoofdstuk.) De eerste stap is het bepalen van de nulde normaalvorm. Hierin bepalen we welke gegevens uit de informatiebehoefte werkelijk nodig zijn. Het blijkt dat niet alle gegevens uit de informatiebehoefte vastgelegd moet worden. Voordat we hiermee beginnen dient eerst de informatiebehoefte geanalyseerd te worden. Door gesprekken met gebruikers en het management kan noodzakelijke informatie ingewonnen worden. Binnen de ICT wordt deze analyse veelal uitgevoerd door informatieanalisten. In ons voorbeeld zijn de volgende punten uit de analyse gekomen: – bij Factuurcode staat het factuurnummer en de code van de verkoper die de order heeft afgehandeld; – op een factuur kan het artikelnummer slechts één keer voorkomen; – de korting is een bedrag dat overeengekomen is met de verkoper. Kortingen worden altijd op deze manier vastgelegd; – BTW percentage is voor alle artikelen gelijk. Binnen de nulde normaalvorm zijn vijf soorten gegevens te onderscheiden. Elementaire gegevens, constante gegevens, procesgegeven, samengestelde gegevens en groepen gegevens die repeteren; meerdere keren een waarde kunnen aannemen. V Elementaire gegevens: Alle gegevens van de normalisatie moeten enkelvoudig (elementair) zijn. Gegevens die niet verder te verkleinen zijn, ook wel ‘atomair’ genoemd. In figuur 1.5 zijn dit bijvoorbeeld datum, klantnaam en adres. V Constante gegevens: Gegevens die op iedere factuur – in ons voorbeeld – hetzelfde zijn. Gegevens die niet aan veranderingen onderhevig zijn. We doelen hiermee op de gegevens van de groothandel zelf (naam en adresgegevens) en het BTW-percentage. Deze gegevens kunnen in de loop van de tijd uiteraard veranderen, maar gedurende een bepaalde periode mogen we ze als constanten beschouwen. Het is zelfs mogelijk deze gegevens vooraf op de facturen te drukken. Gegevens van dit type nemen we niet op in de lijst met benodigde gegevens. Deze constanten worden vaak in een apart bestand (tabel) opgenomen, zodat de gebruiker wel in staat is wijzigingen aan te brengen. V Procesgegevens: Dit zijn gegevens uit de informatiebehoefte die op eenvoudige wijze berekend kunnen worden uit andere gegevens. We onderkennen in het voorbeeld de procesgegevens ‘Bedrag’, ‘Subtotaal’, ‘BTWtotaal’, ‘BTW’ en ‘TOTAAL’. Als u die gegevens niet hebt, zijn we toch in staat die met de overige gegevens te bepalen. Merk op dat Korting geen procesgegeven is. Het is een afgesproken bedrag met de verkoper, dat ook een ander bedrag had kunnen zijn. Ook de procesgegevens nemen we niet op in de lijst met benodigde gegevens. V Samengestelde gegevens: Gegevens die uit meerdere kenmerken bestaan. Het gegeven ‘Factuurcode’ is een samengesteld gegeven omdat het bestaat uit het factuurnummer, gevolgd door de initialen van de verkoper. We splitsen de factuurcode dus in 9
Aan de slag met databases en Access 2013
twee elementaire gegevens, te weten ‘factuurnr’ en ‘verkopercode’. Het gegeven ‘Postc/ plaats’ is eveneens een samengesteld gegeven. We splitsen dat in ‘postcode’ en ‘plaats’. De zo verkregen gegevens nemen we op in de lijst. V Repeterende groep gegevens: Indien waarden van kenmerken meerdere keren voorkomen op de informatiebehoefte, noemen we dat een repeterende groep (repeating group – RG). In ons voorbeeld komen zowel de waarden van artikelnr (DVDREC3 en KTV06-M), omschrijving, aantal en prijs twee keer voor. Er zijn immers twee verschillende artikelen op de factuur. Op het moment dat op deze factuur nog een derde artikel wordt verkocht, worden de waarden opnieuw ingevuld. Dat groepje hoort dus bij elkaar. Voor iedere nieuwe regel wordt dit groepje gegevens ingevuld. Alle andere gegevens op de factuur hebben slechts één waarde, zoals factuurnummer (030458), verkopercode, datum, etc. Indien op een factuur slechts één artikel wordt verkocht staat voor artikelnummer, omschrijving, aantal en prijs ook maar één waarde ingevuld, maar het moet gelden voor alle facturen. Dus, als op één informatiebehoefte een bepaald kenmerk meerdere waarden kan bezitten, dan behoort dat kenmerk tot een repeterende groep. Ook al is het maar één kenmerk waarvoor dat geldt (kleinst mogelijke groep). Bedrag behoort ook tot de groep, maar wordt niet opgenomen aangezien het een procesgegeven is. We kunnen nu de lijst met benodigde gegevens (kenmerken) gaan opstellen. Deze lijst wordt onze eerste gegevensgroep. Voor iedere factuur moeten deze kenmerken worden vastgelegd. Voor de lijst met gegevens hanteren we de volgende notatiewijze, waarin de repeterende groep (RG) apart is aangegeven: (factuurnr, datum, verkopercode, klant, adres, postcode, plaats, telefoon, RG(artikelnr, omschrijving, aantal, prijs), korting) Alle gegevens op deze lijst noemen we elementaire gegevens. Het zijn alle (elementaire) kenmerken die we moeten bijhouden van ieder afzonderlijke factuur. De gegevensgroep kunnen we al van een naam voorzien, bijvoorbeeld FACTUUR. We laten dit nog even achterwege. We willen passende namen voor onze gegevensgroepen hebben en dat is beter te bepalen nadat alle gegevensgroepen van onze factuur zijn bepaald. Ten slotte moeten we uit de lijst met kenmerken de sleutel kiezen van deze gegevensgroep. De gegevensgroep is een beschrijving voor alle facturen van de onderneming. Het is in dit voorbeeld eenvoudig te zien dat factuurnr het sleutelkenmerk is. Indien dit niet duidelijk te zien is, ga dan als volgt te werk. Stel u hebt alle facturen (pakbonnen, containerlaadlijsten, crediteurenlijsten, etc.) fysiek voor u. Met welk kenmerk (of kenmerken) op de facturen (pakbonnen, containerlaadlijsten, crediteurenlijsten, etc.) is precies één exemplaar te selecteren? Dat kenmerk of kenmerken is de sleutel. Ook als u meerdere kenmerken hebt, noem u dat de sleutel van de gegevensgroep (niet sleutels). Soms hebben we daarbij de vrijheid te kiezen uit meer kandidaten, we noemen dat kandidaat-sleutels. Een voorbeeld hiervan is het studentnummer zoals gebruikt op een instituut en het nummer waaronder de student staat ingeschreven bij de IB-groep in Groningen. In ons voorbeeld hebben we echter geen vrijheid. Alleen het kenmerk factuurnr komt in aanmerking als sleutel. Van alle andere kenmerken zijn de waarden over alle facturen immers niet uniek, alle waarden kunnen meer dan één keer voorkomen. Klanten kunnen meerdere keren bestellen, desgewenst op dezelfde dag, dus ook klant en datum samen is geen kandidaat-sleutel. De kenmerken die in aanmerking komen als 10
Hoofdstuk 1 – Normaliseren
sleutelkenmerk zijn de kenmerken die niet in de repeterende groep voorkomen. In de gevonden lijst is het de gewoonte de sleutel als eerste op te nemen en te onderstrepen. De op deze manier gevonden lijst staat in de nulde normaalvorm, kortweg 0NV. 0NV (factuurnr, datum, verkopercode, klant, adres, postcode, plaats, telefoon, RG(artikelnr, omschrijving, aantal, prijs), korting) Opmerking In de literatuur wordt de nulde normaalvorm ook wel op een andere wijze opgesteld. Daarbij neemt men de proces- en samengestelde gegevens ook op. Tevens laat men het bepalen van de sleutel (nog) achterwege. Het verwijderen van de proces- en samengestelde gegevens, alsmede het bepalen van de sleutel, vindt dan plaats tijdens het opstellen van de volgende normaalvorm. Er is voor de bovenstaande notatiewijze gekozen omdat deze manier van werken, naar mijn mening, beter aansluit bij de betekenis van de diverse normaalvormen.
Er is een filmpje over dit onderwerp beschikbaar: 1-1 Normaliseren 0NV. Maak opgave 1.1 (paragraaf 1.15) tot en met 0NV.
1.5 Normaliseren, eerste normaalvorm De volgende stap – het bepalen van de eerste normaalvorm – is het verwijderen van de repeterende groep(en) uit de 0NV gegevensgroep. Hiervan wordt een nieuwe gegevensgroep gemaakt. Vervolgens wordt het sleutelkenmerk uit 0NV gekopieerd in de nieuwe gegevensgroep en als laatste wordt de sleutel bepaald in de nieuwe groep. Deze drie deelstappen gaan we toelichten. Stap 1 Verwijder de repeterende groep(en) en maak daarvan (een) nieuwe gegevensgroep(en). In ons voorbeeld krijgen we dan: (factuurnr, datum, verkopercode, klant, adres, postcode, plaats, telefoon, korting) (artikelnr, omschrijving, aantal, prijs) We hebben nu twee gegevensgroepen gekregen. De oorspronkelijke (zonder de repeterende groep) en de repeterende groep zelf. Stap 2 Voeg aan de nieuwe groep(en) het sleutelkenmerk uit de nulde normaalvorm toe; factuurnr dus. (factuurnr, datum, verkopercode, klant, adres, postcode, plaats, telefoon, korting) (factuurnr, artikelnr, omschrijving, aantal, prijs) 11
Aan de slag met databases en Access 2013
In die nieuwe gegevensgroep worden alle factuurregels van alle facturen geregistreerd. De factuurgegevens en de factuurregels zijn nu in twee groepen verdeeld. Door het toevoegen van het factuurnr in de nieuwe groep is te bepalen welke factuurregels bij welke factuur hoort. Merk op dat factuurnr in de nieuwe groep niet onderstreept is in stap 2. Het sleutelkenmerk wordt gekopieerd in de nieuwe groep, maar dat wil niet zeggen dat het tot de sleutel behoort in de nieuwe groep. Het bepalen van de sleutel vindt plaats in stap 3. Stap 3 Bepaal de sleutel van de nieuwe gegevensgroep. In deze stap treden de meeste fouten op. De gegevens van de factuurregels van alle facturen staan in deze nieuwe gegevensgroep, zie figuur 1.6. Factuurnr …. 030458 030458 030459 030460 030460 030460 030461
Artikelnr ….. DVDREC3 KTV06-M HDREC163 KTV47-LCD DVDREC3 MP4-134A …..
Omschrijving ….. DVDRecorder Arphilips Kleuren TV ANOY HDRecorder Sany Kleuren TV Panavisie DVDRecorder Arphilips MP4 speler CVJ …..
Aantal … 2 1 5 3 3 8 …
Prijs ...,.. 625,00 1595,00 293,50 1100,00 625,00 39,95 ...,..
Figuur 1.6
In deze groep komt het factuurnummer 030458, uit ons voorbeeld, bij beide verkochte artikelen voor. Bij iedere regel wordt dus ook het factuurnummer genoteerd. Hierdoor kan factuurnr niet de sleutel zijn. Het is immers in deze gegevensgroep niet uniek. Ook artikelnummer kan niet de sleutel zijn. Het artikelnr DVDREC3 komt in figuur 1.6 al twee keer voor en is dus niet uniek. De combinatie factuurnummer en artikelnummer is wel uniek. In ons voorbeeld komt immers maar één keer het artikelnummer voor op een factuur, zoals bepaald in de informatiebehoefte. We spreken van een meervoudige- of samengestelde sleutel. We krijgen nu als eerste normaalvorm (1NV). 1NV (factuurnr, datum, verkopercode, klant, adres, postcode, plaats, telefoon, korting) (factuurnr, artikelnr, omschrijving, aantal, prijs) We merken op dat factuurnr in de oorspronkelijke groep de sleutel is en dat die in de nieuwe groep ook onderdeel is van de sleutel. Dat is niet altijd zo. Stel dat de artikelnummers wel meerdere keren op een factuur noodzakelijk zijn. Een keer voor een prijs van 100,00 euro en voor een prijs van 75,00 euro, in verband met een kleine beschadiging. U dient dan een dummy kenmerk toe te voegen, bijvoorbeeld regelnummer. Als dit een doorlopend regelnummer is voor alle facturen, is alleen regelnummer de sleutel! Het kenmerk factuurnr blijft wel bestaan, anders is er geen koppeling meer naar de eerste gegevensgroep.
12
Hoofdstuk 1 – Normaliseren
Tip Er is een filmpje over dit onderwerp beschikbaar: 1-2 Normaliseren 1NV. Het bepalen van de sleutel in de eerste normaalvorm is lastig. In stap 3 wordt in het voorbeeld gevraagd: wat is de sleutel van gegevensgroep (factuurnr, artikelnr, omschrijving, aantal, prijs)? Een hulpmiddel is deze gegevens voor te stellen als kolomkoppen in Excel. Daaronder staan dan de gegevens, zie figuur 1.6. Excel wordt hierbij denkbeeldig gebruikt en heeft niets te maken met een database. Het is alleen bedoeld als hulpmiddel voor het bepalen van de sleutel in de eerste normaalvorm. Nu moet je een filter gaan bepalen, zodanig dat altijd slechts één regel met gegevens wordt getoond. Als een filter wordt geplaatst op alleen factuurnr, worden bij 030458 al twee regels getoond en het moet altijd één regel zijn. Dus factuurnr als sleutel valt af. Zou gefilterd zijn op 030459, dan is wel één regel zichtbaar, maar het moet gelden voor alle factuurnummers. Filteren op alleen artikelnr levert niet voor alle artikelnummers één regel op. Dat treedt alleen op als een artikel door slechts één klant is gekocht. Een filter op factuurnr en artikelnr samen levert wel altijd één regel, omdat is vastgelegd dat op een factuur maar één keer het artikel mag voorkomen. Factuurnr en artikelnr samen vormen dan de sleutel van deze gegevensgroep. Merk nog op dat indien alle omschrijvingen van de artikelen verschillend zouden zijn, ook factuurnr en omschrijving samen een kandidaat-sleutel zijn. Maar daarvoor wordt niet gekozen. Een vuistregel is omschrijvingen en namen niet als sleutelkenmerk te gebruiken, zie ook paragraaf 1.14.
Maak opgave 1.1 (paragraaf 1.15) tot en met 1NV.
1.6 Normaliseren, tweede normaalvorm Vanuit de eerste normaalvorm kunnen we de volgende stap gaan zetten. De tweede normaalvorm moet nu worden opgesteld. Om de tweede normaalvorm te bereiken, dienen we alle kenmerken te verwijderen die functioneel afhankelijk zijn van slechts een deel van de sleutel. Daarbij geldt dat kenmerk A functioneel afhankelijk is van kenmerk B, als bij iedere waarde van B precies één waarde van A hoort. De kenmerken die functioneel afhankelijk zijn vormen een nieuwe gegevensgroep. Dit verdient enige toelichting. In de eerste gegevensgroep uit 1NV zijn alle kenmerken functioneel afhankelijk van het sleutelkenmerk factuurnr. Als u een willekeurig factuurnummer neemt, dan hoort daar precies één datum, verkopercode, klant, adres, postcode, plaats, telefoon en korting bij. Dat geldt voor alle factuurnummers. Indien u bijvoorbeeld factuurnummer 030458 neemt, krijgt u de benoemde gegevens zoals in figuur 1.5 te zien. Uiteraard geldt dit niet andersom, want bij één datum kunnen 10-tallen factuurnummers horen. Bij gegevensgroepen met een enkelvoudig sleutelkenmerk is dat altijd zo. Bij de tweede normaalvorm is het dus niet nodig die gegevensgroepen te onderzoeken. Ze zullen geen nieuwe gegevensgroepen opleveren. We dienen dus alleen gegevensgroepen met een meervoudige sleutel (samengestelde sleutel) te onderzoeken. Indien u in 1NV alleen gegevensgroepen 13
Aan de slag met databases en Access 2013
hebt met een enkelvoudige sleutel, hoeft u verder niets te ondernemen in 2NV. Er geldt dan: 2NV = 1NV. Onze tweede gegevensgroep heeft een meervoudige sleutel. We moeten nu onderzoeken of er niet-sleutelkenmerken zijn (omschrijving, aantal, prijs) die functioneel afhankelijk zijn van een deel van de sleutelkenmerken, dat wil zeggen met alleen factuurnummer of artikelnummer. Met andere woorden, als u een willekeurig factuurnummer hebt, hoort daar dan altijd precies één omschrijving, aantal of prijs bij? Nee, bij één factuurnummer kunnen meerdere omschrijvingen, aantallen en prijzen horen, zie bijvoorbeeld figuur 1.6. Tussen factuurnr en de niet-sleutelkenmerken is geen functionele afhankelijkheid. Nu hetzelfde met artikelnummer. Als u een willekeurig artikelnummer hebt, hoort daar dan altijd precies één omschrijving, aantal of prijs bij? Een artikelnummer heeft altijd één omschrijving (afhankelijkheid!), maar meerdere aantallen (geen afhankelijkheid). Op de ene factuur verkoop u van hetzelfde artikel 3 stuks en op een andere factuur 2 stuks. Heeft een artikelnummer – over alle facturen – altijd één prijs? Nee (geen afhankelijkheid), prijzen kunnen immers in de tijd veranderen. Bij het aanbrengen van een prijswijziging mogen de prijzen bij eerder aangemaakte (en afgedrukte) facturen niet worden veranderd. Bovendien kan het voorkomen dat bij een artikel een afwijkende prijs wordt genoteerd, bijvoorbeeld als het artikel is beschadigd. Wel heeft een artikel (meestal) een adviesverkoopprijs. Als dat bestaat in de gegevensgroep, heeft ieder artikelnummer altijd precies één adviesverkoopprijs (afhankelijkheid!). Ook als de adviesverkoopprijs wordt verhoogd, heeft het artikelnummer nog steeds precies één adviesverkoopprijs (de nieuwe). Omschrijving en adviesverkoopprijs (extra toegevoegd) zijn dus functioneel afhankelijk van artikelnummer. Anders, een artikelnummer heeft altijd één omschrijving en één adviesverkoopprijs. De kenmerken die functioneel afhankelijk zijn van een deel van de sleutel (artikelnummer) nemen we op in een nieuwe gegevensgroep en verwijderen we uit de oorspronkelijke gegevensgroep. In die groep wordt het deel-sleutelkenmerk de sleutel. We krijgen dus een nieuwe gegevensgroep met artikelnummer als sleutel en de kenmerken omschrijving en adviesverkoopprijs. Zo ontstaat de tweede normaalvorm (2NV). 2NV (factuurnr, datum, verkopercode, klant, adres, postcode, plaats, telefoon, korting) (factuurnr, artikelnr, aantal, prijs) (artikelnr, omschrijving, adviesverkoopprijs) Merk op dat artikelnr uit de tweede gegevensgroep niet verwijderd is. Er zou anders geen koppeling meer zijn naar de derde gegevensgroep. In de eerste gegevensgroep staan de basisgegevens van de factuur. Via het factuurnummer in de eerste groep zijn in de tweede groep de bijbehorende artikelen te bepalen, inclusief het aantal dat besteld is en de betaalde prijs. Via het artikelnummer uit de tweede gegevensgroep valt in de derde gegevensgroep de omschrijving van het artikel en de adviesprijs te bepalen.
14
Hoofdstuk 1 – Normaliseren
ip T Er is een filmpje over dit onderwerp beschikbaar: 1-3 Normaliseren 2NV. Een hulpmiddel om de afhankelijke kenmerken te bepalen in groepen met een samengestelde sleutel is de gegevens voor te stellen in Excel. Zoals bij de tip voor het bepalen van de sleutel in 1NV wordt Excel denkbeeldig toegepast en heeft het niets met een database te maken. Als de gegevens op een sleutelkenmerk worden gefilterd, zijn er dan niet-sleutelkenmerken die altijd hetzelfde zijn? Als u filtert op factuurnr 030460, zie bijvoorbeeld figuur 1.6, zijn dan alle omschrijvingen, aantallen of prijzen altijd hetzelfde? Nee, dat is onzin, dus geen afhankelijkheden op basis van factuurnr. Als u zou filteren op artikelnr DVDREC3, zie bijvoorbeeld figuur 1.6, dan is de omschrijving altijd hetzelfde, ook als er meerdere regels worden weergegeven. Dus omschrijving is afhankelijk van artikelnr. De prijs is in figuur 1.6 ook hetzelfde als u filtert op DVDREC3, maar het moet voor alle regels hetzelfde zijn. Als we gegevens zouden tonen over meerdere maanden, dan kunnen er verschillende prijzen optreden. Bij prijswijzigingen, maar bijvoorbeeld ook als een beschadigd artikel tegen een lagere prijs is verkocht. Dus prijs is niet afhankelijk van artikelnr.
Maak opgave 1.1 (paragraaf 1.15) tot en met 2NV.
1.7 Normaliseren, derde normaalvorm Nu rest ons nog de laatste stap in het normalisatieproces. Uitgangspunt is de tweede normaalvorm. Het proces van de derde normaalvorm lijkt op het proces van de tweede normaalvorm. We gaan opnieuw functionele afhankelijkheden zoeken tussen kenmerken. In de tweede normaalvorm wordt gezocht naar functionele afhankelijkheden tussen sleutelkenmerken en niet-sleutelkenmerken (alleen bij gegevensgroepen met een meervoudige sleutel). Bij de derde normaalvorm wordt per gegevensgroep gezocht naar functionele afhankelijkheid tussen alle niet-sleutelkenmerken. De kenmerken die functioneel afhankelijk zijn, worden verwijderd uit die gegevensgroep en daarvan wordt een nieuwe gegevensgroep gemaakt. Het kenmerk waarvan ze functioneel afhankelijk zijn, wordt in de nieuwe groep de sleutel. We onderzoeken de eerste groep van 2NV. We moeten zoeken naar functionele afhankelijkheden tussen de niet-sleutelkenmerken. Dat zijn de kenmerken datum tot en met korting. Adres, postcode, plaats en telefoon zijn functioneel afhankelijk van klant. Bij een klant vinden we immers altijd precies één waarde voor adres, postcode, plaats en telefoon. We krijgen dan een nieuwe gegevensgroep met klant, adres, postcode, plaats en telefoon. We verwijderen uit de eerste gegevensgroep alleen de kenmerken die functioneel afhankelijk zijn, dus adres, postcode, plaats en telefoon. Klant dus niet, die blijft in de oorspronkelijke gegevensgroep staan. Klant wordt in de nieuwe gegevensgroep de sleutel. In de tweede gegevensgroep bestaat geen functionele afhankelijkheid tussen de nietsleutelkenmerken aantal en prijs.
15
Index Symbolen < 71 <= 71 <> 71 = 71 > 71 >= 71 0NV 11 1NV 12 2NV 14 3NV 17 #Error 241 #Fout 241 #Naam? 241 #Name? 241 A Aantal 74 decimalen 244 records 166 waarden 166 achtergrondkleur 201 Actiecatalogus 188 Action Catalog 188 Add-Ins 337 Afbeelding 223, 267 Afbeeldingsformaatmodus Kader niet vullen 131 Kader vullen 131 Uitsnede 131 Afdrukvoorbeeld 101 After Update 225 Afwisselende rijkleur 100 ALIAS 287 Align 156 Text 324 Alignment Text 244 Align Right 182 All Actions Show 192 Alle acties weergeven 192
Alleen toevoegen 325 AllowAddition 242 Allow Multiple Values 133 Allow Value List Edits 136 Alternate Row Color 100 And 71 AND 280 Append Only 325 Application Icon 271 Application Options 328 Applications Visual Basic for 215 AS 292 ASC 289 atomair 9 Attachment 50, 50 attribuuttype 7 attribuutwaarde 7 AutoExec 192 AutoKey 192 AutoNumber 50 AutoNummering 50 autorisatie 4 Avg 74 AVG 290 B Back Color 201 Bar Message 341 Before Section 183 benoemde macro maken 211 Berekend 50 berekend veld 78 Berichtenbalk 341 Berichtenvak (hoofdgroep Macro) 190 BerichtInstellen 227 Bestaande velden toevoegen 123 bestanden 8 Best Fit 146
Best passend 146 besturingselementen 142 Schikken van 155 Wizard voor 147 besturingselementnaam 205 Between 71 BETWEEN 281 beveiligingswaarschuwing 53, 91 Bewerken lijst met waarden 136 bewerkingen in SQL rekenkundige 290 Bewerkingsformulier lijstitems 146 Bij geen gegevens 259 Bij Klikken 205 Bijlage 50 Bijlagenveld 126 FileData 130, 131 FileName 130, 131 FileType 130, 131 Bij opmaken 254 bijschrift 321 Bij Sluiten 262 bijwerken Na 225 trapsgewijs 64 Blocks Data 211 Border Style 100 Box Combo 131 Builder Expression 178, 195, 203 Macro 225 Button Option 122 Toggle 122 Byte 50
343
Aan de slag met databases en Access 2013
C Calculated 50 cartesisch product 252 Catalog Action 188 Center Trust 339 Click On 205 Close 51 On 262 Color Back 201 Gridline 253 Column Select 100 column history Show 325 Combo Box 131 comprimeren Database 117 conceptuele schema 4 Conditional Formatting 151 Constante gegevens 9 constantentabel 218 Control Wizard 147 Control Name 205 Control Padding 122 ControlTip Text 156 COUNT 290 Count Records 166 Count Values 166 Create Named Macro 211 Currency 50 Cycle 222 D database -administrator 4 comprimeren 117 Current 328 herstellen 117 Huidige 328 kopie 88 selecteren 52
344
databasemanagementsystem 3 Data Blocks 211 Data macros 187, 210 After Delete 211 After Insert 210 After Update 210 Before Change 210 Before Delete 210 Create Named Macro 211 CreateRecord 211 EditRecord 211 ForEachRecord 211 LookupRecord 211 SendEmail 211 SetField 211 datamodel 4 functionele 25 logisch 4 Datepart 72 Date Picker Show 324 Date/Time 49 datumaanduiding 280 Datumkiezer weergeven 324 Datum/tijd 49 Day 71 DBMS 3 decimalen aantal 244 Decimal Places 244 Default Value 217 DELETE 311 Delete Page 152 derde normaalvorm 15 DESC 289 Design Tabel 51 Designers Object 332 Design View 55, 101 detail 159 Developer Extensions 273 Display Form Web 329 DISTINCT 282
dubbele repeterende groep 31 duplicaten verbergen 160 Duplicates Hide 160 E Eerste 75 eerste normaalvorm 11 Eigenschappenvenster 80 Eindtotaal 166 elementaire gegevens 9, 10 embedded macro 187 Enabled 142 Enable Live Preview 328 Enkele precisie 50 entiteit-occurrence 7 entiteittype 7 Equal Horizontal 156 Etiketten 107 Event 201 exemplaar 6 Expressie 325 expressies Opbouwfunctie voor 195, 203 Expression 325 Expression Builder 178, 195, 203 Extensions Developer 273 F Field List 134 Field Width 146 filteren 57 Filter in-/uitschakelen 58 Filters Datumfilters 57 Getalfilters 57 Tekstfilters 57 First 75 Fit Best 146 Footer Page 159 Report 159
Index
foreign key 24, 276 Formaat en volgorde 156 Format 244 On 254 Text 324 Formatting Conditional 151 formulier Autoformulier 112 met wizard 113 snelle methode 112 verwijzingen naar 202 Wizard 113 Form Wizard 113 Functie Choose 180 Date 217 Datepart 72 DateSerial 72 Day 71 Hour 71 IIf 79 Month 71 MsgBox 227 Now 159 Nz 262 Switch 184 Weekday 217 Year 217 functionele datamodel 25 G Gebeurtenis 201 gecorreleerde query 305 geen gegevens Bij 259 gegevens constante 9 elementaire 10 Elementaire 9 Samengestelde 9 Gegevensbladweergave 65 Gegevensblokken 211 gegevensgroep 6 gegevensmacro 187, 209, 210
Gegevensmacro Benoemde macro maken 211 EmailVerzenden 211 LokaleVarInstellen 211 Na bijwerken 210 Na invoegen 210 Na verwijderen 211 RecordBewerken 211 RecordMaken 211 RecordOpzoeken 211 VeldInstellen 211 VoorElkRecord 211 Voor verwijderen 210 Voor wijzigingen 210 gegevensstructuren 20 Gem 74 gestapelde weergave 102 Grand Total 166 Gridline Color 253 Style 177, 253 Width 253 groep dubbele repeterende 31 Repeterende 10 groeperen 82 Groeperen en sorteren 166 Groepering en totalen 166 Groepsvak 123 Grootte/ruimte 156 Group and Sort 166 GROUP BY 293 Grouping Options 163 Grouping & Totals 166 H HAVING 294 Header Page 159 Report 159 Header/Footer 130 herstellen Database 117 Hide Duplicates 160 homoniemen 21
hoofdformulier 145 Horizontaal verdelen 156 Horizontaal vergroten 156 Horizontal Equal 156 Increase 156 Hour 71 Hyperlink 50 I Icon Application 271 identity integrity 7, 276 Import 242 Importeren 242 In 71 IN 281 inconsistentie 2 Increase Horizontal 156 Indelingsweergave 99 indexeren 322 informatieanalisten 9 ingeschakeld 142 Ingesloten macro 187 inner join 308 Inputmask 218 Input Mask 244 INSERT INTO 311 Insert Page 152 Insert Right 181 integer Lange 50 integreren 20 integriteit referentiële 24, 64 integrity identity 7, 276 referential 24, 276 IntelliSense 196 invoegen Pagina 152 Invoermasker 218, 244, 318 Invoertoepassingen 337 Is Not Null 71 Is Null 71 IS NULL 281 item 6 345
Aan de slag met databases en Access 2013
J Ja/Nee 50 join inner 308 outer 308 right 308 speciale 308 JOIN 285 joineigenschap 73 K Kader niet vullen Afbeeldingsformaatmodus 131 Kader vullen Afbeeldingsformaatmodus 131 kandidaat-sleutels 10 kenmerken 6 Keuzelijsten 131 Keuzelijst met meerdere waarden 133 Value 136 Keuzerondje 122 key 6 foreign 24, 276 Klikken Bij 205 knopinfo 156 kolombreedte 139 Kolomgeschiedenis weergeven 325 kolommen 8, 275 Kolom selecteren 100 kopie van database 88 koptekst 291 Koptekst/voettekst 130 Korte tekst 49 L Laatste 75 Lange integer 50 Lange tekst 49 Last 75 Layout View 99 left join 308
346
Lengte nul toegestaan 322 lijstbreedte 139 lijstitems bewerken 135 Bewerkingsformulier 146 Lijst met velden 134 lijst met waarden Bewerken 136 Like 71 LIKE 281 List Field 134 List Items Edit Form 146 Live Preview Enable 328 Livevoorbeeld inschakelen 328 locaties Vertrouwde 340 Locked 142 logisch datamodel 4 Logo 130 Long Text 49 Lookup Wizard 50, 93 M macro 187 AlleTijdelijkeVariabelenVerwijderen 204 Als 195 ApplyFilter 190 AutoExec 192 AutoKeys 192 Berichtenvak 190 CloseWindow 190 Comment 197 Conditions 206 EigenschapInstellen 205 embedded 187 Filter Toepassen 190 GoToControl 205 Groep 197 Group 197 If 195 Ingesloten 187 MacroStoppen 206
MessageBox 190 NaarBesturingselementGaan 205 ObjectSelecteren 207 Opmerking 197 RemoveAllTempVars 204 RemoveTempVar 204 Runnen 191 SelectObject 207 SetProperty 205 SetTempVar 203 Set Value 202, 205 StopMacro 206 Submacro 197 TijdelijkeVariabeleInstellen 203 TijdelijkeVariabeleVerwijderen 204 Uitvoeren 191 VensterSluiten 190 voorwaarden 206 WaardeInstellen 202, 205 Macro DoMenuItem 227 GoToRecord 226 Instellingen 341 MenuOpdrachtUitvoeren 227 NaarRecordGaan 226 Macro Builder 225 macro’s Opbouwfunctie voor 225 macros Data 187, 210 Mask Input 244 Max 74 MAX 290 meerdere tabellen 285 meerdere waarden Keuzelijst 133 velden met 133 Meerdere waarden toestaan 133 meervoudige sleutel 12 MenuOpdrachtUitvoeren 228
Index
menustructuur 219 Message Bar 341 Min 74 MIN 290 Month 217 MSI-bestand 273 Multiple Values Allow 133 N Na bijwerken 225 Name Control 205 Narrow 122 Navigatie 263 -formulier 263 gedeelte 53 Navigatieopties 272 Navigation 263 Navigation Options 272 nesten 208 No Data, On 259 normaalvorm derde 15 eerste 11 nulde 8 tweede 13 normaliseren 9 Not 71 NOT 281 notatie 244, 315 Not Null Is 71 nulde normaalvorm 8 NULL 281 Number 49 Numeriek 49 O objecten weergeven Systeem 272 Objecttype 54 Object Type 54 ODBC 331 Ole-object 50 OLE object 50
On Click 205 On Close 262 On Format 254 Only Append 325 On No Data 259 ontwerp Query 67 Ontwerpweergave 55, 101 Opbouwfunctie 178 voor expressies 195, 203 voor macro’s 225 opdrachtknop 152 Wizard 152 OpdrachtUitvoeren 227 Open 54 Openen 54 opmaak tekst met 324 Voorwaardelijk 151 opmaken Bij 254 Opties voor Access/Access Options Add-Ins 337 Controle 334 Current Database 328 Datasheet 331 Gegevensblad 331 Huidige database 328 Invoegtoepassingen 337 Object Designers 332 Ontwerpfuncties voor objecten 332 Populair 328 Popular 328 Proofing 334 Trustcentrum 339 Vertrouwenscentrum 339 Opties voor groeperen 163 Opties voor opzoeken met filter 331 Opties voor totalen 163 Option Button 122 Options Application 328
Grouping 163 Navigation 272 Opvulling bepalen 122 Opzoeken Wizard 50, 93 Or 71 OR 280 Order Page 152 ORDER BY 289 Ordering Sizing & 156 outer join 308 P Padding Control 122 Page Delete 152 Footer 159 Insert 152 Order 152 Setup 101 Page Header 159 Page/Pages 159 Pagina-instellingen 101 Pagina invoegen 152 paginakoptekst 159 Pagina verwijderen 152 paginavoettekst 159 paginavolgorde 152 passend Best 146 Passend maken 223 permissie 4 Picture 223, 267 Picture Size Mode Clip 131 Stretch 131 Zoom 131 Places Decimal 244 Plain Text 324 precisie Enkele 50 Preview Print 101 347
Aan de slag met databases en Access 2013
primaire sleutel 51 Primary Key 51 Print Preview 101 Procesgegevens 9 product cartesisch 252 Program Flow 195 Programmaverloop 195 Property Sheet 80 Q query bijwerkquery 87 gecorreleerde 305 groepeerquery 82 ontwerp 67 opvraagquery 77 Queryontwerp 75 Runnen 68 selectiequery 66, 69 tabelmaakquery 91 toevoegquery 91 Uitvoeren 68 verwijderquery 89 QueryOpnieuwUitvoeren 226 R Randstijl 100 rapport 157 Header 182 koptekst 159 met wizard 102 Page Header 182 Paginakoptekst 182 Rapportkoptekst 182 snelle methode 99 voettekst 159 weergave 101 Wizard 102 Rasterlijnbreedte 253 Rasterlijnkleur 253 Rasterlijnstijl 253 Rasterlijnstijlboven 177 Rechts invoegen 181 rechts uitlijnen Tekst 182
348
record 8 aantal 166 filteren 57 sorteren 57 toevoegen 55, 56 Unieke 81 vervangen 60 verwijderen 55, 57 wijzigen 57 zoeken 58 Records Count 166 sorteren 57 Unique 81 Recordsortering opheffen 57 redundantie 3 referential integrity 24, 276 referentiële integriteit 24, 64 rekenkundige bewerkingen in SQL 290 rekenveld 78 rekenveld in ontwerpweergave 184 relaties joineigenschappen 73 leggen 62 verwijderen 66 repeating group 10 Repeterende groepen 10 Report Footer 159 Report Header 159 Report View 101 Report Wizard 102 ReQuery 226 Resultaattype 325 Result Type 325 RibbonName 272 RibbonXML 272 Rich Text 324 Right Insert 181 right join 308 rijbron 138 rijen 275 rijkleur afwisselende 100
Row Color Alternate 100 Row Source 138 Rule Validation 244 Runnen macro 191 Runnen query 68 Runtime versie 273 S Samengestelde gegevens 9 samengestelde sleutel 12 schema conceptuele 4 Schikken van besturings elementen 155 SearchForRecord 225 Section Before 183 SELECT 278 Select Column 100 Server SQL 333 Setup Page 101 SetWarnings 227 Sheet Property 80 Short Text 49 Show All Actions 192 Show column history 325 Show Date Picker 324 Show System Objects 272 Single 50 Size Mode Picture 131 Size/Space 156 Sizing & Ordering 156 sleutel 6, 51 kandidaat- 10 samengestelde 12 vreemde 24, 276 Sluiten 51 Bij 262 Som 74 Sort Group and 166
Index
sorteren Groeperen en 166 Records 57 speciale joins 308 SQL 275 SQL Server 333 Stacked 102 Stamgegevens 264 Standaardwaarde 217, 321 StDev 74 Style Border 100 Gridline 253 subformulier 145 subgegevensblad 66 Verwijderen 112 Submacro 192 subquery 298 Sum 74 SUM 290 Summary Options 163 synoniemen 21 Systeemobjecten weergeven 272 System Objects Show 272 T tabbesturingselement 147 tabbladen 147 Tab Control 147 tabel 275 aanpassen 55 selecteren 53 Tabel Design 51 tabelindeling 102 tabellen 8 meerdere 285 Tabelontwerp 51 tabelvorm 102 Tabstop 223 tabtoets Werking 222 Tabular 102 tekst met opmaak 324 Tekstopmaak 324
Tekst rechts uitlijnen 182 Tekstuitlijning 244, 324 TempVars 206 Text ControlTip 156 Pain 324 Rich 324 Validation 244 Text Align 324 Text Alignment 244 Text Format 324 Thema’s 101 Themes 101 tijd Datum/ 49 tijdelijke variabele 203 TempVars 206 Time Date/ 49 Titel 130 Toepassingsopties 328 Toepassingspictogram 271 toevoegen Alleen 325 Toevoegingen toestaan 242 To Fit 223 Toggle Button 122 totalen Groepering en 166 Totalen 60 Aantal 60 Gemiddelde 60 Group By 82 Maximum 60 Minimum 60 Som 60 Standaarddeviatie 60 Variantie 60 Totals Grouping & 166 Transparant 100 Transparent 100 trapsgewijs bijwerken 64 trapsgewijs verwijderen 64 triggers 187, 210 Trust Center 339 tweede normaalvorm 13
U uitgevers Vertrouwde 339 Uitlijnen 156 uitsnede afbeeldingsformaatmodus 131 uitvoeren 284 Uitvoeren macro 191 Uitvoeren query 68 Unieke records 81 Unieke waarden 81 UNION 312 Unique Records 81 Unique Values 81 Update After 225 UPDATE 311 USysRibbons 272 V validatieregel 244, 321 validatietekst 244, 322 Validation Rule 244 Validation Text 244 Value Default 217 Value List Edits Allow 136 Values Count 166 Unique 81 Valuta 50 Var 75 variabele tijdelijke 203 VBA 215 veld berekend 78 Veldbreedte 146 veldeigenschappen 313 velden 8, 45 Lijst met 134 velden met meerdere waarden 133 velden toevoegen Bestaande 123 349
Aan de slag met databases en Access 2013
veldlengte 313 verbergen duplicaten 160 verdelen Horizontaal 156 vereist 322 vergrendeld 142 vergroten Horizontaal 156 Versmallen 122 Vertrouwde locaties 340 Vertrouwde uitgevers 339 Vertrouwenscentrum 339 Vervangen 60 verwijderen Pagina 152 trapsgewijs 64 verwijzingen naar formulieren 202 view 3 View Design 55, 101 Report 101 Visual Basic for Applications 215
350
volgorde 288 Formaat en 156 Voor sectie 183 Voorwaardelijk opmaak 151 vreemde sleutel 24, 276 W waarden aantal 166 Unieke 81 waarden toestaan Meerdere 133 Waarschuwingsdriehoekje rapporten 160 wachtwoord 319 Web Display Form 329 Webweergaveformulier 329 Weekday 71 weergave gestapelde 102 weergeven Alle acties 192 Datumkiezer 324 Kolomgeschiedenis 325 Werking tabtoets 222
WHERE 278 Width Field 146 Gridline 253 Wisselknop 122 wizard Form 113 Lookup 50, 93 Report 102 wizard Control 147 wizard Formulier 113 wizard Opzoeken 50, 93 wizard Rapport 102 wizard voor besturings elementen 147 Y Year 71 Yes/No 50 Z Zoeken 59 Zoeken gegevens 136 ZoekenNaarRecord 225
Het boek is geschikt voor Microsoft Access 2013 (Nederlandse en Engelse versie). Dankzij de vele vragen en gevarieerde opgaven in het boek en de portal AcademicX.nl (met directe feedback!) is Aan de slag met databases en Access 2013 zeer geschikt om zelfstandig door te werken. De benodigde hulpbestanden zijn via de portal beschikbaar. Via de portal zijn ook veel filmpjes te bekijken die de verschillende onderwerpen extra toelichten.
Ben Groenendijk is docent aan de Hogeschool Rotterdam.
Aan de slag met databases en Access 2013
Met Aan de slag met databases en Access 2013 leer je op een praktische manier hoe je een informatiebehoefte omzet in een op professioneel niveau bruikbare database. Aan bod komen onder meer normaliseren, eenvoudige bewerkingen in Access, formulieren en rapporten, en eenvoudige toepassingen van SQL (vanuit Access).
Bij het opzetten van de applicaties hoef je niet te programmeren: je bouwt de hele applicatie op door de in Access aanwezige bouwstenen op grafische wijze naar eigen inzicht in te richten en aan elkaar te koppelen. Het resultaat is een professioneel ogende applicatie.
Groenendijk
Aan de slag met … is een boekenreeks voor hbo-ict. Elk boek behandelt een specifiek softwarepakket of programmeertaal. Op de portal AcademicX.nl kunnen studenten toetsen en oefeningen maken en extra studiemateriaal raadplegen. Daarmee bereiden zij zich optimaal voor op het tentamen.
Aan de slag met databases en Access 2013
Van ontwerp tot professioneel gebruik Ben Groenendijk
+ONLINE
OEFENIN
KIJK OP W W W. A C ADEMICX .NL VOOR AL LE E X T R A’ S
978 90 395 2759 7 123 / 995
9 789039 527597
Zevende druk
GEN