Database-ontwerp Database-ontwerp

advertisement
Alle rechten voorbehouden. Behoudens de uitdrukkelijk bij wet bepaalde uitzonderingen
mag niets uit deze uitgave worden verveelvoudigd, opgeslagen in een geautomatiseerd
gegevensbestand of openbaar gemaakt, op welke wijze ook, zonder de uitdrukkelijke
voorafgaande en schriftelijke toestemming van het VVKSO.
Database-ontwerp
Database-ontwerp
Ondersteuning Informaticabeheer
Ondersteuning Informaticabeheer
Marleen Decuyper
Ria Van Eysendeyk
Marleen Decuyper
Ria Van Eysendeyk
IB-3008-01
IB-3008-01
2002
2002
D/2002/7841/049
Inhoud
1
Werken met data ..................................................................................................... 5
1.1
1.2
1.2.1
1.2.2
1.2.3
1.2.4
1.3
1.4
1.5
Databases................................................................................................................. 5
Databasesystemen ................................................................................................... 7
RDBMS ..................................................................................................................... 7
OODBMS .................................................................................................................. 8
ORDBMS .................................................................................................................. 8
Data en MS-Office .................................................................................................... 8
Stappen bij het ontwerpen van een database .......................................................... 9
Datamodel............................................................................................................... 10
Datadictionary ......................................................................................................... 11
2
Het Entiteit-Relatie model .................................................................................... 12
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
Entiteiten ................................................................................................................. 12
Relatie..................................................................................................................... 12
Attributen................................................................................................................. 13
Cardinaliteit............................................................................................................. 14
Optionaliteit............................................................................................................. 15
Voorbeeld................................................................................................................ 16
Uitgewerkt voorbeeld .............................................................................................. 16
Oefeningen ............................................................................................................. 20
3
Een relationele databank ..................................................................................... 22
3.1
3.1.1
3.1.2
3.1.3
3.2
3.3
3.4
3.5
3.6
3.7
3.8
3.9
Tabellen .................................................................................................................. 22
Primaire sleutel ....................................................................................................... 22
Namen van velden.................................................................................................. 23
Koppelingen tussen tabellen................................................................................... 23
Het normalisatieproces ........................................................................................... 24
Niet genormaliseerde gegevensgroepen................................................................ 25
Repeterende groepen............................................................................................. 25
Partiële functionele afhankelijkheid ........................................................................ 30
Transitieve functionele afhankelijkheid................................................................... 33
Overzicht................................................................................................................. 34
Uitgewerkt voorbeeld .............................................................................................. 34
Oefeningen ............................................................................................................. 37
4
Omzetting datamodel naar databaseontwerp.................................................... 38
4.1
4.1.1
4.2
4.2.1
4.2.2
4.2.3
4.3
4.3.1
4.3.2
4.3.3
4.3.4
4.4
4.5
Entiteiten ................................................................................................................. 38
Zelfstandige entiteiten............................................................................................. 38
Relaties zonder attributen....................................................................................... 38
Één-op-één relatie .................................................................................................. 38
Eén-op-veel relatie.................................................................................................. 39
Veel-op-veel relatie................................................................................................. 40
Relaties met attributen............................................................................................ 40
Eén-op-één relatie .................................................................................................. 40
Een-op-veel relatie.................................................................................................. 41
Veel-op-veel relatie................................................................................................. 41
Overzicht................................................................................................................. 42
Uitgewerkt voorbeeld .............................................................................................. 42
Oefeningen ............................................................................................................. 45
5
Een database implementeren .............................................................................. 46
5.1
5.1.1
5.1.2
5.1.3
Het tabel-ontwerpscherm........................................................................................ 46
Veldnaam................................................................................................................ 47
Gegevenstype......................................................................................................... 47
Beschrijving............................................................................................................. 47
5.1.4
5.2
5.2.1
5.2.2
5.2.3
5.2.4
5.2.5
5.2.6
5.3
5.4
5.5
5.5.1
5.5.2
5.5.3
5.5.4
Veldeigenschappen................................................................................................. 48
Zelf een tabel maken............................................................................................... 50
Probleemdefinitie .................................................................................................... 50
Tabelstructuur ......................................................................................................... 50
Indexeren ................................................................................................................ 52
Tabelstructuur wijzigen ........................................................................................... 52
Tabeleigenschappen............................................................................................... 52
Primaire sleutel ....................................................................................................... 53
Een database implementeren ................................................................................. 54
Oefeningen.............................................................................................................. 54
Overzicht ................................................................................................................. 56
Een tabel aanmaken ............................................................................................... 56
Tabelstructuur aanpassen....................................................................................... 62
Tabeleigenschappen............................................................................................... 62
Primaire sleutel ....................................................................................................... 62
1
Werken met data
in het domein personeelsadministratie zijn de volgende entiteiten belangrijk: personeelslid, afdeling, functiebeschrijvingen …
Het begrip database
Soorten database managementsystemen
Het begrip datamodel
Datadictionary
1.1
Som enkele domeinen en betrokken entiteiten op voor de schooladministratie.
-
Databases
Er moet ingeschat worden welke (soorten) vragen in welke frequentie gesteld zullen
worden. Als die frequentie zeer hoog is, dan zal dat extra eisen stellen aan de computerimplementatie van de database (hierover later meer). Er moet ingeschat worden of bepaalde combinaties van gegevens opgevraagd zullen worden, of dat er bepaalde zoekfilters gebruikt gaan worden.
Wat is een database?
Bespreek de bevraging van een database met rekeninginformatie van een bank
(frequentie, soort vragen, soort bewerkingen).
Meestal speelt het voor langere tijd bewaren van gegevens, een belangrijke rol in informatiesystemen. Denk bijvoorbeeld aan de loonadministratie in een bedrijf.
Welke gegevens moeten hiervoor onder andere bijgehouden worden?
Als deze gegevens op een gestructureerde, digitale manier bijgehouden worden, is het
mogelijk de verwerking van die gegevens tot bijvoorbeeld jaarlijkse loonfiches voor alle
werknemers, te automatiseren. Dat bespaart hopen werk!
Keerzijde van de medaille: een degelijke structuur opbouwen om de gegevens te bewaren, kost soms de spreekwoordelijke bloed, zweet en tranen. Het is gedeeltelijk een
wetenschap en gedeeltelijk kunst. Het wetenschappelijke deel is het onderwerp van de
volgende hoofdstukken: je leert hoe je, door het gebruik van bepaalde technieken, tot
een werkbare structuur komt.
Het verwachte aantal gebruikers van de database. Dit kan variëren van 1 tot zeer
veel. Vormen ze een homogene groep? Worden de gebruikers getraind in het werken met de database, of gaat het om incidentele gebruikers? Wat is een acceptabele
wachttijd op een antwoord van het databasesysteem?
Hoe zit dit voor de database met rekeninginformatie?
-
Het verwachte aantal externe softwarepakketten dat de database aanspreekt. Als
de database rechtstreeks of via internet verbonden is met andere computerprogramma’s, dan zal het databasesysteem daardoor belast worden, mogelijk met nadelige gevolgen voor de "gewone" gebruikers.
Zijn er externe softwarepakketten die eventueel het databasesysteem van de
schooladministratie aanspreken? Geef voorbeelden.
Zo'n gestructureerde, digitaal bewaarde verzameling gegevens, opgezet om in een bepaalde informatiebehoefte te voorzien, wordt een database of gegevensbank genoemd.
-
Wanneer heb je er één nodig?
Een database is een hulpmiddel voor de informatievoorziening. Niet alle gegevens die in
een organisatie nodig zijn hoeven te worden gestructureerd in een database. In onder
andere volgende gevallen heb je een database nodig.
-
De gegevens worden frequent opgevraagd en gebruikt.
-
De zoekinspanning van de gebruiker moet minimaal zijn, m.a.w. zoekacties moeten
snel resultaat opleveren. In plaats van de gebruiker te laten bladeren door lange
lijsten is het gewenst dat het systeem het gevraagde zoekt en aanbiedt.
-
Er is behoefte aan antwoorden op complexere vragen dan alleen het opvragen van
opgeslagen gegevens. Het moet mogelijk zijn om het systeem te laten zoeken naar
combinaties van gegevens en om filters te gebruiken.
De te verstrekken privileges aan de gebruikers. Het kan de bedoeling zijn dat verschillende (groepen) gebruikers verschillende rechten van toegang tot de gegevens
krijgen. De gegevens moeten selectief beveiligd en beschermd kunnen worden.
Mag iedereen volledige toegang krijgen tot alle gegevens in het databasesysteem
van de schooladministratie? Verduidelijk je antwoord.
-
Het moet duidelijk zijn welke partijen het recht (of de plicht) hebben gegevens in te
voeren in en/of te verwijderen uit de database. Ook hier spelen kwantitatieve aspecten zoals de omvang van de ingevoerde gegevensstroom een rol.
Hoe zit dat voor de schooladministratie en de database met rekeninginformatie
van de bank?
Wat komt er allemaal bij kijken?
Er moet ingeschat worden hoe duurzaam de gegevens moeten zijn. Soms zijn alleen
actuele gegevens van belang (bijvoorbeeld verkeersinformatie), soms moeten gegevens na 50 jaar nog beschikbaar zijn (bijvoorbeeld bevolkingsregister).
Als besloten is om een database op te zetten, dan moet de precieze functie van die database voor de organisatie in kaart gebracht worden. Daarbij komen verschillende aspecten aan bod: het gaat om heel wat meer dan alleen maar 'Welke gegevens moeten
bewaard worden?'.
-
Er moet duidelijkheid komen over de omvang en aard van het domein waarover informatie gevraagd zal worden. Over welke dingen gaat het, welke eigenschappen
van die dingen zijn van belang (of kunnen dat in de toekomst worden) en welke
niet. Een domein is het relevante deel van de werkelijkheid voor wat betreft de informatiebehoefte. De dingen in het domein worden entiteiten genoemd. Bijvoorbeeld
VVKSO
Informaticabeheer
Databases - pagina 5
Hoe zit dat voor de schooladministratie en de database met rekeninginformatie
van de bank?
-
Er moet ingeschat worden hoe duurzaam de structuur van de gegevens is. Let op
het grote verschil van dit punt met het hiervoor genoemde punt. Een DBS (database systeem, zie verder) is ontworpen op (snelle) veranderingen van de inhoud,
maar wel binnen steeds dezelfde structuur van de database. Als de informatiebehoefte zou veranderen, dan moet soms de gegevensstructuur van de database her-
VVKSO
Informaticabeheer
Databases - pagina 6
zien worden. Dit kan zeer duur zijn, vandaar dat dit punt extra aandacht verdient.
Overigens is het gebruikelijk dat een database meegroeit met een organisatie of
met een toepassing. Het moet daarom mogelijk zijn om de gegevensstructuur aan
te passen.
Aan de hand van een analyse zoals hiervoor beschreven, kunnen beslissingen genomen
worden over het systeem (hardware, software) waarin de database zal geïmplementeerd worden, wat de database moet bevatten en wie (wat) en hoe ze zal gebruikt worden.
In de volgende hoofdstukken houden we ons voornamelijk bezig met welke gegevens
er moeten bewaard worden en hoe.
1.2
Databasesystemen
In een database worden gegevens digitaal bijgehouden. Je hebt dus software nodig om
de gegevens in te brengen en te beheren. De software die het werken met een database mogelijk maakt is het database managementsysteem (DBMS). Het geheel van database en DBMS is dan het databasesysteem (DBS).
De volgende figuur geeft een schematisch overzicht van een databasesysteem en drie
partijen die met de DBS te maken hebben: gebruikers, applicatiesoftware en een beheerder. De pijlen geven mogelijke gegevensstromen aan.
Beheerder
Gebruiker
Gebruiker
Gebruiker
Applicatie
meer). In een RDBMS worden gegevens typisch bijgehouden in tabellen (rijen en kolommen).
RDBMSen zijn zeer geschikt voor applicaties met eenvoudige data en uitgebreide bevragingsmogelijkheden, de typische administratieve applicaties. Enkel eenvoudige datatypes (numeriek, tekst …) kunnen bijgehouden worden. Een gebruiker kan zelf geen
datatypes toevoegen. Een grote troef voor RDBMSen is dat ze allen bevraagd kunnen
worden met een standaardtaal: SQL (Structured Query Language).
MS-Access, het database managementsysteem waarmee je leert werken is een RDBMS.
1.2.2
OODBMS
Een OODBMS of Object-Oriented Database Management System is een DBMS dat volledig
beantwoord aan de OO-technologie. Object bases bevatten niet alleen de (statische)
toestandsgegevens van reële objecten, maar ook informatie over het gedrag van objecten op externe impulsen (gebeurtenissen).
De meeste OODBMSen breiden een bestaande OO-programeertaal uit met database
functionaliteit. Prototypen van zulke systemen verschenen in het begin van de jaren
tachtig. Tegenwoordig zijn er een aantal ODBMSen commercieel verkrijgbaar, zoals:
ObjectStore, O2, GemStone, Objectivity/DB, ONTOS en Versant.
Object databases maken het verder mogelijk om data van arbitraire complexiteit op te
slaan; de programmeur heeft de vrijheid om nieuwe typen te definiëren. Verder zijn
overerving en inkapseling belangrijke concepten binnen OO-talen en dus ook binnen
OO-databases.
"Echte" OODBMSen zijn nog niet zo lang beschikbaar. Dit betekent dat er nog het nodige te wensen overblijft rond standaardisatie en query-talen. Verder is het programmeren van applicaties met persistente (bewaarde) objecten niet altijd eenvoudig.
Applicatie
Omdat OODBMSen hun wortels hebben in OOPLs (Object Oriented Programming Language) worden ze ook soms Persistent Programming Languages (PPL) genoemd.
databasem enagem ent systeem (DBMS )
1.2.3
database (DB)
databasesysteem (DBS)
Er bestaan verschillende types DBMS. Ze worden gecategoriseerd aan de hand van de
manier waarop (structuur) de gegevens worden opgeslagen.
Relationele gegevensbanken vormen thans het meest verspreide systeem
heer van persistente (te bewaren) gegevens. Andere, oudere vormen van
heer zijn onder meer: hiërarchische databases en netwerkdatabases. Een
wikkeling is de opkomst van objectgeoriënteerde databases, ook wel
genoemd.
1.2.1
voor het begegevensberecente ontobject bases
RDBMS
VVKSO
Informaticabeheer
Een alternatief scenario dat goed aansluit bij de bestaande investeringen is het opslaan
van objecten in relationele databases. Hier zijn weer twee benaderingen mogelijk. De
eerste vertrekt van standaard relationele databases, en legt daarboven een "schil"
waarin de speciale kenmerken van objecten opgeslagen worden in rijen van tabellen.
Voor iedere klasse introduceer je dan een tabel met de corresponderende attributen.
Een andere oplossing is dat het relationele model uitgebreid wordt met objectgeoriënteerde kenmerken, zoals overerving, bewaarde methodes (stored methods) en nog een
paar andere voorzieningen. Zo'n systeem kan dan SQL-compatible blijven, zolang geen
gebruik van de uitbreidingen wordt gemaakt.
In beide gevallen spreekt men van een ORDBMS, een Object-Relational DBMS. Voorbeelden hiervan zijn Oracle, Sybase en Informix.
1.2.4
RDBMSen of Relationele Database Managmentsystemen zijn reeds een aantal jaren de
meest gebruikte DBMSen. Ze zijn gebaseerd op het Relationeel model (hierover later
Databases - pagina 7
ORDBMS
Data en MS-Office
Als je zelf kunt bepalen in welk formaat de nodige gegevens bewaard worden dan opteer je waarschijnlijk voor een Accesdatabase (mdb), een Excel-werkblad (xls) of een
database server zoals MS SQL Server.
VVKSO
Informaticabeheer
Databases - pagina 8
Wanneer kies je best voor een Excel-werkblad en wanneer voor een RDBMS zoals Access of SQL Server? Excel is geschikt voor het bewaren van kleine hoeveelheden data
waarmee je berekeningen moet uitvoeren. Voor grotere hoeveelheden is een relationele
database beter geschikt. Je kunt dan altijd Excel nog gebruiken voor het rekenwerk en
voor de analyse van gegevens.
MS-Access is een zuivere RDBMS. Een veld kan wel als datatype OLE-object hebben,
maar dit heeft niets te maken met een objectoriëntatie. Velden van het type OLE-object
worden gebruikt om gegevens op te slaan die met andere programma's zijn gemaakt,
zoals Microsoft Word- of Microsoft Excel-documenten, figuren, geluiden en andere typen
binaire gegevens. OLE-objecten kunnen worden gekoppeld aan of ingesloten in een
veld in een Microsoft Access-tabel.
1.4
Datamodel
Wat is een model?
Een model is een abstracte voorstelling van (een deel van) de reële wereld. Dit wil zeggen dat de maker van een model bepaalde essentiële kenmerken van de realiteit isoleert, en alle andere kenmerken als bijkomstig achterwege laat.
Een gegevensmodel of datamodel is een abstracte voorstelling van een informatiesysteem, waarbij alle dynamische aspecten (generatie, transformatie en verwerking van
gegevens) achterwege blijven en slechts de statische informatiestructuren, hun beperkingen en hun onderlinge verbanden van belang zijn.
Data hoeven niet bewaard te worden in een Office component zoals een Excel-werkblad
of een Access-database om ze te kunnen benaderen via Office. Office XP kan via de
OLEDB of ODBC (Open Database Connectivity) technologie gebruik maken van data bewaard in een ander dan Office-formaat. Dit is nuttig als je geconfronteerd wordt met
reeds bestaande data die bijvoorbeeld al door andere applicaties gebruikt worden.
Een datamodel gaat over de structuur van gegevens, niet over de inhoudelijke opvulling. Een gegevensmodel kan specifiëren dat een bedrijf de namen en adressen van zijn
werknemers opslaat. Het zegt niet dat er een werknemer bestaat met de naam Peeters
en evenmin dat de namen en adressen worden verkregen via de personeelsdienst. Het
kan wel bepalen dat ieder adres een postnummer moet bevatten.
1.3
Een procesmodel brengt de dynamische aspecten in beeld. Een gegevensstroomdiagram
(Data Flow Diagram, DFD) is hiervan een voorbeeld. Het toont op een visuele manier
waar de data gegeneerd en verwerkt worden en waarheen ze getransporteerd worden.
Stappen bij het ontwerpen van een database
Het motto voor het ontwerpen van een database is zeker: 'Bezint voor je begint'. Een
slecht ontworpen database kan een firma letterlijk duur te staan komen. Databaseontwerpers –voor grote databases is dit teamwerk- worden goed betaald. Maar voor wat,
hoort wat natuurlijk! De verantwoordelijkheid is groot en de job niet altijd even gemakkelijk.
Het ontwerp van een database verloopt in verschillende stappen die hieronder schematisch weergegeven worden.
Analyse van de informatiebehoefte
Opstellen en documenteren van het datamodel
Een gegevensmodel moet een duidelijke, éénduidige voorstelling geven van de gegevens en hun onderlinge verbanden. Het moet voldoende visueel zijn zodat het kan dienen als communicatiemiddel tussen de verschillende belanghebbenden van het informatiesysteem:
ontwerpers,
analisten,
gebruikers,
beheerders,
...
Pas als alle betrokken partijen het eens zijn over het model, kan er verder ontwikkeld
worden.
Welk model gebruiken?
Keuze van het DBMS
Opstellen, invoeren en documenteren van het dataontwerp
Er worden heel wat verschillende datamodellen gebruikt. Het Entiteit-Relatie (EntityRelationschip) Model is een van de bekendste traditionele modellen. Er bestaan verschillende 'dialecten' van, ze verschillen hoofdzakelijk in notatie.
Een voordeel van het gebruik van een algemeen bekend model is dat de samenwerking
tussen de verschillende mensen die betrokken zijn bij het ontwerp, vlot kan verlopen.
Geen extra trainingen nodig: iedereen kan het model interpreteren en er zijn/haar zegje over hebben.
Invoer data
Aan de hand van de analyse van de informatiebehoefte kan een datamodel (zie verder)
opgesteld worden. Als dit gebeurd is, kan de structuur bepaald worden waarin de gegevens zullen bewaard worden: het DBMS waarin gewerkt wordt, wordt gekozen. Het datamodel moet vertaald worden naar een dataontwerp (dataschema) dat kan ingevoerd
worden in het DBMS. Als het dataontwerp geïmplementeerd is, kunnen uiteindelijk de
data ingevoerd worden.
Informaticabeheer
Waarom modelleren?
-
Bepalen van het domein. Benoemen van de entiteiten
VVKSO
Een gegevensmodel wordt gebruikt voor het structureren van een database terwijl een
gegevensstroomschema eerder gebruikt wordt voor het programmeren.
Databases - pagina 9
In het volgende hoofdstuk maak je kennis met een vereenvoudigde vorm van het Entiteit-Relatie Model.
VVKSO
Informaticabeheer
Databases - pagina 10
1.5
2
Datadictionary
Het Entiteit-Relatie model
Bij het ontwikkelen van een database is het belangrijk dat er zoveel mogelijk informatie
bestaat over alle gegevens die bijgehouden worden. Hiervoor wordt meestal een datadictionary, een gegevens-woordenlijst, gebruikt.
Een datadictionary is een verzameling van eigenschappen van gegevens. Hij bevat dus
gegevens over gegevens (metagegevens). Een datadictionary kan vele vormen aannemen. Hij kan afzonderlijk bestaan of toegevoegd worden aan een datamodel. Er zijn
softwarepakketten op de markt voor de creatie en het beheer van een datadictionary.
Vaak zijn deze gekoppeld aan andere software waarmee de implementatie van de database (gedeeltelijk) geautomatiseerd kan worden.
De datadictionary is niet alleen belangrijk voor de ontwikkeling van een database, maar
is ook een uitstekend middel om de database te documenteren. Dit is belangrijk voor
het onderhoud, het beheer en het latere gebruik van de databank.
Een datadictionary kan onder andere volgende gegevens bevatten:
-
gegevens m.b.t. de identificatie zoals de naam van het gegeven, eventuele synoniemen, een beschrijving waarin de betekenis van het gegeven wordt toegelicht;
-
gegevens m.b.t. de representatie zoals gegevenstype, lengte, invoerformaat;
-
gegevens ter ondersteuning van de beveiliging zoals toegestane gebruikers, hun
wachtwoorden en toegangsrechten (lezen, wijzigen, toevoegen, verwijderen);
-
gegevens ter ondersteuning van de integriteit (juistheid van de gegevens) zoals toegestane waarden, validatieregels (waarover later meer);
-
gegevens ter verbetering van de prestaties zoals statistische gegevens over het gebruik van de gegevens.
Entiteiten en relaties
Attributen
Cardinaliteit
Optionaliteit
In dit hoofdstuk maak je kennis met een datamodel dat zeer geschikt is voor het ontwerpen van een database: het Entiteit-Relatie Model (Entity Relationship Model), afgekort
ER-model. Het is in 1976 – in informaticaland héél lang gelden - door P. Chen geïntroduceerd. Sindsdien zijn er verschillende varianten ontwikkeld.
In het Entiteit-Relatie model wordt gebruik gemaakt van:
-
entiteiten,
-
attributen,
-
relaties (relationships).
2.1
Entiteiten
Een entiteit is simpelweg iets dat je kunt identificeren en waarvan je gegevens wilt bijhouden: auto, persoon, magazijn, bankrekening, computer ...
Een entiteit bestaat uit:
-
een unieke naam;
-
een definitie die objectief en ondubbelzinnig aangeeft, welke objecten door de entiteit worden gemodelleerd (en soms even belangrijk: welke niet);
-
een lijst van attributen (zie verder).
Voorbeeld: gegevenselementbeschrijving uit een klantenadministratie.
Voorbeeld
B ENAMING:
KredietlimietKlant
Naam
werknemer
B ETEKENIS:
Het maximum bedrag dat een klant verschuldigd mag zijn.
Definitie
TYPE:
Numeriek
een natuurlijke persoon die in loondienst is van de firma; personen die
slechts occasioneel voor de firma werken en personen die via een interimkantoor tewerkgesteld zijn, worden niet als werknemers beschouwd.
LENGTE:
Max. 7 cijfers
Attributen
naam, adres, telefoonnummer, geboortedatum, datum-in-dienstname …
FORMAAT:
9 999 999,00 zowel voor invoer als bij uitvoer
M OGELIJKE WAARDEN:
Positief geheel getal kleiner dan 2 000 000,00
ENTITEIT:
KLANT
TOEGANGSBEVEILIGING:
Invoer en wijziging enkel toegestaan aan werknemers van de financiële afdeling. Geen toegangsbeveiliging voor consultatie.
Voorstelling
Een entiteit wordt voorgesteld door een rechthoek.
Werknemer
In een database voor een uitleenbibliotheek worden onder andere volgende gegevens bijgehouden: Boeknummer, DatumUitlening. Geef van beide een (intuïtieve)
beschrijving voor een datadictionary.
VVKSO
Informaticabeheer
Databases - pagina 11
2.2
Relatie
Een relatie is een verband tussen twee of meer entiteiten dat model staat voor een
overeenkomstige band tussen de reële objecten. Een relatie bestaat uit:
-
een naam, uniek binnen het beschouwde diagram;
-
een lijst van betrokken entiteiten;
VVKSO
Informaticabeheer
Databases - pagina 12
-
een definitie die objectief en ondubbelzinnig aangeeft, in welke omstandigheden
precies het veronderstelde verband aan- of afwezig is tussen de gespecificeerde entiteiten;
-
een lijst van attributen (zie verder).
Voorbeeld
Naam
Werkt in
Een attribuut bestaat uit de volgende elementen:
Deelnemende entiteiten werknemer, afdeling
Definitie
een werknemer werkt in een afdeling als hij verantwoording
verschuldigd is aan het hoofd van die afdeling
Attributen
aantal werkuren
Voorstelling
Een relatie wordt voorgesteld als een verbindingslijn tussen de betrokken entiteiten.
Werknemer
Afdeling
Werkt in
-
een naam, uniek binnen de collectie attributen van dezelfde entiteit of relatie;
-
een entiteit of relatie waarvan het attribuut een kenmerk is;
-
een domein, dit is de collectie van alle mogelijke waarden die het kenmerk kan aannemen;
-
een definitie die éénduidig de interpretatie van de gekozen waarde uit het domein
aangeeft;
-
het al dan niet verplichte karakter van het attribuut: moet elke instantie van de
gegeven entiteit of relatie over deze eigenschap beschikken, of is dit optioneel, met
andere woorden, modelleer je ook instanties waarvoor deze eigenschap irrelevant of
onbekend is.
Voorbeeld
De naam van de relatie kan al dan niet vermeld worden. Het pijltje is hier enkel een
hulpmiddel bij het lezen van het diagram van links naar rechts: werknemer werkt in
afdeling.
2.3
In een groothandel worden bijvoorbeeld artikelgegevens bijgehouden, o.a. naam, inkoopprijs, en hoeveelheid in voorraad. Bij het interventariseren wil men, per artikel, de
waarde van de voorraad kennen. Je zou hiervoor een attribuut WaardeVoorraad kunnen
voorzien waarbij WaardeVoorraad = Inkoopprijs * HoeveelheidInVoorraad. Dit betekent
echter dat om de integriteit van de database te behouden bij elke verandering van de
voorraad of de inkoopprijs ook de waarde van dit attribuut moet aangepast worden.
Daarom worden procesgegevens meestal niet opgenomen in de database. Ze worden
berekend op het moment dat ze nodig zijn.
Attributen
Naam
personen ten laste
Entiteit
werknemer
Domein
de natuurlijke getallen, inclusief 0
Definitie
Iedere entiteit en relatie is voorzien van een collectie van nul of meer attributen. Een
attribuut is een eigenschap die met de instanties van de entiteit of de relatie geassocieerd wordt. Entiteiten hebben bijna altijd attributen. Relaties kunnen gemakkelijk voorkomen zonder attributen.
het aantal personen dat fiscaal ten laste van de medewerker is,
gens opgave door de medewerker zelf
Verplicht
ja
Samengestelde gegevens
Voorstelling
Je wenst bijvoorbeeld gegevens op te slaan van personen zodat deze telefonisch of per
brief kunnen gecontacteerd worden. Als attributen van de persoon heb je dan nodig:
naam, adres en telefoonnummer. Je zou dus kunnen opteren voor drie attributen. Dit is
echter niet handig. Als je bijvoorbeeld een adresetiket wilt samenstellen, heb je straat,
postnummer en gemeente apart nodig.
De attributen worden bij in de rechthoek geschreven. In diagrammen worden ze
meestal weggelaten om de overzichtelijkheid niet te schaden.
De gegevens naam, adres en telefoonnummer zijn samengestelde gegevens: naam bevat zowel voor- als familienaam, adres bevat straat, straatnummer, postnummer en
gemeente en telefoonnummer bevat zonenummer en eigenlijke nummer. Als je de
deelgegevens van een samengesteld gegeven afzonderlijk gebruikt, is het beter ze te
beschouwen als afzonderlijke attributen. Zo splits je naam waarschijnlijk best op in de
attributen voornaam en familienaam. Adres kan gesplitst worden in straat, postnummer
en gemeente. Meestal zal het geen zin hebben om straatnaam en straatnummer
afzonderlijk op te splitsen, gewoon omdat ze niet afzonderlijk gebruikt worden.
Werknemer
naam
adres
telefoonnummer
datum-in-dienst
…
2.4
Procesgegevens
vol-
Cardinaliteit
Een procesgegeven of berekend gegeven is een gegeven waarvan de waarde bepaald
wordt door de waarde van één of meer andere gegevens.
De cardinaliteit van een relatie geeft aan, hoeveel elementen van een betrokken entiteittype maximaal in relatie kunnen staan met één instantie van de andere entiteittypes. Daarbij zijn de toegelaten waarden: één of veel.
VVKSO
VVKSO
Informaticabeheer
Databases - pagina 13
Informaticabeheer
Databases - pagina 14
Voorbeeld
-
als de instantie van de desbetreffende entiteit optioneel is (d.w.z. minstens nul),
plaatsen we een cirkeltje op de lijn.
Als je de relatie 'persoon is ondergeschikte van manager' bekijkt, dan gelden waarschijnlijk de volgende twee beschouwingen betreffende de cardinaliteit:
contract
persoon
-
iedere werknemer heeft (is ondergeschikt aan) hoogstens één manager;
-
een manager kan veel ondergeschikten (ondergeschikte werknemers) hebben.
In een gegevensstructuurdiagram geven we de cardinaliteit aan door een markering
van de lijnen (relaties) op de plaats waar ze de rechthoeken (entiteiten) bereiken:
Het verplicht karakter van een relatie is een zeer strenge eis. Als een relatie verplicht
is, wil dat zeggen dat je geen enkele situatie kunt modelleren waarin de relatie niet
voorkomt, zelfs niet tijdelijk.
Om de optionaliteit te bepalen, stel je een vraag in de vorm:
-
als de instantie van de desbetreffende entiteit uniek is (d.w.z. hoogstens één),
plaats je een dwarsstreepje op de lijn vlakbij de entiteit;
als de instantie van de desbetreffende entiteit verscheidene malen kan voorkomen
(d.w.z. hoogstens veel), plaats je een kraaienpoot op de lijn tegen de entiteit.
Werknemer
-
Moet een persoon minstens één contract hebben?
-
Moet een contract minstens door één persoon ondertekend zijn?
Bij een positief antwoord: optionaliteit één, anders nul.
2.6
Manager
Voorbeeld
Datamodel van een verkoop
Voor een relatie tussen twee entiteiten zijn er dus, wat de cardinaliteit betreft, de volgende mogelijkheden: één-op-één, één-op-veel en veel-op-veel. Een één-op-één-relatie
wordt ook 1:1 genoteerd, een één-op-veel-relatie 1:n (lees: één op n) en een veel-opveel-relatie m:n (lees: m op n).
Klant
Order
Verkoper
Om de cardinaliteit te bepalen, stel je een vraag in de vorm:
-
Kan een werknemer meer dan één manager hebben?
-
Kan een manager meer dan één werknemer hebben?
Bij een positief antwoord: cardinaliteit veel, anders één.
2.5
Product
Volgens dit datamodel gelden de volgende regels:
Optionaliteit
De optionaliteit van een relatie geeft aan, hoeveel elementen van een betrokken entiteittype minimaal in relatie moeten staan met één instantie van de andere entiteittypes. Daarbij zijn de toegelaten waarden: nul of één.
Voorbeeld
-
een klant die nog geen order heeft geplaatst, kan bestaan;
-
een verkoper die nog niets heeft verkocht, kan bestaan;
-
een product dat nog niet verkocht is kan bestaan;
-
een order van een bestaand product moet via een bestaande verkoper door een
bestaande klant gedaan worden.
Als je in een juridische database de entiteiten 'natuurlijke persoon' en 'arbeidscontract'
beschouwt, met daartussen de relatie 'persoon werkt onder contract', dan gelden de
volgende vaststellingen omtrent de optionaliteit:
-
een natuurlijke persoon heeft niet noodzakelijk een arbeidscontract ;
-
ieder arbeidscontract heeft noodzakelijk betrekking op een persoon.
In een gegevensstructuurdiagram geven we de optionaliteit aan door het aanbrengen
van een symbool op de lijnen (relaties) dichtbij de rechthoeken (entiteiten), naast de
tekens voor cardinaliteit:
-
als de instantie van de desbetreffende entiteit verplicht is (d.w.z. minstens één),
plaatsen we een dwarsstreepje op de lijn;
VVKSO
Informaticabeheer
Databases - pagina 15
Welke attributen zou je aan elke entiteit toekennen?
2.7
Uitgewerkt voorbeeld
Datamodel voor Computerpark
Er zijn 6 belangrijke entiteiten: Computer, Randapparaat, Software, Verbruiksproduct,
Licentie en Leverancier. Met randapparaat wordt een uitwendig randapparaat bedoeld,
bijvoorbeeld: hub, printer, modem, scanner …
De relaties tussen de entiteiten Levertx, Heeft, Draait op, Is verbonden met, Connecteert
worden getoond in het volgende diagram samen met hun cardinaliteit en optionaliteit.
VVKSO
Informaticabeheer
Databases - pagina 16
(In deze oplossing wordt verondersteld dat de computers in netwerk verbonden zijn via
een hub, d.w.z. de computers zijn onderling niet rechtstreeks verbonden.)
Bestudeer het volgende diagram aandachtig. Ga, wat de cardinaliteit en de
optionaliteit betreft, na wat deze precies betekenen. Waarom is bijvoorbeeld de
relatie tussen Leverancier en Verbruiksproduct anders dan tussen Leverancier en
Computer of Leverancier en Randapparaat?
Diskettestation
merk, type … (samengesteld gegeven)
CD/DVD
merk en type van ingebouwd CD of DVD-station
(samengesteld gegeven)
RAM
aanwezige hoeveelheid RAM
RAMtype
type
RAMUitTeBreiden
uitbreidingsmogelijkheid
Beeldscherm
merk, type … (samengesteld gegeven)
Klavier
merk, type … (samengesteld gegeven)
Muis
merk, type … (samengesteld gegeven)
Geluidskaart
merk, type … (samengesteld gegeven)
Netwerkkaart
merk, type … (samengesteld gegeven)
ISATotaal
totaal aantal ISA-uitbreidingsgleuven
ISABezet
aantal bezette ISA-uitbreidingsgleuven
PCITotaal
totaal aantal PCI-uitbreidingsgleuven
PCIBezet
aantal bezette PCI-uitbreidingsgleuven
BIOS
naam
Moederkaart
naam
Chipset
naam
Extras
soort, merk en type van extra ingebouwde onderdelen, bijvoorbeeld zipdrive … (samengesteld gegeven)
Opmerkingen
algemene opmerkingen i.v.m. het toestel
Randapparaat
Per entiteit worden volgende attributen bewaard. De domeinen worden niet aangegeven omdat ze vrij evident zijn.
Naam
Definitie
RandapparaatID
identificatienummer van het specifieke randapparaat
Ja
Functie
functie, bijvoorbeeld: poort, netwerkkaart, modem,
printer
Ja
Merk
naamproducent
Ja
Type
naam van het type zoals gekend bij producent
Ja
Computer
Naam
Definitie
Verplicht
ComputerID
identificatie van de computer, naam waaronder de
PC gekend is, bijvoorbeeld PC01, Joske ...
Ja
Serienummer
serienummer gegeven door producent
Ja
Merk
merknaam of 'wit product'
Ja
Type
naam van het type zoals gekend bij producent
Lokaal
locatie waar toestel zich bevindt, bijvoorbeeld: B11,
Directiebureel ...
Ja
Functie
bijvoorbeeld: lescomputer, labocomputer, server,
internetserver ...
Ja
Processor
type en klokfrequentie
Harde schijf
merk, type, capaciteit … van alle ingebouwde schijven (samengesteld gegeven)
VVKSO
Informaticabeheer
Ja
Databases - pagina 17
Verplicht
Beschrijving
voornaamste karakteristieken
Doel
waarvoor het randapparaat gebruikt wordt, bijvoorbeeld: randapparaat, reserve, didactisch materiaal
Software
Naam
Definitie
NaamSoftware
inclusief versienummer, bijvoorbeeld MS Word 9.0
Producent
bijvoorbeeld Microsoft
AantalCD
aantal installatie cd's
LocatieCD
aanduiding waar de cd’s bewaard worden
VVKSO
Informaticabeheer
Verplicht
Ja
Databases - pagina 18
Draait op
Licentie
Naam
Definitie
Licentienummer
of ‘freeware’, gegevens 'shareware' indien dit het
geval is
Ja
schoollicentie, klaslicentie, netwerk ...
Ja
Soort licentie
Verplicht
Registratiedatum
datum waarop licentie geregistreerd is
AantalLicenties
aantal toestellen of gebruikers waarvoor licentie
geldt
Naam
Definitie
begindatum
datum installatie
einddatum
datum verwijdering
opmerking
opmerking, bijvoorbeeld Service Release die geïnstalleerd is, optionele componenten
2.8
Oefeningen
Ontwerp voor de beschreven omgevingen een datamodel. Volg bij het ontwerpen de
volgende stappen:
Verbruiksproduct
Naam
Definitie
Soort
papier, toner voor HPLaser6 ...
Merk
naam producent
Type
type naam zoals gekend door producent
Beschrijving
voornaamste karakteristieken
Voorraad
hoeveelheid stuks in voorraad
Ja
Bestelpunt
minimumvoorraad
Ja
Leveringstermijn
gemiddelde leveringstermijn in dagen
In bestelling
Ja/nee
Verplicht
Ja
-
bepaal de entiteiten;
-
bepaal de relaties;
-
bepaal de cardinaliteit van de relaties;
-
bepaal de optionaliteit van de relaties;
-
bepaal de attributen van de entiteiten en de relaties.
1
Ontwerp een datamodel voor een puntenboek van een leraar. Je moet zowel de
punten voor gewone toetsen als voor proefwerken opslaan. Op het einde van de
maand moet er op basis van de databank een puntenlijst afgedrukt worden met
de punten van dagelijks werk voor het maandrapport en op het einde van het trimester de punten voor dagelijks werk en proefwerk. De leraar kan meerdere vakken geven en kan in meerdere klassen komen.
2
Ontwerp een datamodel voor een databank voor de schoolbibliotheek. Voor elk
boek wordt bijgehouden welk type het is (boek, tijdschrift, naslagwerk). Elk werk
heeft uiteraard een naam (titel) en is voorzien van een etiket met een uniek
nummer. Een gebruiker moet een werk kunnen opzoeken op basis van een trefwoord. Een werk kan aan meerdere trefwoorden voldoen. Boeken kunnen uitgeleend worden. Je moet kunnen zien of het werk nog aanwezig is of uitgeleend. Indien het uitgeleend is, heeft de persoon het recht om het werk te reserveren. Je
moet natuurlijk weten aan wie het is uitgeleend vermits de leners het boek maar
één maand mogen bijhouden. Op elk moment moet een lijst kunnen afgedrukt
worden van de ontleende en gereserveerde boeken.
3
Een sportclub (atletiek) wenst van al zijn leden een aantal gegevens bij te houden
zoals hun lidnummer, naam, adres, postnummer, gemeente, telefoonnummer en
welke beste tijden ze behaalden op de loopnummers 100 m, 200 m en 400 m en
de datum waarop die beste tijden gelopen werden.
4
Een kapper wil voor elk bezoek van zijn klanten bijhouden welke bewerkingen hij
heeft uitgevoerd (zoals knippen, wassen & gebruikte producten, kleuren & gebruikte producten) zodat hij later een historiek kan samenstellen per klant.
5
Een huisarts wil een databank met volgende gegevens: patiënten, gezinsgegevens (gezinshoofd, gezinsleden …), adres, telefoon, mutualiteit, bezoeken per gezinslid, diagnose per bezoek, voorgeschreven geneesmiddelen.
6
De firma La Linea werkt met vertegenwoordigers die kleding verkopen in een bepaald verkoopgebied. Een klant bestelt altijd via dezelfde vertegenwoordiger. De
databank moet zeker volgende zaken bevatten:
Leverancier
Naam
Definitie
Firmanaam
naam van de firma
Contactpersoon
naam van de contactpersoon bij de firma
Klantnummer
klantnummer zoals gekend bij leverancier
Telnr
telefoonnummer
Faxnr
faxnummer
E-mailadres
e-mailadres van contactpersoon
Adres
adres van de firma
Verplicht
Ja
De attributen die bij de relaties Levertx en Draait op horen worden in de volgende tabellen weergegeven. De relaties Is verbonden met en Connecteert hebben geen attributen.
Levert
Naam
Definitie
Leveringsdatum
datum waarop goederen geleverd werden
Ja
Aankoopprijs
prijs per stuk
Ja
Opmerking
opmerking i.v.m. de levering
VVKSO
Informaticabeheer
Verplicht
Verplicht
-
Databases - pagina 19
VVKSO
vertegenwoordigers: vertegenwoordigersnummer, naam en adresgegevens,
totale verdienste en commissiepercentage;
Informaticabeheer
Databases - pagina 20
-
klanten: klantnummer, naam, adres, saldo, kredietlimiet. Elke klant heeft een
vertegenwoordiger maar nooit meer dan één;
-
kledingsstukken: artikelnummer, omschrijving, prijs, aantal in voorraad;
-
bestellingen: bestelnummer,
artikelen met aantal en prijs.
klantgegevens,
vertegenwoordiger,
3
Een relationele databank
Het relationeel model
Primaire en refererende sleutels
Het normalisatieproces
bestelde
Bijkomende vereisten
-
een bestelling wordt alleen aanvaard indien de klant geregistreerd is;
-
per bestelling is er hoogstens één klant;
-
klanten kunnen een korting krijgen: de te betalen prijs kan dus lager zijn dan
de prijs in het artikelenbestand;
-
indien de prijs van een artikel verhoogt, betaalt de klant nooit meer dan
afgesproken bij de bestelling.
3.1
Tabellen
Gegevens kunnen gegroepeerd worden omdat ze om de een of andere reden bij elkaar
horen (cfr. entiteiten in het entiteit-relatie datamodel). Zo'n groep noem je een objecttype. In een relationele databank worden objecttypes geïmplementeerd d.m.v. tabellen
met twee dimensies: rijen en kolommen. Per object (instantie van het objecttype)
wordt één rij gebruikt en per gegeven (attribuut) één kolom.
Deze tabellen worden relaties (relations) genoemd. Dit is een term uit de wiskunde, niet
te verwarren met de relaties (relationships) in het datamodel.
Voorbeeld: patiëntengegevens
Voornaam
Jan
Piet
Joris
Corneel
…
Familienaam
De Blauwe
De Bruyn
De Swert
De Wit
…
Geboortedatum
1980-12-13
1980-07-11
1979-10-23
1980-03-05
…
Lengte
174
173
180
175
…
Gewicht
60
63
58
62
…
De attributen van een patiënt-objecttype zijn voornaam, familienaam, geboortedatum,
lengte en gewicht. Ze vormen de kolommen of velden van de tabel.
De verschillende patiënten vormen de verschillende rijen of records in de tabel.
Voorwaarden waaraan een tabel moet voldoen in een relationele database
Een tabel in een relationele database moet aan bepaalde voorwaarden voldoen. Zo mogen twee rijen nooit helemaal hetzelfde zijn (geen duplicaten) en mag de volgorde van
de rijen en kolommen geen intrinsieke betekenis hebben, d.w.z. het verplaatsen van
rijen en/of kolommen heeft geen invloed op de betekenis van de bewaarde gegevens.
Een derde voorwaarde is dat elke cel atomaire gegevens moet bevatten, d.w.z. er mag
maar een waarde van het attribuut in voorkomen. In een cel waarin een lengte aangegeven wordt, mag maar 1 lengte staan en niet bijvoorbeeld de resultaten van opeenvolgende metingen.
Een database zal meestal uit meerdere tabellen bestaan die onderling met elkaar in
verband staan.
3.1.1
Primaire sleutel
Elke rij is uniek en kan bijgevolg geïdentificeerd worden door de waarde in een kolom
of een combinatie van kolommen. Het kan voorkomen dat er meerdere kolommen of
combinaties van kolommen de rij identificeren. Er zijn dan meerdere kandidaat-sleutels.
Eén ervan wordt gekozen tot primaire sleutel (primary key). Als de primaire sleutel uit
meerdere kolommen bestaat, spreekt men van een samengestelde sleutel.
De primaire sleutel van een tabel speelt een belangrijke rol in een relationele database.
Besteed dus steeds voldoende zorg aan de keuze ervan.
VVKSO
Informaticabeheer
Databases - pagina 21
VVKSO
Informaticabeheer
Databases - pagina 22
In de voorgaande tabel is er eigenlijk geen kandidaat-sleutel. Theoretisch, alhoewel
zeer onwaarschijnlijk, is het mogelijk dat er twee personen met dezelfde naam zijn, die
op dezelfde dag geboren zijn en dan nog dezelfde lengte en hetzelfde gewicht hebben.
In dergelijke gevallen voeg je een veld toe, meestal met een numerieke waarde, dat als
primaire sleutel fungeert.
Om aan te geven dat een veld als primaire sleutel fungeert, wordt dit veld meestal onderstreept.
Surrogaat sleutel
3.2
In de praktijk kies je best een extra kolom als primaire sleutel, d.w.z. een kolom die
niet overeenkomt met een eigenschap van een entiteit, maar die enkel dient om de rij
te identificeren. Als je een kolom neemt die overeenkomt met een eigenschap van een
attribuut, dan kan dit in de loop van de tijd veranderen.
Stel dat je als primaire sleutel een telefoonnummer zou nemen. In theorie biedt dit een
unieke identificatie van bijvoorbeeld een klant. Als echter de telefoonmaatschappij om
een of andere reden de nummers aanpast, bijvoorbeeld zonenummer 089 wordt gesplitst in 089 en 011 zal de applicatie overal waar deze waarde als primaire sleutel en
refererende sleutel (zie volgende paragraaf) gebruikt wordt, moeten aangepast worden.
Dat vraagt heel wat meer werk dan enkel de gegevens in één kolom aanpassen.
Een sleutel die niet overeenkomt met een eigenschap van een entiteit noemt men een
surrogaat sleutel.
3.1.2
Namen van velden
Ieder veld behoort een duidelijke, binnen de tabel unieke naam te krijgen, waarmee
het zich van alle andere gegevens onderscheidt. Hoewel het in de meeste pakketten
voor gegevensbeheer, zoals MS-Access mogelijk is om een naam te kiezen die bestaat
uit meerdere woorden, is dit geen aanrader. Beter is het om de woorden aan elkaar te
schrijven en ieder nieuw woord met een hoofdletter te beginnen. Overdrijf niet in de
lengte van de naam: 25 karakters zou ruim voldoende moeten zijn.
Voorbeelden van zinvolle naamgeving: WaardeVoorraad, BetalingPerCheck enz.
Een tabel kan bijvoorbeeld weergeven worden als:
Patiënt(PatiëntID, Voornaam, Familienaam, Geboortedatum, Lengte, Gewicht)
3.1.3
Koppelingen tussen tabellen
Ouder
Kind
OuderID
Familienaam
Voornaam
Straat
postnummer
Gemeente
KindID
Voornaam
Leeftijd
Geslacht
OuderID
Het normalisatieproces
Normalisatie is een bepaalde herschikking van de gegevens en gegevensgroepen,
waarbij soms nieuwe groepen worden gevormd door gegevens uit bestaande groepen
af te zonderen. Uiteindelijk wil je tot de volgende situatie komen:
alle attributen van een groep zijn functioneel afhankelijk van de volledige sleutel, en tussen
attributen onderling bestaan geen functionele afhankelijkheden.
Een gegeven is functioneel afhankelijk van een ander als dit gegeven gekend is als het
andere gegeven gekend is. Bijvoorbeeld in het rijksregister zijn de gegevens naam en
woonplaats functioneel afhankelijk van het rijksregisternummer. Als je het rijksregisternummer van iemand kent, dan kun je zijn naam en woonplaats vinden. Door het
gebruik in volgende paragrafen wordt het begrip wellicht duidelijker.
Het doel van normalisatie is het vermijden van redundantie. Redundantie betekent, dat
bepaalde informatie tegelijkertijd op meer dan één plaats wordt voorgesteld. De voornaamste nadelen van redundantie zijn:
-
risico's van inconsistentie: indien dezelfde soort informatie op meer dan één plaats
tegelijk aanwezig is, dan kunnen de verschillende plaatsen van informatieopslag elkaar tegenspreken;
-
moeilijker gegevensonderhoud: sommige wijzigingen moeten op verschillende plaatsen tegelijk worden doorgevoerd.
Nochtans is redundantie soms nuttig. Zo kan een overdreven genormaliseerd gegevensbeheersysteem veel tijd vragen om gegevens op te zoeken, door het grote aantal
verschillende gegevensgroepen.
Je gaat hoe dan ook de normalisatie steeds volledig doorvoeren, en achteraf bepaalde
redundanties eventueel opnieuw invoeren, op voorwaarde dat je daarvoor een goede
reden kunnen opgeven.
Normalisatie vindt plaats in drie stappen.
Verschillende tabellen in een relationele database kunnen gegevens bevatten die onderling gekoppeld zijn, die dus samen een grotere gegevensgroep vormen. Bijvoorbeeld:
een tabel bevat gegevens van ouders en een andere tabel bevat gegevens van kinderen. Er moet een mechanisme bestaan om aan te geven welke ouders bij welke kinderen horen.
Een dergelijke koppeling wordt in het Nederlands ook een relatie genoemd (Engels:
relationship). Dit kan tot verwarring leiden. In hetgeen volgt wordt de term relatie gebruikt om een koppeling tussen tabellen aan te geven.
-
Verwijder de zich herhalende deelverzamelingen (repeterende groepen).
-
Verwijder de attributen die functioneel afhankelijk zijn van slechts een deel van de
sleutel.
-
Verwijder de attributen die functioneel afhankelijk zijn van andere attributen.
Met 'verwijderen' wordt bedoeld in een afzonderlijke gegevensgroep onderbrengen, niet
weglaten uit het gegevensmodel.
In een relationeel ontwerp wordt een relatie aangegeven door een lijn tussen de twee
tabellen die de koppelende velden verbindt.
VVKSO
Informaticabeheer
Databases - pagina 23
VVKSO
Informaticabeheer
Databases - pagina 24
3.3
Niet genormaliseerde gegevensgroepen
Persnr
Onderstaande tabel bevat gegevens over meubelen en de leverancier ervan. Het is eigenlijk niets anders dan een losse verzameling van gegevens. Een dergelijke gegevensgroep is een gegevensgroep in de nulde normaalvorm (0NF).
Naam
Kleur
Prijs
TAFEL
Wit
445,00
S TOEL
Wit
TAFEL
Aantal
Naam
Straat
Postnummer
Gemeente
Taal
10051
Devos
Dorpsplein 1
8000
Brugge
Nederlands
Frans
Engels
20089
Vandevelde
Centrumlaan 5
9000
Gent
Nederlands
Duits
…
…
…
…
…
Naam
Tel
Straat
Postc
Plaats
2
I DEA
03 156 84 95
Boomsesteenweg 185
2610
WILRIJK
…
198,00
8
FIEREMANS
054 20 60 80
Assesteenweg
1740
TERNAT
Het veld Taal bevat de talen gekend door de personeelsleden.
Zwart
495,00
6
J ANSSENS
02 256 15 23
Zeypstraat 15
2800
MECHELEN
TAFEL
Zwart
495,00
6
J ANSSENS
02 256 15 23
Zeypstraat 15
2800
MECHELEN
S TOEL
Bruin
124,00
10
JANSENS
02 256 15 32
Zeipstraat 15
2000
MECHELEN
K AST
Zwart
544,00
5
FIEREMANS
02 132 54 98
Assesteenweg 121
1740
TERNAT
054 20 60 80
Ninoofsesteenweg 156
03 156 84 96
Wit
K AST
Waarom kan deze gegevensgroep niet als tabel gebruikt worden in een relationele
database?
ROOSDAAL
De talenkennis van de personeelsleden moet op een andere manier bewaard worden.
Bruin
B ED
Wat is de primaire sleutel van deze gegevensgroep?
Grijs
397,00
9
LINEA
03 189 78 91
Boomsesteenweg 185
2610
WILRIJK
Wit
422,00
1
BRICO
02 563 89 78
Hoogstraat 210
1000
BRUSSEL
Bruin
745,00
4
JANSSENS
02 256 15 23
Zeipstraat 15
2800
MECHELEN
Welke problemen kun je verwachten als je diverse velden voorziet (Taal1, Taal2,
Taal3 ...) om dan in elk veld een gekende taal te noteren?
Welke problemen treden op als je per personeelslid zoveel rijen voorziet als er
gekende talen zijn?
Bekijk de adresgegevens van leverancier Janssens. Wat stel je vast?
Een gegeven of een combinatie van gegevens die per entiteit meerdere keren voorkomt
noemt men een repeterende groep.
Twee rijen zijn volledig identiek. Wat denk je hierover?
Sommige artikelen bestaan in meerdere kleuren. Welke? Mag dit in een tabel van
een relationele database zo bewaard worden? Verklaar.
Wordt er op andere plaatsen nog gezondigd tegen dezelfde regel? Waar?
De oplossing van de aangehaalde problemen vereist het verwijderen van de repeterende groep (hier het gegeven Taal) uit de oorspronkelijke gegevensgroep en het creëren
van een nieuwe gegevensgroep met de gegevens van de repeterende groep. Er wordt
een scheiding gemaakt van gegevens WAARBIJ MEN ER MOET VOOR ZORGEN OM GEEN
INFORMATIE TE VERLIEZEN! Een volgende opsplitsing zou dan ook verkeerd zijn:
Persnr
Het is duidelijk dat deze gegevensgroep niet voldoet om als tabel in een relationele
omgeving gebruikt te worden.
Herlees nog eens de voorwaarden waaraan een tabel in een relationele databank moet
voldoen (paragraaf 3.1).
Naam
10051
Devos
20089
Vandevelde
…
…
Straat
Dorpsplein 1
Postnummer
Gemeente
8000
Brugge
Centrumlaan 5
9000
Gent
…
…
…
en
Aan welke voorwaarden wordt in deze gegevensgroep niet voldaan?
Taal
Nederlands
Bij een relationele tabel hoort ook een primaire sleutel.
Frans
Wat zou je in deze tabel als primaire sleutel kunnen gebruiken?
Engels
Nederlands
Duits
3.4
Repeterende groepen
…
Voorbeeld 1
Waarom is dit geen goed voorstel en volgend voorstel wel?
In een bedrijf worden de volgende personeelsgegevens bijgehouden:
VVKSO
Informaticabeheer
Databases - pagina 25
VVKSO
Informaticabeheer
Databases - pagina 26
Persnr
Naam
Straat
Postnummer
Gemeente
eerste normaalvorm
10051
Devos
Dorpsplein 1
8000
Brugge
20089
Vandevelde
Centrumlaan 5
9000
Gent
personeelsnummer
naam
…
…
…
…
…
adresgegevens (straat, postnummer, gemeente)
en
Persnr
en
personeelsnummer
taal
Taal
10051
Nederlands
10051
Frans
10051
Engels
20089
Nederlands
20089
Duits
…
…
mondelinge kennis
schriftelijke kennis
en
personeelsnummer
diplomanaam
Om geen gegevensverlies te hebben moet je dus de repeterende groep uit de oorspronkelijke gegevensgroep verwijderen en in een aparte gegevensgroep zetten, waarbij je de primaire sleutel herhaalt.
jaartal
Personeelsnummer is de primaire sleutel van de eerste gegevensgroep en de refererende sleutel van de twee andere.
Wat is een primaire sleutel voor de tweede gegevensgroep?
Voorbeeld 3
Bovenstaande gegevensgroepen staan in de eerste normaalvorm (1NF).
nulde normaalvorm
Het is mogelijk dat er meerdere repeterende groepen voorkomen. Die moeten allemaal
in aparte gegevensgroepen bijgehouden worden.
De zo ontstane gegevensgroepen zijn gerelateerd. De relatie wordt gelegd door het primaire sleutelveld van de eerste gegevensgroep dat herhaald wordt in de tweede gegevensgroep. In de tweede gegevensgroep kan dat sleutelveld meerdere keren dezelfde
waarde bevatten. Het kan dus zeker geen primair sleutelveld voor de tweede gegevensgroep vormen. Men spreekt van een refererende sleutel of foreign key. In het bovenstaande voorbeeld is Persnr de primaire sleutel van de eerste gegevensgroep en de
refererende sleutel van de tweede gegevensgroep.
Voorbeeld 2
lidnummer
naam
adresgegevens (straat, postnummer, gemeente)
kinderen (naam, leeftijd, gevolgde lessen)
eerste normaalvorm
Stap 1
lidnummer
naam
Bij het normaliseren hoef je niet onmiddellijk de gegevens in tabelvorm weer te geven.
Meestal is dit zelfs niet mogelijk omdat er te veel gegevens zijn. Je kunt de gegevens
ook onder elkaar weergeven zoals in volgend voorbeeld. (De primaire sleutel wordt onderstreept.)
adresgegevens (straat, postnummer, gemeente)
en
lidnummer
naamkind
nulde normaalvorm
personeelsnummer
naam
adresgegevens (straat, postnummer, gemeente)
leeftijd
gevolgde lessen
Stap 2
talenkennis (taal, mondelinge kennis, schriftelijke kennis)
behaalde diploma's (naam, jaartal)
lidnummer
naam
adresgegevens (straat, postnummer, gemeente)
en
VVKSO
Informaticabeheer
Databases - pagina 27
VVKSO
Informaticabeheer
Databases - pagina 28
Persnum
P10
P11
P13
P16
P19
lidnummer
naamkind
leeftijd
en
lidnummer
naamkind
gevolgde les
Naam
Annie
Ria
Wim
Guy
Paul
en
Persnum
P10
P10
P11
P11
P11
P13
…
Voor de eenvoud kun je aan de tweede gegevensgroep een speciaal sleutelveld toevoegen dat kan dienen als primaire sleutel voor de gegevensgroep. Je krijgt dan iets als
het volgende.
eerste normaalvorm
lidnummer
naam
adresgegevens (straat, postnummer, gemeente)
Software
Visio
WP
Excel
Word
Access
Word
…
Misschien heb je het probleem van het softwaregebruik als volgt opgelost.
Persnum
P10
P11
P13
P16
P19
en
kindnummer
lidnummer
naamkind
leeftijd
Naam
Annie
Ria
Wim
Guy
Paul
Visio
x
Wp
Word
x
x
Access
Lotus
Excel
x
x
x
x
x
x
x
x
x
x
x
Schijnbaar is er hier geen sprake van herhalende groepen. In elke cel staat immers
hoogstens één vermelding nl. een x als de persoon het betreffende programma gebruikt.
en
kindnummer
Dergelijke structuur heeft enkele belangrijke nadelen.
gevolgde les
Voorbeeld 4
Hieronder zie je een tabel met namen van personen en de softwarepakketten die ze
gebruiken.
Persnum
P10
P11
P13
P16
P19
Naam
Annie
Ria
Wim
Guy
Paul
Software
Visio, WP
Excel, Word, Access
Word, Access
WP, Word, Lotus
Lotus, WP, Visio
Informaticabeheer
Vele velden zijn leeg, maar nemen toch plaats in op de schijf.
-
Wanneer een pakket niet meer gebruikt wordt, is het bij alle records leeg maar het
is nog aanwezig. Je kunt het slechts verwijderen wanneer je de structuur van de tabel wijzigt. Dit is een activiteit die de gewone gebruiker niet zal uitvoeren. Wanneer
er een nieuw pakket bijkomt moet je eveneens de tabelstructuur aanpassen. Wanneer je daarentegen met een gesplitste tabel werkt, dan heb je slechts records te
verwijderen of toe te voegen. De tabelstructuur verandert hierdoor niet, wel het
aantal rijen in de tabel.
3.5
De repeterende groep wordt gevormd door de gebruikte software. Een omzetting naar
de eerste normaalvorm geeft het volgende resultaat.
VVKSO
-
Databases - pagina 29
Partiële functionele afhankelijkheid
Voorbeeld 1
In een onderneming waar software op maat van de klant ontwikkeld wordt, wordt elke
opdracht gezien als een project dat geïdentificeerd wordt door een projectnummer en
naam. Analisten, programmeurs en andere medewerkers worden toegewezen aan één
of meerdere projecten. Om de kosten te kunnen bepalen, wordt per medewerker bijgehouden hoelang hij aan een project gewerkt heeft.
VVKSO
Informaticabeheer
Databases - pagina 30
nulde normaalvorm
Als deze stap niet gezet wordt, zal de database redundante gegevens bevatten, d.w.z.
dezelfde gegevens komen meerdere malen voor (zie voorbeeld 2). Inderdaad zal in
bovenstaande voorbeeld, voor elk personeelslid dat aan een bepaald project toegewezen wordt zowel de projectnaam als de klantnaam herhaald worden.
personeelsnummer
adresgegevens (straat, postnummer, gemeente)
uurloon
Merk op dat door het afzonderen van de projectgegevens de primaire sleutel van de
nieuwe gegevensgroep (projectnummer) aanwezig blijft als refererende sleutel in de
oorspronkelijk gegevensgroep.
projecten (projectnummer, projectnaam, klantnaam, werkduur)
eerste normaalvorm
De gegevens van de medewerkers zitten samen in de gegevensgroep. De gegevens van
het project zitten samen in een andere gegevensgroep. De koppeling tussen deze gegevensgroepen namelijk welke werknemers werken hoelang voor welk project, zit in
een aparte gegevensgroep met een samengestelde sleutel.
personeelsnummer
adresgegevens (straat, postnummer, gemeente)
uurloon
Voorbeeld 2
en
Een groothandelaar koopt bepaalde artikelen bij meerdere leveranciers.
personeelsnummer
projectnummer
projectnaam
klantnaam
werkduur
nulde normaalvorm
artikelnummer
artikelnaam
Kenmerkend voor een primaire sleutel is dat hij een rij volledig identificeert. Dit wil
zeggen: als de primaire sleutel gekend is, dan kun je de waarden van alle andere velden vinden. Men zegt dat alle velden functioneel afhankelijk zijn van de primaire sleutel.
artikelcategorie
leveranciersnummer
aantal
levtel
Als de primaire sleutel een samengestelde sleutel is, m.a.w. uit meerdere velden bestaat, dan is het mogelijk dat kennis van een deel van de sleutel voldoende is om de
waarde van een of meer velden te vinden. In het bovenstaande voorbeeld, tweede tabel, is dit het geval voor de velden projectnaam en klantnaam. Als het projectnummer
gekend is, dan kan men de waarde van deze beide velden vinden. Men zegt dat deze
velden partieel functioneel afhankelijk zijn van de primaire sleutel.
In de tweede stap in de normalisering moeten velden die partieel functioneel afhankelijk zijn uit de oorspronkelijke gegevensgroep verwijderd worden en samen met het
deel van de sleutel waarvan ze afhankelijk zijn in een nieuwe gegevensgroep geplaatst
worden.
tweede normaalvorm
eerste normaalvorm
artikelnummer
artikelnaam
artikelcategorie
en
artikelnummer
leveranciersnummer
aantal
levtel
personeelsnummer
Als de stap naar de tweede normaalvorm (2NF) niet gedaan wordt, kan de tweede gegevensgroep er als volgt uitzien.
adresgegevens (straat, postnummer, gemeente)
uurloon
Levnum
L1
L1
L1
L2
L2
L3
L3
L4
en
personeelsnummer
projectnummer
werkduur
en
projectnummer
projectnaam
klantnaam
VVKSO
Informaticabeheer
LevTel
235
235
235
999
999
800
800
600
Artnum
A1
A2
A3
A2
A4
A1
A5
A6
Aantal
10
12
14
10
5
13
10
5
Welke gegevens worden nodeloos herhaald?
Databases - pagina 31
VVKSO
Informaticabeheer
Databases - pagina 32
Hoeveel keer moet je het telefoonnummer veranderen als het telefoonnummer
van L1 verandert?
De werkwijze is dus analoog als bij de tweede normalisatiestap.
3.7
Wat gebeurt er indien artikel A6 gewist wordt (niet aangekocht)?
Kun je het telefoonnummer van een leverancier toevoegen als hij nog geen artikel
geleverd heeft?
Overzicht
Om tot een goede structuur van je relationele database te komen maak je volgende
stappen.
Inventariseer alle elementaire gegevens.
Welke velden zijn functioneel afhankelijk van slechts een deel van de sleutel?
Breng bovenstaande gegevensgroep in tweede normaalvorm.
3.6
Verwijder alle procesgegevens.
Zet de gegevensgroepen in eerste normaalvorm.
Doe het volgende totdat er geen nieuwe groepen meer ontstaan.
Geef de primaire sleutel van de groep aan.
Geef de deelverzameling aan die een herhaald aantal keren voorkomt.
Herhaal de sleutelgegevens van de oorspronkelijke groep samen met de gegevens
van de zich herhalende deelverzameling als nieuwe groep.
Verwijder de zich herhalende deelverzameling uit de oorspronkelijke groep.
Transitieve functionele afhankelijkheid
Voorbeeld
In een boekenwinkel houdt men van alle boeken volgende gegevens bij:
Zet de gegevensgroepen in tweede normaalvorm.
Boekcode
Categoriecode
CategorieOms
Titel
Samson op reis
BK1276
K36
Kinderen 3-6 jaar
VW0058
K03
Kinderen 0-3 jaar Dieren kijken
HJ1000
K36
Kinderen 3-6 jaar
Samson is ziek
…
…
…
…
Auteur
Verkprijs
14,50
2,45
14,50
…
…
Geef de attributen aan die niet functioneel afhankelijk zijn van de volledige sleutel.
Vorm een aparte groep voor ieder deel van de sleutel waarvan attributen functioneel afhankelijk zijn.
Neem in iedere groep de attributen met het bijbehorende sleuteldeel op.
Verwijder deze attributen uit de oorspronkelijke groep.
Zet de gegevensgroepen in derde normaalvorm.
Wat vind je zelf (intuïtief) van dit voorstel voor de gegevensbestandstructuur? Leg
uit met voorbeeld(en) waarom je dit voorstel goed of slecht vindt.
In dit voorbeeld is de categorieomschrijving (CategorieOms) gekend als de categoriecode gekend is. Dit veld is dus functioneel afhankelijk van een ander veld dan het primaire sleutelveld. Men spreekt in dat geval van transitieve functionele afhankelijkheid.
In de derde stap van de normalisering moeten velden die transitief functioneel afhankelijk zijn uit de oorspronkelijke gegevensgroep verwijderd worden en samen met het
veld waarvan ze afhangen in een nieuwe gegevensgroep geplaatst worden.
Boekcode
CategorieCode
Titel
BK1276
K36
Samson op reis
VW0058
K03
Dieren kijken
HJ1000
K36
Samson is ziek
…
…
…
Auteur
Verkprijs
14,50
2,45
14,50
…
…
en
CategorieCode
CategorieOms
K36
Kinderen 3-6 jaar
K03
Kinderen 0-3 jaar
…
…
Merk op: CategorieCode is de primaire sleutel van de nieuwe gegevensgroep en de refererende sleutel in de oorspronkelijke groep.
VVKSO
Informaticabeheer
Databases - pagina 33
Geef de attributen aan die ook functioneel afhankelijk zijn van andere attributen.
Vorm een aparte groep voor ieder attribuut of combinatie van attributen, waar andere attributen functioneel afhankelijk van zijn.
Neem in iedere groep de attributen met bijbehorende sleutel op.
Verwijder de attributen van de nieuwe groep(en) uit de oorspronkelijke groep.
3.8
Uitgewerkt voorbeeld
Beschouw als gegevensgroep de attributen behorende bij de entiteit Computer in het
voorbeeld Computerpark.
Nulde normaalvorm
De definities worden weergegeven voor de duidelijkheid. ComputerID fungeert als primaire sleutel.
Naam
Definitie
ComputerID
identificatie van de computer, naam waaronder de PC gekend is, bijvoorbeeld PC01, Joske ...
Serienummer
serienummer gegeven door producent
Merk
merknaam of 'wit product'
Type
naam van het type zoals gekend bij producent
Lokaal
locatie waar toestel zich bevindt, bijvoorbeeld: B11, Directiebureel ...
Functie
specifieke functie, bijvoorbeeld: lescomputer, labocomputer, server,
VVKSO
Informaticabeheer
Databases - pagina 34
internetserver ...
Processor
type met klokfrequentie
Harde schijf
merk, type, capaciteit … van alle ingebouwde schijven (samengesteld gegeven)
Diskettestation
merk, type… (samengesteld gegeven)
CD/DVD
merk en type van ingebouwd CD of DVD-station (samengesteld gegeven)
RAM
aanwezige hoeveelheid RAM
RAMtype
type
RAMUitTeBreiden
uitbreidingsmogelijkheid
Beeldscherm
merk, type… (samengesteld gegeven)
Klavier
merk, type… (samengesteld gegeven)
Geluidskaart
Netwerkkaart
ISATotaal
ISABezet
PCITotaal
PCIBezet
BIOS
Moederkaart
Chipset
Opmerkingen
Tweede normaalvorm
Enkel de nieuwe gegevensgroepen moeten bekeken worden, want zij hebben een samengestelde sleutel. In beide gevallen hangen alle niet sleutelattributen af van het eerste deel van de sleutel. Dit leidt tot volgde splitsingen.
Muis
merk, type… (samengesteld gegeven)
Geluidskaart
merk, type… (samengesteld gegeven)
ExtraComputer
HardeSchijfComputer
Netwerkkaart
merk, type… (samengesteld gegeven)
ISATotaal
totaal aantal ISA-uitbreidingsgleuven
ExtraID
ComputerID
HardeSchijfID
ComputerID
ISABezet
aantal bezette ISA-uitbreidingsgleuven
PCITotaal
totaal aantal PCI-uitbreidingsgleuven
PCIBezet
aantal bezette PCI-uitbreidingsgleuven
BIOS
naam
Extra
HardeSchijf
ExtraID
Type
Beschrijving
Merk
HardeSchijfID
Type
Capaciteit
Snelheid
Merk
Moederkaart
naam
Chipset
naam
Extras
soort, merk en type van extra ingebouwde onderdelen, bijvoorbeeld, zipdrive,
cd-writer… (samengesteld gegeven)
Derde normaalvorm
Opmerkingen
algemene opmerkingen i.v.m. het toestel
Diskettestation, CD/DVD, Beeldscherm, Klavier, Muis, Geluidskaart en Netwerkkaart zijn
samengestelde gegevens. Bovendien is het zo dat als het identificerend gegeven bekend is. Dit leidt tot volgde splitsingen.
eerste normaalvorm
Afhankelijk van het computerpark dat beschreven wordt, bevat de gegevensgroep verschillende repeterende groepen. In sommige computerparken is het bijvoorbeeld mogelijk dat een computer meerdere netwerkkaarten bevat, meerdere diskettestations enz.
Hier wordt verondersteld dat een toestel meerdere harde schijven kan hebben en meerdere extra's. Dit leidt tot volgende splitsing.
Computer
Extra
HardeSchijf
ComputerID
Serienummer
Merk
Type
Lokaal
Functie
Processor
Diskettestation
CD/DVD
RAM
RAMtype
RAMUitTeBreiden
Beeldscherm
Klavier
Muis
ExtraID
ComputerID
Type
Beschrijving
Merk
HardeSchijfID
ComputerID
Type
Capaciteit
Snelheid
Merk
VVKSO
Informaticabeheer
Databases - pagina 35
Computer
ComputerID
Serienummer
Merk
Type
Lokaal
Functie
Processor
DiskettestationID
CD/DVD_ID
RAM
RAMtype
RAMUitTeBreiden
BeeldschermID
KlavierID
MuisID
GeluidskaartID
NetwerkkaartID
ISATotaal
ISABezet
PCITotaal
PCIBezet
BIOS
Moederkaart
VVKSO
Informaticabeheer
Diskettestation
DiskettestationID
Merk
Type
Snelheid
ComputerID
CD/DVD
CD/DVD_ID
Merk
Type
Speed
Beeldscherm
BeeldschermID
Merk
Type
Energiesparend
KlavierID
KlavierID
Merk
Type
Ergonomisch
Muis
MuisID
Merk
Type
Soort
Geluidskaart
GeluidskaartID
Merk
Type
AantalBit
Driver
Netwerkkaart
NetwerkkaartID
Merk
Type
Driver
Databases - pagina 36
4
Chipset
Opmerkingen
Omzetting datamodel naar databaseontwerp
Omzetting van entiteiten
De andere gegevensgroepen van Computerpark zijn in de derde normaalvorm.
Omzetting van relaties
3.9
1
Oefeningen
Een entity-relationship diagram kun je omzetten naar de verschillende soorten DBMS.
In dit hoofdstuk wordt de omzetting naar een RDBMS besproken. Het resultaat van de
omzetting wordt het databaseontwerp genoemd.
Verbind de termen in kolom 1 met de synoniemen in kolom 2.
Veld
Een relationele database ontwerpen wil zeggen de tabellen en hun onderlinge relaties
definiëren en wel zo dat de database geen overtollige noch tegenstrijdige gegevens zal
bevatten.
Rij
Record
Kolom
Attribuut
De gegevens moeten steeds genormaliseerd worden. Je mag dit doen op het niveau
van het datamodel, d.w.z. het datamodel verfijnen tot de attributen die bij de entiteiten
of de relaties horen, een genormaliseerde groep vormen, of op het niveau van het database ontwerp, d.w.z. eerst een omzetting doen naar gerelateerde tabellen en dan de
tabellen normaliseren.
Relatie
Tabel
Instantie van entiteit
Kenmerk
2
3
Geef een voorbeeld van een unieke sleutel die door volgende organisaties of instellingen wordt gebruikt om iemand te identificeren.
-
Verzekeringsmaatschappij
-
Financiële instelling
-
Mutualiteit
-
Jeugdbeweging of sportvereniging
NAAM
Legrand
Legrand
De Bolle
Vervaet
Legrand
VOORNAAM
Pieter
Annemie
Annemie
Sandra
Pieter
5
4.1.1
Zelfstandige entiteiten
Als je een Entiteit-Relatie model hebt opgemaakt kun je in eerste instantie de entiteiten
vertalen in tabellen. De entiteiten worden tabellen, de attributen worden velden. Indien
dit nog niet gebeurd is, moet je nog een normalisatie doorvoeren.
GEBOORTEDATUM
1980-11-11
1980-11-11
1981-01-15
1980-10-18
1957-05-20
LENGTE
174
168
172
168
174
GEWICHT
60
56
58
56
80
Kun je ook een kandidaat-sleutel vinden?
4
Entiteiten
Zelfstandige entiteiten zijn entiteiten die niet in een supertype/subtype relatie zitten.
Onderstreep in de eerste rij (veldnamen) van volgende tabel de primaire sleutel.
NUMMER
P10
P11
P40
P50
P60
4.1
Bepaal een mogelijke structuur voor personeelsgegevens van een onderneming.
In de databank met personeelsgegevens wordt naast de gegevens van de werknemers (naam, datum indiensttreding, afdeling, brutoloon) ook de naam en de
geboortedatum van de kinderen bijgehouden.
Normaliseer de gegevensgroepen die je hebt gevonden als resultaat van de oefeningen uit het vorige hoofdstuk.
4.2
Relaties zonder attributen
4.2.1
Één-op-één relatie
Voorbeeld
relatie:
Gebruikt
entiteiten:
Bureautafel(BureautafelID, Locatie, Type…) en
Werknemer(WerknemerID, Familienaam, Voornaam…)
definitie:
Administratieve werknemers krijgen een vaste bureautafel toegewezen op
kantoor. Deze bureautafel moet met niemand gedeeld worden en iedereen
krijgt slechts één bureautafel. Er kunnen werknemers zijn zonder bureautafel en bureautafels die niet gebruikt worden door werknemers.
Werknemer
Bureautafel
De relatie Gebruikt wordt in het relationele ontwerp gebracht door tussen de tabellen
Werknemer en Bureautafel een relatie (koppeling) te leggen. Dit gebeurt door aan de
tabel Bureautafel de primaire sleutel (WerknemerID) van de tabel Werknemer toe te
voegen of omgekeerd. Het toegevoegde veld is de referende sleutel.
VVKSO
Informaticabeheer
Databases - pagina 37
VVKSO
Informaticabeheer
Databases - pagina 38
De tabellen in het relationele ontwerp worden dus:
4.2.3
Werknemer
Beschouw weer dezelfde relatie maar breid ze verder uit door toe te laten dat eenzelfde
bureautafel gedeeld wordt door verschillende werknemers.
WerknemerID
Familienaam
Voornaam
…
Bureautafel
1
BureautafelID
Locatie
Type
1 …
WerknemerID
Werknemer
of
Werknemer
WerknemerID
Familienaam
Voornaam
…
BureautafelID
Bureautafel
Om deze relatie te vertalen naar een relationeel ontwerp, creëer je nog een extra tabel
naast de tabellen die de entiteiten voorstellen. Deze derde tabel geef je als attributen
de primaire sleutel van beide tabellen. Ze vormen samen de primaire sleutel van de
nieuwe tabel en elk apart een refererende sleutel voor een entiteit-tabel. Iedere entiteit-tabel heeft een een-op-veel relatie met de bijkomende derde tabel.
Bureautafel
1
Veel-op-veel relatie
BureautafelID
1 Locatie
Type
…
Werknemer
In principe zijn beide oplossingen gelijkwaardig. Welke van de twee uiteindelijk praktisch het beste is, hangt af van de bevraging van de databank. Als daarbij meestal uitgegaan wordt van de werknemers (wat waarschijnlijk het geval is), dan is de eerste
oplossing de beste.
Opmerking
WerknemerBureautafel
WerknemerID
Familienaam
Voornaam
…
1
WerknemerID
BureautafelID
Bureautafel
1
BureautafelID
Locatie
Type
…
4.3
Relaties met attributen
In sommige gevallen kan een één-op-één relatie zonder attributen teruggebracht worden tot één tabel. Dit kan enkel als tenminste in een van de tabellen geen enkel attribuut als primaire sleutel kan fungeren, anders krijg je immers transitieve afhankelijk.
4.3.1
Eén-op-één relatie
Het is vooral de optionaliteit die zal bepalen of het werken met één enkele tabel zinvol
is. Veel lege velden bijhouden heeft geen zin.
relatie:
Huwt
entiteiten:
Man(ManID, Familienaam, Voornaam…) en
Vrouw(VrouwID, Familienaam…)
definitie:
Een man huwt een vrouw. Een man kan maar één vrouw huwen en omgekeerd. Niet elke man en niet elke vrouw huwt.
4.2.2
Eén-op-veel relatie
Beschouw dezelfde relatie als hierboven maar waarbij het mogelijk is dat een werknemer meerdere bureautafels toegewezen krijgt.
Voorbeeld
attributen: Huwelijksdatum, NaamGetuige1, NaamGetuige2
Bureautafel
Werknemer
Man
Vrouw
De omzetting gebeurt op dezelfde manier als bij een één-op-één relatie maar nu wordt
de primaire sleutel van de tabel langs de een-kant toegevoegd als refererende sleutel
aan de tabel aan de veel-kant.
De relatie wordt vertaald in een bijkomende tabel.
Werknemer
ManID
Familienaam
Voornaam
…
WerknemerID
Familienaam
Voornaam
…
Bureautafel
1
BureautafelID
Locatie
Type
…
WerknemerID
De één- en de veel-kant worden respectievelijk aangeduid door de symbolen 1 en
VVKSO
Informaticabeheer
.
Databases - pagina 39
Man
Huwelijk
1
Huwelijksdatum
NaamGetuige1
NaamGetuige2
1 VrouwID
1
ManID
Vrouw
1
VrouwID
Familienaam
Voornaam
…
Vanwege de één-op-één relatie kan, als primaire sleutel van de tabel die met de relatie
overeenkomt, de primaire sleutel van één van beide andere tabellen gekozen worden.
VVKSO
Informaticabeheer
Databases - pagina 40
4.3.2
Een-op-veel relatie
4.3.4
Voorbeeld
Relaties zonder attributen
relatie:
Schrijft in
entiteiten:
Persoon(PersoonID, Familienaam, Voornaam…) en
Cursus(CursusID, Naam, Lesgever, Klaslokaal…)
definitie:
Een persoon schrijft in voor een cursus. Een persoon kan maar inschrijven
voor één cursus.
attributen: Inschrijvingsdatum, Inschrijvingsgeld
Persoon
Naast de entiteiten, wordt de relatie zelf ook vertaald in een tabel. Deze tabel krijgt als
attributen de attributen van de relatie en de primaire sleutels van de entiteit-tabellen.
Persoon
Inschrijving
PersoonID
Familienaam
Voornaam
…
1
Inschrijvingsdatum
1 Inschrijvingsgeld
PersoonID
CursusID
Cursus
1
CursusID
Naam
Lesgever
…
Beschouw dezelfde relatie waarbij het nu toegestaan is dat een persoon zich inschrijft
voor meerdere cursussen.
Cursus
PersoonID
Familienaam
Voornaam
…
Inschrijving
1
Inschrijvingsdatum
Inschrijvingsgeld
PersoonID
CursusID
Cursus
1
CursusID
Naam
Lesgever
Klaslokaal
…
Welke verschillen zijn er met de een-op-veel relatie?
VVKSO
Informaticabeheer
- 3 tabellen (1: ; 1: )
- refererende sleutels in relatie-tabel: primaire sleutels entiteiten
- primaire sleutel relatie: primaire sleutels entiteiten
Uitgewerkt voorbeeld
De gegevensgroepen behorende bij de entiteiten in het datamodel voor Computerpark
zijn reeds genormaliseerd in vorig hoofdstuk. Alle resulterende gegevensgroepen zullen
omgezet worden in een tabel. Dit leidt tot de volgende tabellen: Randapparaat, Software, Licentie, Verbruiksproduct, Leverancier, Computer, HardeSchijf, Extra, HardeSchijfComputer, ExtraComputer, Diskettestation, CD_DVD, Beeldscherm, Klavier, Muis, Geluidskaart, Netwerkkaart.
De relaties tussen deze tabellen zijn af te leiden uit het datamodel of volgen uit de
normalisering.
De oplossing is analoog maar nu is een bijkomende tabel verplicht.
Persoon
– Een-op-een relatie
- 3 tabellen (1:1; 1:1)
- refererende sleutels in relatie-tabel: primaire sleutels entiteiten
- primaire sleutel relatie: een van primaire sleutels entiteiten
– Een-op-veel relatie
- 3 tabellen (1:1; 1: )
- refererende sleutels in relatie-tabel: primaire sleutels entiteiten
- primaire sleutel relatie: primaire sleutel entiteit van de veel-kant
– Veel-op-veel relatie
4.4
Veel-op-veel relatie
Persoon
– Een-op-een relatie
- 2 tabellen (1:1)
- primaire sleutel ene refererende andere
- in sommige gevallen terug te brengen tot één tabel
– Een-op-veel relatie
- 2 tabellen (1: )
- primaire van een-kant: refererende veel-kant
– Veel-op-veel relatie
- 3 tabellen (1: ; 1: )
- 3 de tabel bevat primaire sleutels als refererende sleutel
Relaties met attributen
Cursus
Verklaar de optionaliteit van deze relatie.
4.3.3
Overzicht
Databases - pagina 41
Het datamodel bevat drie veel-op-veel relaties en vijf relaties met attributen nl. Levertx
en Draait op. Deze moeten nog omgezet worden naar tabellen en relaties voor het relationeel model.
Is verbonden met
Veel-op-veel relatie zonder attributen.
Computer
Verbinding
Randapparaat
ComputerID
…
ComputerID
RandapparaatID
RandapparaatID
…
VVKSO
1
Informaticabeheer
1
Databases - pagina 42
Levertx
Levert3: levering software (één-op-veel)
Het gaat hier om 4 verschillende relaties die verschillende entiteiten verbinden. Drie
van de relaties zijn één-op-veel en de vierde is veel-op-veel.
De relatie wordt vertaald in een tabel LeveringSoftware.
Software
Elke relatie heeft dezelfde attributen.
Naam
Definitie
Leveringsdatum
datum waarop goederen geleverd werden
Verplicht
Ja
Aankoopprijs
prijs per stuk
Ja
Opmerking
opmerking i.v.m. de levering
SoftwareID
…
LeveringSoftware
1
Leveringsdatum
Aankoopprijs
1 Opmerking
LeverancierID
SoftwareID
Leverancier
LeverancierID
1 …
Tussen de tabellen Software en LeveringSoftware bestaat een één-op-één relatie. Deze
kan in sommige gevallen teruggebracht worden tot één tabel.
Levert1, levering computers (één-op-veel)
Omdat een bepaald softwarepakket (installatie cd's) slechts in één exemplaar en door
één leverancier geleverd wordt, plaatsen we de attributen van de levering bij in de tabel Software.
De relatie wordt vertaald in een tabel: LeveringComputer.
Computer
ComputerID
…
LeveringComputer
1
Leveringsdatum
Aankoopprijs
1 Opmerking
LeverancierID
ComputerID
Leverancier
LeverancierID
1 …
Als meerdere computers bij dezelfde levering aan dezelfde prijs geleverd worden, krijg
je dikwijls dezelfde waarden voor de attributen en de tabel LeveringComputer. In dat
geval kun je aan de levering een identificatie toekennen en pas je de tabellen aan.
Computer
ComputerID
LeveringID
…
LeveringComputer
1 LeveringID
Leveringsdatum
Aankoopprijs
Opmerking
LeverancierID
Is dit een goed idee als er veel freeware gebruikt wordt? Verklaar je antwoord.
Software
SoftwareID
…
LeveranciersID
Leveringsdatum
Aankoopprijs
Opmerking
Leverancier
LeverancierID
1 …
Leverancier
LeverancierID
1 …
Hoe voorzie je deze situatie in het datamodel?
Levert4: levering verbruiksproducten
Hier moet er met een aparte tabel gewerkt worden omdat het om een veel-op-veel relatie gaat.
Verbruiksproduct
LeveringVerbruiksProd
VerbruiksproductID 1
…
LeveringID
Leveringsdatum
Aankoopprijs
Opmerking
LeverancierID
VerbruiksproductID
Vertaal het aangepaste datamodel naar een databaseontwerp.
Bekom je hetzelfde resultaat?
Levert2: levering randapparaten (één-op-veel)
Leverancier
LeverancierID
1 …
In principe vormen LeverancierID, VerbruikproductID en Leveringsdatum samen een samengestelde primaire sleutel. Hier is de voorkeur gegeven aan een surrogaatsleutel
LeveringsID.
Idem.
Draait op
Deze relatie is een veel-op-veel relatie. Er zal dus met een bijkomende tabel moeten
gewerkt worden. De attributen van Draait op zijn:
VVKSO
Informaticabeheer
Databases - pagina 43
VVKSO
Informaticabeheer
Databases - pagina 44
5
Naam
Definitie
Begindatum
datum installatie
Einddatum
datum verwijdering
Opmerking
opmerking, bijvoorbeeld Service Release die geïnstalleerd is, optionele componenten
Computer
DraaitOp
ComputerID
LeveringID
…
1
ComputerID
SoftwareID
Begindatum
Einddatum
Opmerking
Software
SoftwareID
1 …
Een database implementeren
Het tabel-ontwerpscherm in MS-Access
Gegevenstypes
Veldeigenschappen
5.1
Het tabel-ontwerpscherm
Je maakt een tabel aan in twee stappen: eerst leg je de tabeldefinitie vast en daarna
voer je de gegevens in.
Bij het vastleggen van de tabeldefinitie bepaal je de veldnamen, gegevenstypes, beschrijvingen en veldeigenschappen van de velden.
Opmerking: mogelijk bevatten alle computers in hetzelfde lokaal ook dezelfde software.
Het is zeer belangrijk dat je goed nadenkt voor je de structuur vastlegt. Later wijzigingen aanbrengen, kan behoorlijk ingewikkeld zijn en bovendien soms leiden tot gegevensverlies!
Open de database Artemis. Selecteer de tabel tblWerknemers en kies
in het databasevenster.
Is in dit geval deze oplossing een goede oplossing? Verklaar je antwoord.
Je komt in de ontwerpweergave van de tabel. Het scherm voor ontwerpweergave bestaat
uit twee delen. In het bovenste venster staan de velden met hun veldnamen, gegevenstype en beschrijving. In het onderste gedeelte zie je een aantal specifieke
veldeigenschappen van het geselecteerde veld.
Pas het datamodel en het dataontwerp aan aan deze situatie.
Connecteert
Connecteert is een speciale relatie omdat ze een entiteit verbindt met zichzelf. Ook hier
is een supplementaire tabel nodig.
Randapparaat
RandapparaatID
…
Connectie
1
RandapparaatID1
RandapparaatID2
Vanwege het speciale karakter van tabel Connectie zal er steeds bijzondere aandacht
moeten besteed worden aan query's en filters die hiermee gemaakt worden.
4.5
Oefeningen
Zet de datamodellen van de oefeningen uit het vorige hoofdstuk om naar databaseontwerpen voor een RDBMS.
VVKSO
Informaticabeheer
Databases - pagina 45
VVKSO
Informaticabeheer
Databases - pagina 46
Met deze knoppen schakel je tussen de ontwerpweergave en
de gegevensbladweergave van de tabel.
Wanneer is zo een beschrijving nuttig?
5.1.4
5.1.1
Correct en efficiënt werken met een database betekent dat je een bepaald gegeven
slechts één keer invoert en steeds opnieuw gebruikt. Daarom is het zeer belangrijk dat
een gegeven zonder fouten en in de juiste vorm in een tabel wordt weggeschreven.
Aangepaste veldeigenschappen helpen hierbij.
Veldnaam
Gebruik de Helpfunctie om de eigenschappen van veldnamen op te zoeken. (Druk
op F1 terwijl de muisaanwijzer in de kolom van de veldnaam staat.)
Open de tabel tblWerknemers in ontwerpweergave.
Regels voor de naamgeving van objecten
Vul onderstaande tabel in. Zoek welke veldeigenschappen worden gebruikt om de
opgegeven doelen te realiseren. Welke waarden worden toegekend aan de verschillende veldeigenschappen? Gebruik de Helpfunctie om bijkomende informatie
op te vragen.
In MS-Access kunnen veldnamen maximaal 64 tekens lang zijn en uit elke combinatie
van letters, getallen, spaties en speciale tekens bestaan, met uitzondering van een
punt (.), uitroepteken (!), accent grave (`) en vierkante haakjes ([ ]). Het is niet mogelijk om dezelfde veldnamen aan meerdere velden toe te wijzen.
Let steeds op het volgende.
veldnamen
Gebruik betekenisvolle veldnamen. Uit de naam van een veld moet je de inhoud ervan
kunnen afleiden.
Vermijd te lange veldnamen en gebruik zo weinig mogelijk spaties. Dit laatste is
vooral van belang als je vaak in expressies of Visual Basic-code naar objecten verwijst.
5.1.2
Veldeigenschappen
Hoofdletters
Voornaam
Kleine letters
Adres
In gegevensbladweergave
“Straat en nummer” als aangepaste titel
Gemeente
Vlot sorteren en/of zoeken op
gemeente
Vul voor de onderstaande velden het gekozen gegevenstype in en ga na waarom
die keuze gemaakt werd. Gebruik eventueel de Helpfunctie voor meer uitleg over
de verschillende types.
Postcode
Maximum vier tekens
veldnaam
gegevenstype
Telefoonnummer
Maximum 13 posities
Functie
Bij het invoeren van gegevens
moet de gebruiker de functie
kunnen kiezen uit een vooraf
gedefinieerde lijst (bedrijfsleider
of vertegenwoordiger of manager verkoop of…).
BrutoWedde
Wedden moeten in EUR uitgedrukt worden.
Familienaam
BrutoWedde
InDienst
Twee decimale cijfers weergeven
Foto
Bijzonderheden
Gebruik steeds het gepaste gegevenstype. Een postnummer is bijvoorbeeld van het tekentype, ook al bevat het enkel cijfers, omdat je er niet mee rekent.
5.1.3
Beschrijving
In de kolom Beschrijving is plaats voor een korte beschrijving van het veld. Deze beschrijving is ook te zien in de statusbalk als het veld geselecteerd is in de gegevensbladweergave.
VVKSO
Informaticabeheer
waarde
Precies vier cijfers
Werknemer-ID
Auto
veldeigenschap
Moet steeds worden ingevuld.
Gegevenstype
Zoek in de kolom Gegevenstype welke types mogelijk zijn.
doel
Familienaam
Databases - pagina 47
Toestelnummer
Precies twee cijfers
Auto
De meeste werknemers beschikken over een auto.
InDienst
Weergave zoals bijvoorbeeld
15-dec-98
Weergave
Standaard is de systeemdatum
ingevuld.
Geslacht
VVKSO
Wordt weergegeven aan de
hand van een cijfer: 1 = Manne-
Informaticabeheer
Databases - pagina 48
veldnamen
doel
veldeigenschap
waarde
Hoeveel kolommen worden opgenomen in de keuzelijst? Waaruit kun je dat afleiden?
lijk; 2 = Vrouwelijk
Waaruit bestaat de eerste kolom? En de tweede? Waaruit kun je dat afleiden?
Open de tabel tblProducten in gegevensbladweergave.
Welke kolom wordt in feite bewaard in het veld? Waaruit kun je afleiden?
Tot welke categorie behoort productnummer 10?
De kolom met het categorienummer is onzichtbaar in gegevensbladweergave.
Waaruit kun je dit afleiden?
Schakel over naar de ontwerpweergave.
Zorg ervoor dat het categorienummer nu wel te zien is in gegevensbladweergave.
Vind je in deze tabel een veld terug waarin de categorienaam wordt bijgehouden?
Is dat een goed idee?
Welk veld zorgt ervoor dat er informatie in deze tabel wordt bijgehouden over de
categorie waartoe het product behoort?
Door gebruik te maken van het tabblad Opzoeken in het veldeigenschappengedeelte
van de ontwerpweergave van de tabel, maak je een veld dat een keuzelijst weergeeft.
De waarden in de lijst zijn gegevens uit een bestaande tabel of query of vaste waarden
die je invoert bij het maken van het veld.
In de tabel tblProducten is het veld categorienummer omgevormd tot een veld met een
keuzelijst waarin de categorienamen worden weergegeven. De lijst bevat in feite de
kolommen Categorienummer en Categorienaam van de tabel tblCategorieën, maar het
categorienummer wordt niet getoond. Heel belangrijk is dat tussen de tabellen tblProducten en tblCategorieën de juiste relatie aanwezig is. Dat leer je in het volgende hoofdstuk.
Selecteer het veld Categorienummer en bestudeer het tabblad Opzoeken.
Zorg opnieuw voor een gebruiksvriendelijker voorstelling.
Wat is het voordeel van de eigenschap Alleen lijst op Ja te zetten?
5.2
Zelf een tabel maken
5.2.1
Probleemdefinitie
Juli, augustus en september zijn altijd drukke maanden voor Artemis. Het extra werk
wordt opgevangen door aanwerving van jobstudenten. Jij moet de gegevens hiervan
bijhouden in een nieuwe tabel
5.2.2
Tabelstructuur
Bepaal welke informatie je per jobstudent moet hebben.
De tabelstructuur wordt ingevoerd in het Tabelontwerpvenster.
Selecteer in het databasevenster het tabblad Tabel en klik op
.
Kies Ontwerpweergave.
Maak gebruik van F1 om uitleg op te vragen over de verschillende onderdelen.
VVKSO
Informaticabeheer
Databases - pagina 49
Het ontwerpscherm heeft een aangepaste werkbalk:
VVKSO
Informaticabeheer
Databases - pagina 50
Beantwoord de nevenstaande
vraag voorlopig met Nee. (zie
verder)
Gebruik Knopinfo om de betekenis van de knoppen te kennen.
Vul het Tabelontwerpvenster correct in, rekening houdend met de onderstaande
tabel:
veldnaam
5.2.3
gegevenstype
Familienaam
Indexeren
Met de veldeigenschap Geïndexeerd kun je het sorteren en zoeken naar gegevens versnellen. Opzoeken en/of sorteren volgens familienaam komt vrij vaak voor en moet dus
vlot verlopen.
Straat
Postnummer
Gemeente
Open het tabelontwerpvenster opnieuw voor tblJobstudenten.
Telefoon
Geboortedatum
Kies uit het lijstje naast Geïndexeerd Ja (Duplicaten OK).
Afdeling
Uurloon
Waarom kies je voor Duplicaten OK en niet voor Geen duplicaten?
Rekeningnummer
DatumEersteContract
Sla het gewijzigde ontwerp op.
Rijbewijs
Indexen versnellen het zoekproces. Komt de naam van de jobstudent niet voor dan zal
dit vlugger ontdekt worden met een index.
Geslacht
Opmerkingen
Bij het toevoegen, verwijderen en aanpassen van de gegevens van een jobstudent zal
MS-Access automatisch alle bestaande indexen aanpassen.
Verfijn vervolgens het tabelontwerp.
De familienaam (verplicht in te vullen) moet steeds in hoofdletters worden getoond.
5.2.4
Voor het postnummer geef je steeds precies vier cijfers in.
Tabelstructuur wijzigen
Voeg het veld Voornaam toe na het veld Familienaam.
De gemeente wens je steeds in hoofdletters weer te geven.
Let op: Wijzigingen aan de tabelstructuur kunnen leiden tot gegevensverlies!
Het uurloon kan waarden krijgen tussen 8,00 EUR en 12,00 EUR; de meeste jobstudenten verdienen 10,00 EUR per uur.
Voor het rekeningnummer moet je een gepast masker voorzien (enkel cijfers typen
en bewaren).
De datum waarop het eerste contract met de jobstudent wordt afgesloten kan nooit
plaatsvinden na vandaag.
Welke problemen kun je verwachten in volgende gevallen:
wijzigen van de validatieregel bij het veld Uurloon in: Between 10 And 15?
veldlengte bij het veld Familienaam wijzigen in 25.
Kun je problemen verwachten als je de veldlengte bij het veld Gemeente wijzigt in
55?
Voor de afdeling moet de gebruiker kunnen kiezen uit een lijst (Verkoop, Personeelsdienst, Productie of Marketing). Gebruik voor het maken van een keuzelijst de
Wizard Opzoeken bij het kiezen van het Veldtype.
De meeste jobstudenten hebben geen rijbewijs.
5.2.5
Bij Geslacht moet je 1 (voor mannelijk) of 2 (voor vrouwelijk) invullen.
Met de veldeigenschap Validatieregel kun je de waarden die ingevoerd mogen worden
beperken. Een validatieregel van een veld mag echter nooit een veldnaam bevatten.
Test de veldeigenschappen aan de hand van vijf goed gekozen voorbeeldrecords.
Sluit het ontwerpscherm. Kies wijzigingen opslaan en bewaar de structuur als tblJobstudenten.
VVKSO
Informaticabeheer
Databases - pagina 51
Tabeleigenschappen
De jobstudenten van Artemis moeten minstens 18 jaar zijn bij aanwerving. Deze voorwaarde controleren voor elke record vereist de kennis van de Geboortedatum en van
DatumEersteContract. Daarom kun je deze eis niet vertalen naar een validatieregel bij
een bepaald veld. Via de tabeleigenschappen kan dit wel.
VVKSO
Informaticabeheer
Databases - pagina 52
Klik op de knop Eigenschappen
ster als volgt in:
of kies Beeld, Eigenschappen .... Vul het dialoogven-
5.3
Een database implementeren
Als je een database-ontwerp hebt gemaakt, kun je de database implementeren in MSAccess. Iedere tabel uit het ontwerp wordt geïmplementeerd als een MS-Access tabel.
Bij het ontwerp heb je ook al voor elke tabel een primaire sleutel gedefinieerd en heb je
relaties tussen de tabellen gelegd.
Bij het implementeren van de database moet je dus:
-
tabellen definiëren;
-
relaties tussen de tabellen leggen.
Bij het definiëren van de tabellen moet je aandacht besteden aan het invoeren van
goede veldeigenschappen.
De rechte haken ([ ]) duiden aan dat het niet om de woorden ‘DatumEersteContract’ en
‘Geboortedatum’ gaat, maar om de velden met die naam.
Ga na met de Helpfunctie wat de betekenis is van de functie Year().
Je kunt meerdere voorwaarden aanbrengen in de validatieregel door ze te verbinden met de logische operatoren en en of.
Nadat alle gegevens van een record ingevoerd zijn, zal MS-Access controleren of er aan
de tabeleigenschappen is voldaan.
5.2.6
Een nieuwe database maken in MS-Access
Wanneer je Microsoft Access start, wordt automatisch een dialoogvenster weergegeven
waarin je kunt kiezen of je een nieuwe database wilt maken of een bestaande database
wilt openen. Als dit dialoogvenster wordt weergegeven, kies je Op basis van een lege
database en klik je vervolgens op OK.
Als je al een database hebt geopend of het dialoogvenster hebt gesloten dat verschijnt
wanneer Microsoft Access wordt gestart, klik je op de knop Nieuw
en kies je Lege Database in het taakvenster Nieuw bestand.
op de werkbalk
Primaire sleutel
Voor elke tabel in MS-Access wordt best een primaire sleutel gedefinieerd.
Het kiezen van een primaire sleutel heeft volgende voordelen:
je kunt nooit twee records met dezelfde waarde voor dat veld (of combinatie van
velden) tegenkomen;
het sorteren en opzoeken volgens dit veld gaat aanzienlijk sneller;
de tabel wordt gerangschikt volgens de waarde van de primaire sleutel.
Ga na in de ontwerpweergave van de tabel tblWerknemers welk veld als primaire
sleutel werd ingesteld.
Hoe herken je de primaire sleutel?
Open de tabel tblJobstudenten .
Geef een naam en een locatie op voor de database en klik op Maken.
Welk(e) veld(en) kunnen hier in aanmerking komen als primaire sleutel? Verklaar
je antwoord.
5.4
Voeg een veld JobstudentID toe als primaire sleutel.
Welk gegevenstype kies je hiervoor en waarom?
VVKSO
Informaticabeheer
Databases - pagina 53
Oefeningen
1
Hoeveel primaire sleutels kan een tabel hebben. Hoe ken je een primaire sleutel
toe aan een veld?
2
Wat is de betekenis van de knoppen
VVKSO
Informaticabeheer
?
Databases - pagina 54
4
Een primaire sleutel bestaat uit meerdere velden. Hoe kun je die primaire sleutel
toekennen in MS-Access? Hoe ga je praktisch te werk als deze velden niet naast elkaar liggen?
5.5
Overzicht
5.5.1
Een tabel aanmaken
5
Zoek in de Helpfunctie de specifieke codes op die je per veldtype kunt gebruiken bij
het definiëren van een notatie.
-
structuur (veldnamen met gegevenstype en eventueel beschrijving), veldeigenschappen en tabeleigenschappen vastleggen in het ontwerpscherm;
6
Open de tabel tblKlanten en zorg dat de velden aan volgende voorwaarden voldoen:
-
gegevens invoeren in de gegevensbladweergave of een formulier.
veldnamen
Veldnaam
doel
Naam
Hoofdletters
Moet steeds ingevuld zijn.
Postnr
Precies vier cijfers invoeren
Veldnamen kunnen maximaal 64 tekens lang zijn en uit elke combinatie van letters,
getallen, spaties en speciale tekens bestaan, met uitzondering van een punt (.), uitroepteken (!), accent grave (`) en vierkante haakjes ([ ]). Het is niet mogelijk om dezelfde veldnamen aan meerdere velden toe te wijzen.
Gemeente
Hoofdletters
BTWNR
Gepast masker. Enkel cijfers invoeren en bewaren.
Bijvoorbeeld: BE 123 123 123
Type
Verplicht in te vullen.
Keuze maken tussen
R(estaurant)
Saldo
7
P(articulier),
W(inkelier),
Gegevenstype
T(raiteur)
Tekst
alfanumeriek gegeven: zowel letters, cijfers als tekens zijn
toegestaan
maximale lengte: 255 karakters
Memo
uitgebreid alfanumeriek gegeven
maximale lengte: 64 000 karakters
memovelden kun je raadplegen, maar je kunt er geen zoekacties of sorteeracties op doen.
of
Kan nooit negatief zijn. Twee decimalen en valutaweergave.
Vele klanten beschikken over een fax. Voeg een veld toe aan de tabel tblKlanten
voor het faxnummer. Voorzie het veld van een gepast masker.
8
Mag je de veldlengte van een numeriek veld van lange integer wijzigen in integer als
er reeds gegevens in de tabel staan? En omgekeerd? Verklaar je antwoord.
9
Implementeer de database Computerpark.
Numeriek
Numeriek gegeven (getal). Gebruik dit gegevenstype alleen voor
getallen waarmee je wilt rekenen. Voor een postnummer b.v.
kies je als gegevenstype tekst omdat je er niet mee moet rekenen.
Datum/tijd
voor het bewaren van een datum en tijd.
Valuta
voor het bewaren van monetaire bedragen. De munteenheid stel
je in MS-Windows95/98 in (Start, Instellingen, Configuratiescherm, Landinstellingen).
Autonummering
een getal dat automatisch verhoogt als je een nieuwe record
aan de tabel toevoegt. MS-Access vult een veld van dit type zelf
in, je kunt het niet bijwerken.
Ja/nee
Veldtype waarvan de inhoud een logische waarde is: ja/nee,
waar/onwaar, aan/uit of –1/0
OLE-object
voor het opslaan van gegevens verbonden met een andere toepassing, b.v. een foto, een tekening . geluiden, een Worddocument, een Excel-rekenblad,...
Hyperlink
Een veld waarin tekst of combinaties van tekst en cijfers opgeslagen worden als tekst en gebruikt worden als hyperlinkadres
Wizard Opzoeken
Maakt een veld waarmee je door middel van een keuzelijst een
waarde kunt kiezen uit een lijst met waarden of uit een andere
tabel. Volg stapsgewijs de wizard.
Beschrijving
Een beschrijving is facultatief. De beschrijving verschijnt op de statusbalk als je het
veld selecteert in de gegevensbladweergave of in een formulier.
VVKSO
Informaticabeheer
Databases - pagina 55
VVKSO
Informaticabeheer
Databases - pagina 56
voor numerieke velden
Veldeigenschappen
De veldeigenschappen zijn afhankelijk van het gegevenstype.
Veldlengte
Tekstvelden: maximaal aantal tekens dat het veld kan bevatten, standaard 50 karakters en maximaal 255 karakters.
Numerieke velden: de veldlengte verwijst naar de nauwkeurigheid waarmee de getallen bewaard worden (byte,decimal,
integer, lange integer, enkele precisie, dubbele precisie).
Notatie
Specificeert de manier van weergeven en afdrukken van tekst,
getallen, tijden en datums. B.v. voor tekstvelden- invoer omzetten in hoofdletters (>) of kleine letters (<); voor numerieke velden: aantal decimalen, met munteenheid, procentnotatie...
Invoermasker
Een indeling die de invoer van gegevens vergemakkelijkt. Het
bevat tekens die letterlijk worden weergegeven (ronde haakjes,
punten, koppeltekens... ) en maskertekens die aangeven waar er
tekens moeten worden ingevoerd.
Bijschrift
Tekst die in formulieren en rapporten i.p.v. de veldnaam gebruikt
wordt.
Standaardwaarde
Mogelijkheden
Voorbeeld
Standaard getalnotatie
71412,5
Afdruk
714123,5
Valuta
1230,6
1 230,60 EUR
Euro
1230,6
1 230,60
Vast
1727,7
1728
Standaard
1230,6
1 230,60
Percentage
0,5
50 %
Wetenschappelijk
1000
1E+03
voor datum- en tijdvelden
Mogelijkheden
Afdruk
Standaard datumnotatie
96-31-01 16:30:00
Lange datumnotatie
Woensdag 31 januari 1996.
Middellange datumnotatie
31-jan-96
Vaste waarde die automatisch ingevuld wordt, je kunt deze waarde steeds wijzigen.
Korte datumnotatie
96-01-31
Lange tijdsnotatie
16:30:00
Validatieregel
Voorwaarde waaraan invoer moet voldoen (b.v. tussen 1 en 6).
Middellange tijdsnotatie
04:30 PM
Validatietekst
Tekst die op het scherm verschijnt wanneer de invoer niet aan de
voorwaarde voldoet.
Korte tijdsnotatie
16:30
Vereist
Bij Ja moet je voor dit veld steeds gegevens invoeren. Het mag
niet leeg blijven.
Lengte Nul toegestaan
Enkel bij tekstvelden. Bij Ja kun je de nulstring ("") invoeren als
de gegevens nog niet gekend zijn en je toch iets moet invoeren.
Het scheidingsteken van de duizendtallen, het teken voor de munteenheid en de datum
en tijdnotatie bepaal je in MS-Windows (Start, Instellingen, Configuratiescherm, Landinstellingen).
Geïndexeerd
Als een veld geïndexeerd is, verloopt het opzoeken van gegevens
sneller. Invoeren en wijzigen verloopt echter trager. Ook als een
veld dikwijls dezelfde inhoud bevat is het gebruik van indices geen
voordeel. Indexeer je, dan moet je ook nog invoeren: duplicaten
OK (2 velden met identieke inhoud zijn mogelijk) of geen duplicaten (2 velden met identieke inhoud zijn niet mogelijk).
Veldlengte voor numerieke velden
mogelijkheden
waarde tussen
decimalen
aantal bytes
Byte
0 en 255
0
1
Integer
-32768 en +32767
0
2
Lange integer
-2 147 483 648 en
2147 483 647
0
4
Enkele precisie
-3,4x10 en +3,4
7
4
Dubbele precisie
1-1,797x10308 en +1,797x1
15
8
Codes
Als je niet tevreden bent met één van de voorgedefinieerde notaties, kun je je eigen
notatie samenstellen m.b.v. codes. De opbouw van de notatie en de codes zijn afhankelijk van het gegevenstype van het veld waarvoor je een notatie definieert.
Codes voor tekst- en memoveld
Code
Beschrijving
@
Een tekstteken (teken of spatie) is vereist
&
Een tekstteken (teken of spatie) is niet vereist
>
Alle invoer wordt in hoofdletters weergegeven
<
Alle invoer wordt in kleine letters weergegeven
Aangepaste notaties voor tekst- en memovelden kunnen maximaal twee secties bevatten:
Sectie
Beschrijving
1
Notatie voor velden die tekst bevatten
2
Notatie voor velden die tekenreeksen met lengte nul en Null-waarden bevatten
Notaties
Bij numerieke velden en datum en tijd-velden kun je kiezen tussen onderstaande ongedefinieerde notaties.
VVKSO
Informaticabeheer
Databases - pagina 57
VVKSO
Informaticabeheer
Databases - pagina 58
De belangrijkste codes voor een numerieke veld
Code
Invoermaskers
Beschrijving
Met een invoermasker kun je de invoer van gegevens vereenvoudigen en bepaal je
welke waarden de gebruikers kunnen invoeren.
,
Decimale scheidingsteken
Spatie
Scheidingsteken voor duizendtallen
0
Tijdelijke aanduiding voor een cijfer. Als op deze positie een cijfer staat, wordt het
weergeven. Als er geen cijfer staat, wordt er een 0 weergegeven.
#
Tijdelijke aanduiding voor een cijfer. Als op deze positie een cijfer staat, wordt het
weergegeven. Staat er geen cijfer, dan wordt er niets weergegeven.
EUR
Valutateken
%
Percentage. De waarde wordt vermenigvuldigd met 100 en er wordt een procentteken toegevoegd.
De definitie van het invoermasker kan een tot drie secties bevatten, gescheiden door
puntkomma's.
Sectie
Beschrijving
1
Het eigenlijke invoermasker
2
Hiermee bepaal je of de letterlijke weergaventekens worden opgeslagen.
0 = de letterlijke tekens worden samen met de ingevoerde waarde opgeslagen
1 of leeg = alleen de ingevoerde tekens in de invulruimten worden opgeslagen
3
Het teken dat wordt weergegeven om de invulruimten aan te duiden. Als deze sectie leeg is, wordt het onderstrepingsteken ( _ ) gebruikt.
Aangepaste notaties voor numerieke velden kunnen maximaal vier secties bevatten:
Sectie
Beschrijving
1
Notatie voor positieve getallen
2
Notatie voor negatieve getallen
Code
Beschrijving
3
Notatie voor nulwaarden
0
Cijfer (0-9), plus- en minteken niet toegestaan, invoer vereist
4
Notatie voor Null-waarden
9
Cijfer (0-9) of spatie, plus- en minteken niet toegestaan, optioneel
#
Cijfer (0-9) of spatie, plus- en minteken toegestaan, optioneel
In de onderstaande tabel vind je de codes terug voor invoermaskers.
De belangrijkste codes voor datum- en tijdveld
L
Letter (A-Z), vereist
Code
Beschrijving
?
Letter (A-Z), optioneel
:
Tijdscheidingsteken
A
Letter (A-Z) of cijfer (0-9) , vereist
/
Datumscheidingsteken.
A
Letter (A-Z) of cijfer (0-9) optioneel
D
Dag van de maand in één of twee cijfers, afhankelijk van wat nodig is (van 1 tot en
met 31).
&
Willekeurig teken of spatie, vereist
C
Willekeurig teken of spatie, optioneel
dd
Dag van de maand in twee cijfers (van 01 tot en met 31).
.,:;-/
Scheidingstekens voor decimalen, duizendtallen, datum, tijd en speciale tekens
ddd
Eerste twee letters van de dag (ma, di, wo, do, vr, za, zo)
>
Alle tekens rechts van > worden in hoofdletters weergegeven
dddd
Volledige naam van de dag (van “maandag” tot en met “zondag”)
<
Alle tekens rechts van < worden in kleine letters weergeven
M
Maand van het jaar in één of twee cijfers, afhankelijk van wat nodig is (van 1 tot en
met 12)
!
Masker van rechts naar links opvullen
\
Het teken dat hierop volgt, wordt letterlijk weergegeven - meer dan 1 teken: “ “
wachtwoord
Er wordt een tekstvak gemaakt voor het invoeren van een wachtwoord. Elk teken
dat wordt getypt wordt bewaard maar wordt als een sterretje (*) weergegeven;-
mm
Maand van het jaar in twee cijfers (van 01 tot en met 12)
mmm
Eerste drie letters van de maand (van “jan” tot en met “dec”)
mmmm
Volledige naam van de maand (van “januari” tot en met “december”)
W
Dag van de week (van 1 tot en met 7).
ww
Week van het jaar (van 1 tot en met 53).
K
Datum weergegeven als kwartaal van het jaar (van 1 tot en met 4).
J
Dag van het jaar (van 1 tot en met 366).
Jj
Laatste twee cijfers van het jaar (van 01 tot en met 99).
jjjj
Volledig jaartal (van 0100 tot en met 9999).
Validatieregel en validatietekst
In de validatieregel kun je de volgende operatoren gebruiken:
U
Uren in één of twee cijfers, afhankelijk van wat nodig is (van 0 tot en met 23).
uu
Uren in twee cijfers (van 00 tot en met 23).
N
Minuten in één of twee cijfers, afhankelijk van wat nodig is (van 0 tot en met 59).
nn
Minuten in twee cijfers (van 00 tot en met 59).
S
Seconden in één of twee cijfers, afhankelijk van wat nodig is (van 0 tot en met 59).
ss
Seconden in twee cijfers (van 00 tot en met 59).
VVKSO
Informaticabeheer
Met een validatieregel kun je bepaalde vereisten opgeven waaraan de ingevoerde
waarde van een veld moeten voldoen. Is er niet voldaan aan de voorwaarde, verschijnt
de ingevoerde validatietekst.
Databases - pagina 59
=
>
<
>=
<=
<>
VVKSO
Informaticabeheer
gelijk aan
groter dan
kleiner dan
groter dan of gelijk aan
kleiner dan of gelijk aan
Verschillend van
Databases - pagina 60
5.5.2
Opzoeken
Als je de Wizard Opzoeken gebruikt voor het maken van een lijst met vaste waarden,
worden bepaalde veldeigenschappen ingesteld op basis van de keuzen die je in de wizard hebt gemaakt.
Tabelstructuur aanpassen
Velden of rijen verwijderen
Selecteer de rij en
Type rijbron
Hier geef je op of de gegevens uit een tabel/query komen of uit een lijst met waarden
die wordt aangegeven door de eigenschap Rijbron.
-
druk op de Delete-toets
menuoptie Bewerken, Verwijderen
snelmenu
-
werkbalkknop
Velden of rijen verplaatsen
Rijbron
Als de eigenschap Type Rijbron ingesteld werd op Tabel/query, zal hier de naam van de
tabel of query vermeld worden.
Selecteer de rij met de rijknop. Sleep dan de geselecteerde rij naar de gewenste positie.
Velden of rijen invoegen
Afhankelijke kolom
In geval van een afhankelijke keuzelijst of een keuzelijst met invoervak met meerdere
kolommen geef je hier aan welke kolom afhankelijk is van het onderliggende veld dat is
opgegeven bij de eigenschap Rijbron. De gegevens in een afhankelijke kolom worden in
het veld opgeslagen.
Selecteer de rij waarvoor je een veld wenst in te voegen en
-
werkbalkknop
menuoptie Invoegen, Rijen
snelmenu
Aantal Kolommen
Het ingegeven getal bepaalt het aantal kolommen dat in de keuzelijst staat. Met behulp
van de eigenschap Kolombreedte kun je een kolom opnemen zonder dat deze in de lijst
wordt weergegeven.
5.5.3
Open het dialoogvenster Tabeleigenschappen met:
-
Kolomkoppen
Als je de veldnamen van de onderliggende rijbron als kolomkoppen wilt gebruiken vul
je hier Ja in.
Kolombreedte
Je moet de waarde die je opgeeft als breedte van elke kolom scheiden door puntkomma. Typ 0 als je een kolom wilt verbergen. Typ een puntkomma zonder getal als je de
standaardinstelling wilt gebruiken (ongeveer 2,5 cm).
Aantal rijen
Hier geef je het maximale aantal rijen op dat in het keuzelijstgedeelte van de keuzelijst
met invoervak wordt weergegeven.
Lijstbreedte
Tabeleigenschappen
de knop Eigenschappen
menuoptie Beeld, Eigenschappen...,
optie Tabeleigenschappen... van het snelmenu van de titelbalk van het ontwerpvenster.
Je kunt een beschrijving geven van de tabel en een validatieregel met behorende validatietekst. Gebruik de validatieregel om (een) voorwaarde(n) op te leggen waarbij meerdere velden betrokken zijn.
5.5.4
Primaire sleutel
Een primaire sleutel is een veld (of een combinatie van velden) dat kan dienen als
unieke identificatie van een record uit de tabel. Het is daarom heel belangrijk dat het
sleutelveld wordt ingevuld (null-waarden niet toegelaten) en dat het een unieke waarde
bevat.
Eén veld of meerdere velden als primaire sleutel instellen:
Hier geef je de breedte op van het keuzelijstgedeelte van een keuzelijst met invoervak.
-
selecteer het veld of de meerdere velden
Alleen in lijst
-
klik op de knop
in de werkbalk
Hier bepaal je of een keuzelijst met invoervak elke ingevoerde waarde accepteert of
alleen tekst die overeenkomt met de waarden in de lijst.
VVKSO
Informaticabeheer
Databases - pagina 61
VVKSO
Informaticabeheer
Databases - pagina 62
Download