theorie normaliseren

advertisement
Gegevensbeheer 3
p. 1
1 INLEIDING
Meestal speelt het voor langere tijd bewaren van gegevens, een belangrijke rol in
informatiesystemen.
1.1 Databases
Een database of gegevensbank is een gestructureerde, digitaal bewaarde
verzameling gegevens, opgezet om in een bepaalde informatiebehoefte te voorzien.
Een database is een hulpmiddel voor de informatievoorziening, aan een individuele
gebruiker of aan een organisatie. Niet alle gegevens die in een organisatie nodig zijn
hoeven te worden gestructureerd in een database. De technische of economische
noodzaak voor een database is aanwezig wanneer de informatievoorziening als volgt
gekarakteriseerd kan worden:
 De gegevens worden frequent opgevraagd.
 De zoekinspanning van de gebruiker moet minimaal zijn. 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.
1.2 Analyse van de informatiebehoefte
Als besloten is om een database te gaan opzetten dan zal de eerstvolgende stap zijn
het in kaart brengen van de gewenste functie van die database voor de organisatie.
Dit komt neer op een analyse van de informatiebehoefte. Daarbij komen de volgende
aspecten aan bod:
 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 bij een personeelsadministratie zijn de volgende entiteiten
belangrijk: personeelslid, afdeling, functiebeschrijvingen…
 Er moet ingeschat worden welke (soorten) vragen in welke frequentie gesteld
zullen worden. Als die frequentie hoog is, dan zal dat extra eisen stellen aan de
computerimplementatie van de database. Er moet ingeschat worden of bepaalde
combinaties van gegevens opgevraagd zullen worden, of dat er bepaalde
zoekfilters gebruikt gaan worden.
Ann De Ridder
Gegevensbeheer 3
p. 2
 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 database systeem?
 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 database systeem daardoor belast worden,
mogelijk met nadelige gevolgen voor de ‘gewone’ gebruikers.
 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 of beschermd kunnen
worden.
 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.
 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).
 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) 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 herzien
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.
1.3 Datamodel
1.3.1 Betekenis
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 statische
informatiestructuren, hun beperkingen en hun onderlinge verbanden van belang zijn.
Ann De Ridder
Gegevensbeheer 3
p. 3
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.
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 gegenereerd en verwerkt worden en
waarheen ze getransporteerd worden.
Een gegevensmodel wordt gebruikt voor het structureren van een database terwijl
een gegevensstroomschema eerder gebruikt wordt voor het programmeren.
1.3.2 Waarom modelleren?
Het doel van het gegevensmodel is een éénduidige voorstelling te krijgen van de
structuren en verbanden die ten grondslag liggen aan de verschillende
informatiestromen en –archieven in een informatiesysteem. Als dusdanig vormt het
gegevensmodel een communicatiemiddel tussen verschillende belanghebbenden
van het informatiesysteem:
 programmeurs (ontwikkeling en onderhoud)
 analisten
 gebruikers
 beheerders
 …
1.3.3 Verschillende modellen
Er worden heel wat verschillende datamodellen gebruikt. Het Entiteit Relatie (EntityRelationship) Diagram is één van de bekendste traditionele modellen. Zie
hoofdstuk 3.
Ann De Ridder
Gegevensbeheer 3
p. 4
1.4 Databasesystemen
De software die het werken met een database mogelijk maakt, is het database
managementsysteem (DBMS). Het geheel van database en DBMS is dan het
database-systeem (DBS).
Als je een datamodel hebt gemaakt, moet je dit omzetten naar een dataschema voor
een bepaald type database-systeem. Er bestaan verschillende types. Het DBS dat in
deze nota’s besproken wordt is MS Access. De structuur waarin de gegevens
worden opgeslagen, wordt bepaald door de databaseontwerper. Het DBMS waarmee
gewerkt wordt, bepaalt het structuurtype. MS Access is een RDBMS. De R staat voor
Relationeel.
Ann De Ridder
Gegevensbeheer 3
p. 5
2 NORMALISEREN, INLEIDING
Voor het bepalen van de indeling van de database bestaan verschillende technieken.
Wij zullen gebruikmaken van de techniek van het normaliseren, zoals die door de
Amerikaan Edgar Codd in de jaren zeventig is opgesteld.
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 hetzelfde 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.
Normaliseren houdt in dat we in een viertal stappen de gegevens uiteenrafelen en
indelen in een beperkt aantal, overzichtelijke tabellen.
2.1 Stap 1, de nulde normaalvorm
Uitgangspunt van het normaliseren is steeds de informatiebehoefte van de
toekomstige gebruiker van de database. De indeling en inhoud van de tabellen wordt
bepaald door de informatie die de gebruiker wenst te zien.
Stel dat een gebruiker een database wil met daarin de gegevens van zijn
muziekcollectie. Als hij aangeeft geïnteresseerd te zijn in het jaar van uitbrengen van
de cd, dan zullen we dit jaartal uiteraard moeten opnemen in de database. Als hij
aangeeft absoluut niet te willen weten door welke muziekmaatschappij een cd is
uitgegeven, heeft het geen zin om dit gegeven wel in de database op te nemen. Voor
een andere opdrachtgever zou het precies andersom kunnen zijn. Het is dus
noodzakelijk om tijdens het ontwerpen van een database vaak contact te hebben met
de toekomstige gebruiker.
Praktijkvoorbeeld
Paul, DJ bij de lokale radio, verzorgt driemaal per week een twee uur durend
programma waarin hij zijn favoriete muziek laat horen en nieuwe cd’s onder de
aandacht wil brengen. Hij krijgt hiervoor een kleine onkostenvergoeding die hij
gebruikt om zijn cd-collectie langzaam uit te breiden. Aan het einde van iedere
maand moet Paul een overzicht inleveren van alle nummers die hij die maand heeft
Ann De Ridder
Gegevensbeheer 3
p. 6
laten horen. Aan de hand van deze overzichten zorgt de stichting BUMA/STEMRA
ervoor dat de betreffende artiesten een kleine vergoeding krijgen.
Paul weet meestal aan het einde van de maand niet meer precies wat hij aan het
begin van de maand allemaal heeft gedraaid. Daarom maakt hij het betreffende
overzicht (zie figuur 1) direct na afloop van het programma. Daarop staat vermeld
welke nummers hij heeft gedraaid. Ieder nummer heeft een eigen code. Deze code is
bepaald door één van de medewerkers van het lokale radiostation. Natuurlijk is van
ieder nummer ook bekend wat de titel is en wie de uitvoerende artiest(en) is/zijn. Ten
slotte noteert men ook of het nummer van een gewone cd afkomstig is of dat het op
een single cd staat. Aan het einde van de maand levert hij dan de stapel met deze
‘dagelijkse’ overzichten in. Hij is echter al een paar keer zo’n dagoverzicht
kwijtgeraakt, met alle gevolgen van dien. Hij vraagt ons daarom om voor hem een
database te ontwerpen waarmee hij aan het einde van de maand het gewenste
overzicht kan maken.
We nemen aan de hand van figuur 1 de eerste stap om de gegevens uiteen te
rafelen. We krijgen dan de zogenaamde nulde normaalvorm. We bepalen de nulde
normaalvorm door alle elementaire, relevante gegevens te bepalen en op te
schrijven.
Figuur 1
Allereerst zien we een koptekst boven het overzicht. Deze koptekst is op ieder
overzicht van Paul hetzelfde (constant), ongeacht de datum en ongeacht de
gedraaide nummers. Omdat de koptekst onveranderlijk is, nemen we deze niet op in
de database. Constante gegevens nemen we nooit op in de database.
Vervolgens zien we een aantal gegevens die iedere keer zullen verschillen: de datum
en de gegevens van de gedraaide muziek. Deze gegevens moeten we natuurlijk wel
opnemen in de database omdat we ze anders kwijt zijn.
Ann De Ridder
Gegevensbeheer 3
p. 7
Ten slotte zien we onder in het overzicht nog een totaal aantal getoond. Dit totaal is
af te leiden uit het overzicht door simpelweg het aantal afgedrukte en dus gedraaide
nummers te tellen. We noemen het totaal aantal een procesgegeven omdat we het
gegeven zelf kunnen bepalen door een rekenproces te laten uitvoeren.
Procesgegevens nemen we nooit op in de database.
Wat we overhouden aan relevante gegevens bestaat uit: datum, code, titel, artiest en
soort. De aanduiding soort is echter niet elementair. Met de aanduiding soort
bedoelen we twee gegevens, te weten een soortcode (bijvoorbeeld S) en een
soortomschrijving (bijvoorbeeld Single). We moeten de aanduiding soort daarom
splitsen in twee elementaire gegevens, te weten soortcode en soortomschrijving. Dit
splitsen moeten we altijd doen in het geval dat we te maken hebben met
samengestelde gegevens.
We houden nu dus over de elementaire gegevens: datum, code, titel, artiest,
soortcode en soortomschrijving. In plaats van gegevens zullen we meestal de term
attributen gebruiken.
Met de door ons gevonden attributen is iets speciaals aan de hand. Het eerste
gegeven, de datum, komen we maar één keer tegen. De andere gegevens komen
we meerdere keren tegen. Om dit verschil duidelijk te maken, noteren we onze
gegevens daarom op de volgende manier:
datum, RG(code, titel, artiest, soortcode, soortomschrijving)
Daarbij staat RG voor repeterende groep (repeating group). Alle gegevens die
meerdere keren, repeterend, voorkomen, staan vervolgens tussen ronde haken
vermeld.
Het overzicht uit figuur 1 is het overzicht van 17 februari 2001. Paul beschikt echter
voor iedere dag, dat hij een programma heeft gepresenteerd, over een dergelijk
overzicht. Om uit de hele stapel met alle overzichten precies het door ons getoonde
overzicht te pakken, moeten we weten van welke datum we iets willen weten. De
datum wijst in ons geval precies één overzicht aan. De datum geeft ons toegang tot
precies één overzicht. We noemen daarom de datum ook wel het sleutelgegeven
ofwel sleutelattribuut. We geven het sleutelattribuut aan door dit te onderstrepen. We
hebben nu uiteindelijk de nulde normaalvorm gevonden. We noteren dit op de
volgende manier:
0 NV (datum, RG(code, titel, artiest, soortcode, soortomschrijving))
Ann De Ridder
Gegevensbeheer 3
p. 8
OPMERKING
 Een sleutelattribuut moet altijd een waarde hebben.
 Een sleutelattribuut moet altijd uniek zijn.
 Een sleutelattribuut moet altijd zo minimaal mogelijk zijn. Als de datum volstaat als
sleutel, dan zal ook de combinatie dagaanduiding met datum volstaan. We zouden
dan de sleutel datum + dag krijgen (bijvoorbeeld: 23-1-2001 + zaterdag). Omdat
we echter ook met een deel hiervan (datum) als sleutel kunnen werken, zijn we
verplicht het overtollige deel, de dagaanduiding, weg te laten.
 Soms kunnen meerdere attributen als sleutelattribuut fungeren. Dit noemen we
kandidaat-sleutels. In het algemeen kiest men uit de kandidaat-sleutels er één die
als sleutelattribuut zal gaan fungeren.
OEFENING 1
a. In een bibliotheek zal men de afzonderlijke boeken moeten kunnen aanduiden.
Hiertoe zullen zij een sleutelattribuut hebben gedefinieerd. Zou men hiervoor het
ISBN gebruiken? Verklaar het antwoord.
b. Gegeven het overzicht uit figuur 2. Stel hiervan de nulde normaalvorm op.
Figuur 2
Ann De Ridder
Gegevensbeheer 3
p. 9
2.2 Stap 2, de eerste normaalvorm
In de nulde normaalvorm zitten een aantal problemen verborgen o.a. wat als een
nummer meerdere keren door Paul is gedraaid? Iedere keer zal hij steeds alle
gegevens van dat nummer noteren, dus code, titel, artiest, soortcode en
soortomschrijving. Dat betekent dat als Paul het nummer Coming Home van Romeo
in een jaar zestig keer heeft gedraaid, hij ook zestig keer alle gegevens heeft
genoteerd. Waarom kunnen we niet volstaan met het één keer noteren van alle
gegevens? Natuurlijk moeten we dan wel iedere keer even noteren dat we dat
nummer hebben gedraaid, maar dat doen we dan kortweg via het noteren van alleen
maar de code. In de eerste normaalvorm wordt dit probleem gedeeltelijk opgelost.
We bepalen de eerste normaalvorm door de repeterende groep apart te nemen en
uit te breiden met de sleutel van de originele nulde normaalvorm. Hierna bepalen we
in de nu nieuw gevonden reeks weer een sleutel.
De repeterende groep bestaat uit (code, titel, artiest, soortcode, soortomschrijving).
Deze nemen we apart en we voegen de sleutel (datum) eraan toe. We krijgen dan:
(datum, code, titel, artiest, soortcode, soortomschrijving)
Let erop dat we de datum, hoewel die in de eerste normaalvorm sleutel was en dus
onderstreept, nu niet zonder meer opnieuw onderstrepen. We gaan nu een nieuwe
sleutel aanwijzen. Daartoe moeten we ons eerst afvragen hoe we de nu ontstane
groep terugzien op het originele overzicht (zie figuur 1). Dan weten we wat we
proberen en kunnen we bepalen wat een goede sleutelkeuze is.
Onze groep gegevens, met eenmaal een datum, eenmaal een code, eenmaal een
titel, enzovoort vinden we terug als een enkele regel van het overzicht. Om precies
één regel op een bepaald formulier aan te duiden, moeten we eerst aangeven naar
welk formulier, van welke datum, we willen kijken. Daartoe dienen we dus de datum
op te geven. Vervolgens selecteren we één enkele regel van het betreffende
overzicht door de code van het betreffende nummer op te geven. Iedere code komt
hooguit één keer op een overzicht voor omdat Paul nooit twee maal hetzelfde
nummer in dezelfde uitzending draait. De combinatie van datum en code kan dus
fungeren als sleutel. We krijgen dan:
(datum, code, titel, artiest, soortcode, soortomschrijving)
Ann De Ridder
Gegevensbeheer 3
p. 10
Omdat de sleutel nu bestaat uit twee delen en omdat een sleutel altijd minimaal moet
zijn, moeten we wel even controleren of een kleinere sleutel ook voldoet. Dus we
gaan na of alleen de datum als sleutel ook voldoet. Dat is natuurlijk niet zo, want bij
één datum vinden we meerdere nummers die Paul heeft gedraaid, dus meerdere
regels, en we zoeken precies één regel.
Kunnen we misschien volstaan met alleen de code van het nummer als sleutel? Dat
zou kunnen als Paul een nummer nooit meer dan één keer draait, ook niet op
verschillende dagen. Omdat wij weten dat Paul wel degelijk nummers vaker draait,
ontstaat het probleem dat we een bepaalde code op meerdere overzichten, van
verschillende data, kunnen terugvinden. Daardoor wijzen we dus niet slechts één,
maar meerdere regels aan, hoewel die op verschillende overzichten liggen. Dus
alleen de code voldoet ook niet als sleutel. De door ons eerder gekozen,
gecombineerde, sleutel is dus de juiste.
We moeten ons werk nog afmaken. Dat doen we door in de originele nulde
normaalvorm de door ons apart genomen repeterende groep te verwijderen en te
kijken wat er overblijft. Wat er overblijft, voegen we als aparte groep toe aan de
eerste normaalvorm.
We hadden als nulde normaalvorm gevonden:
(datum, RG(code, titel, artiest, soortcode, soortomschrijving))
Door de repeterende groep te verwijderen, houden we alleen over:
(datum)
Deze groep voegen we toe. We krijgen dan uiteindelijk de eerste normaalvorm:
1 NV (datum)
(datum, code, titel, artiest, soortcode, soortomschrijving)
We zien dat we nu geen repeterende groep meer over hebben. We zijn dus
gedeeltelijk geslaagd in onze opzet. Nog steeds zitten we met het probleem dat als
Paul een nummer vaker draait, we steeds opnieuw alle gegevens zitten te noteren.
We zijn dus nog steeds niet klaar.
OPMERKING
In het toegelichte voorbeeld zien we dat de sleutel uit de nulde normaalvorm (datum)
ook in de eerste normaalvorm weer onderdeel van de sleutel is. Vaak is dat zo, maar
lang niet altijd. Let dus goed op bij het kiezen van een nieuwe sleutel!
Ann De Ridder
Gegevensbeheer 3
p. 11
OEFENING 2
a. Gegeven is het overzicht uit figuur 3. Iemand heeft daarbij de volgende nulde
normaalvorm gevonden.
0 NV
(Bestelnummer, naam klant, RG(artikelnr, omschrijving, prijs p/s,
aantal), korting%)
Waarom zijn het bedrag per regel, het subtotaal, het kortingsbedrag en het
eindtotaal niet opengenomen in de nulde normaalvorm?
Bepaal uitgaande van de genoemde nulde normaalvorm de eerste normaalvorm.
Figuur 3
b. Ga uit van de nulde normaalvorm die je eerder bij opdracht 1.b gevonden hebt en
bepaal de daarbij behorende eerste normaalvorm. Controleer goed of de gekozen
sleutel niet korter kan.
Ann De Ridder
Gegevensbeheer 3
p. 12
2.3 Stap 3, de tweede normaalvorm
Om te komen tot de tweede normaalvorm onderzoeken we in de eerste normaalvorm
of er attributen (gegevens) zijn die niet tot de sleutel behoren (niet onderstreept) en
die niet van de gehele sleutel afhangen, maar slechts van een gedeelte van de
sleutel. We zullen deze moeilijk lijkende regel aan de hand van ons voorbeeld
toelichten. We kijken alleen maar naar groepen in de eerste normaalvorm waarbij de
sleutel samengesteld is, dus uit meerdere attributen bestaat. In ons geval de groep:
(datum, code, titel, artiest, soortcode, soortomschrijving)
We moeten nu zoeken naar niet-sleutelattributen die slechts afhankelijk zijn van een
deel van de sleutel, dus in ons voorbeeld van alleen de datum of alleen de code. De
gegevens titel, artiest, soortcode en soortomschrijving hebben niets te maken met de
datum, maar zijn alleen maar afhankelijk van de code van het gedraaide nummer
(‘vertel ons de code en wij vertellen u de artiest, de titel, enzovoort’). Die hebben dus
niets te maken met de datum.
Kortom, de gegevens titel, artiest, soortcode en soortomschrijving zijn niet afhankelijk
van de gehele sleutel maar slechts van een deel van de sleutel. Deze gegevens
nemen we apart, tezamen met het deel van de sleutel waarvan ze afhankelijk blijken
te zijn. We krijgen dan:
(code, titel, artiest, soortcode, soortomschrijving)
In de originele groep laten we de betreffende niet-sleutelvelden achterwege. We
krijgen dus:
(datum, code)
Let erop dat het sleuteldeel waarvan de niet-sleutelvelden afhankelijk waren (code) in
deze groep gewoon blijft bestaan.
De nu gevonden groepen:
(code, titel, artiest, soortcode, soortomschrijving)
(datum, code)
vullen we ten slotte aan met de groepen die we in de eerste normaalvorm al hadden
gevonden maar waar geen samengestelde sleutel in aanwezig was.
Ann De Ridder
Gegevensbeheer 3
p. 13
We krijgen dan uiteindelijk de tweede normaalvorm:
2 NV (code, titel, artiest, soortcode, soortomschrijving)
(datum, code)
(datum)
We hebben nu veel overtolligheid (redundantie) opgeheven. Dat komt doordat in de
eerste groep de code de sleutel is. Ieder nummer wordt hierin hooguit één keer
opgenomen. Wordt een nummer nu vaker gedraaid, dan wordt het zo vaak als nodig
opgenomen in de tweede groep (datum, code). De gegevens van het nummer zelf,
zoals de titel, zijn echter al bekend in de eerste groep en worden daar dus niet nog
eens opgenomen. Het achteraf corrigeren van een typefout in de naam van de artiest
is nu dus eenvoudig want het hoeft slechts één maal te worden uitgevoerd.
OEFENING 3
a. Gegeven is het overzicht uit figuur 3. Iemand heeft daarbij de volgende eerste
normaalvorm gevonden.
1 NV
(Bestelnummer, naam klant, kortings%)
(Bestelnummer, artikelnr, omschrijving, prijs p/s, aantal)
Bepaal uitgaande van de bovenstaande eerste normaalvorm de tweede
normaalvorm.
b. Wat is het wezenlijke verschil tussen de 1 NV zoals die bij opdracht 3.a is gegeven
en zoals die hieronder staat afgedrukt?
1 NV
(Bestelnummer, naam klant)
(Bestelnummer, artikelnr, omschrijving, prijs p/s, aantal, kortings%)
Ann De Ridder
Gegevensbeheer 3
p. 14
2.4 Stap 4, de derde normaalvorm
Er zit in de tweede normaalvorm nog een vorm van overtolligheid (redundantie). Die
heeft te maken met de attributen soortcode en soortomschrijving. Bij ieder nummer
staan beide gegevens opgenomen. Als we de gegevens van 1000 nummers op
single hebben, zal de combinatie S, Single dus 1000 keer zijn opgenomen. Ook hier
zouden we met één keer klaar moeten zijn. Wel bij iedere single noteren dat het een
single is (soortcode = S) maar slechts één maal noteren dat de code S staat voor de
omschrijving Single. Door deze overtolligheid eruit te halen, ontstaat de derde
normaalvorm.
Om de derde normaalvorm te bepalen, vragen we ons af of er niet-sleutelattributen
(niet-onderstreepte gegevens) zijn die niet afhangen van de sleutel maar die eigenlijk
afhangen van andere niet-sleutelattributen. Als dat zo is, nemen we deze gegevens
op in een nieuwe groep, geven daar de sleutel aan en verwijderen uit de originele
groep het afhankelijke attribuut.
Om de titel van een nummer te weten te komen, hebben we niets aan de artiest, die
kan immers meerdere nummers op zijn repertoire hebben staan. Het heeft ook niets
te maken met de soort muziekdrager, single of cd. Nee, de titel is geheel afhankelijk
van de code van het nummer: ‘vertel ons de code en wij vertellen u welke titel daarbij
hoort’. De titel is dus geheel afhankelijk van de sleutel. We laten de titel met rust. Om
dezelfde reden doen we niets met artiest en soortcode.
Met de soortomschrijving is wel iets speciaals aan de hand. Om deze te weten te
komen, hoeven we niet te weten over welk nummer we precies praten (de code)
maar moeten we weten welke soortcode van toepassing is: ‘vertel ons de soortcode
en wij vertellen u de soortomschrijving’. De soortcode heeft dus niets te maken met
de sleutel maar alles met een ander niet-sleutelattribuut. We nemen deze twee
attributen daarom apart op in een afzonderlijke groep:
(soortcode, soortomschrijving)
Daarbij geldt dat de soortcode het sleutelattribuut zal worden: ‘vertel ons de code en
wij vertellen u de omschrijving’. Dus:
(soortcode, soortomschrijving)
In de originele groep laten we het afhankelijke niet-sleutelattribuut (soortomschrijving)
achterwege. We houden dan over:
(code, titel, artiest, soortcode)
Ann De Ridder
Gegevensbeheer 3
p. 15
Let erop dat het attribuut dat sleutel is geworden in de nieuwe groep, in de
oorspronkelijke groep gewoon blijft bestaan!
Door de beide zojuist gevonden groepen aan te vullen met de andere, niet
veranderde groepen uit de tweede normaalvorm, ontstaat de volgende derde
normaalvorm:
3 NV (soortcode, soortomschrijving)
(code, titel, artiest, soortcode)
(datum, code)
(datum)
Deze derde normaalvorm is het uiteindelijke doel geweest van het
normalisatieproces. Deze nu gevonden groepen kunnen we later op eenvoudige
wijze opnemen in een database. Iedere gevonden groep zal daarbij worden vertaald
in een afzonderlijke tabel. Hierdoor kunnen we later op relatief eenvoudige wijze alle
gegevens invoeren en alle gewenste informatie opvragen.
De eerste tabel geven we de naam SOORT omdat daarin de soort muziekdrager
wordt bijgehouden, single of cd. De tweede tabel noemen we TRACK omdat daarin
de gegevens van de tracks worden bijgehouden. In de derde tabel worden de
gegevens bijgehouden van de nummers die gedraaid zijn, we kunnen dit zien als een
DRAAILIJST. Ten slotte hebben we nog de laatste tabel waarin de data liggen
opgeslagen van de dagen waarop Paul een programma heeft verzorgd. Deze tabel
noemen we DATUM.
3 NV SOORT
(soortcode, soortomschrijving)
TRACK
(code, titel, artiest, soortcode)
DRAAILIJST (datum, code)
DATUM
(datum)
OPMERKING
We kunnen ons afvragen of het zin heeft om de tabel DATUM bij te houden. Immers,
een overzicht van alle draaidata kunnen we ook afleiden uit de tabel DRAAILIJST.
Tenslotte komen alle data daar ook in voor. Omdat de tabel DATUM verder geen
speciale betekenis heeft, zullen we deze weglaten. Daardoor gaan er geen gegevens
verloren.
We houden dan over:
3 NV SOORT
(soortcode, soortomschrijving)
TRACK
(code, titel, artiest, soortcode)
DRAAILIJST (datum, code)
Ann De Ridder
Gegevensbeheer 3
p. 16
Het komt vaker voor dat één van de gevonden groepen in de derde normaalvorm
mag worden weggelaten. Dit zijn dan altijd tabellen waarin alleen maar
sleutelattributen voorkomen. De tabellen mogen alleen maar worden weggelaten als
er daardoor verder geen informatie verloren gaat. Niet iedere tabel die bestaat uit
alleen maar sleutelattributen mag dus worden weggelaten! Controleer altijd terdege.
De groep DRAAILIJST mag in ons voorbeeld niet weggelaten worden omdat daar nu
precies in staat welke nummers op welke datum zijn gedraaid. Zonder deze groep
zouden we alleen maar de gegevens van de nummers hebben. En dan kunnen we
dus niet het door Paul gewenste overzicht maken.
Ten slotte nog even opmerken dat het niet altijd zo is dat er bij de stap van de ene
naar de andere normaalvorm altijd iets gedaan kan worden. Regelmatig blijken twee
normaalvormen gelijk aan elkaar te zijn. In dat geval zullen we gebruikmaken van
een verkorte notatiewijze. Als de tweede normaalvorm gelijk blijkt te zijn aan de
eerste normaalvorm, noteren we bij de tweede normaalvorm: 2 NV = 1 NV.
OEFENING 4
a. Iemand heeft de volgende tweede normaalvorm gevonden. Deze hoort bij een
order die door een klant is geplaatst. Daarbij geldt dat de korting, het percentage,
alleen maar afhankelijk is van het aantal dat men van één artikel koopt. Bij één
stuk ontvangt men 2 % korting, bij twee stuks 3 %, bij drie stuks 5 %, enzovoort.
Ten slotte geldt dat iedere klant een eigen uniek klantnummer heeft dat altijd voor
hem gebruikt wordt.
2 NV
(ordernummer, klantnummer, klantnaam)
(ordernummer, artikelnr, aantal, korting%)
(artikelnr, omschrijving, prijs p/s)
Bepaal uitgaande van deze tweede normaalvorm de derde normaalvorm.
b. Een voetbalvereniging maakt gebruik van (onder andere) het overzicht van
figuur 4. Een lid van de vereniging hoeft geen commissiewerk te doen maar mag
het wel. Indien gewenst kan hij (of zij) zelfs deel uitmaken van meerdere
commissies.
Ann De Ridder
Gegevensbeheer 3
p. 17
Normaliseer het overzicht tot en met de derde normaalvorm.
Commisie: BC, Barcommissie
Lidnummer
Naam
Telefoon
34
L. Ketelaar
053 12 34 56
122
V. Borrelaar
02 569 78 32
307
M. Vervat
052 69 75 35
Figuur 4
c. Het overzicht van figuur 5 wordt bij een camping gebruikt om de reserveringen bij
te houden. Op die manier probeert men te voorkomen dat een plaats aan meer
dan één klant tegelijkertijd wordt toegekend. Normaliseer dit overzicht tot en met
de derde normaalvorm.
Camping Zee en Strand, Nieuwpoort
Plaatsnummer
Klant
23
Aankomstdat
Vertrekdatum
um
8448
J. Janssens
Kerkweg 23
BE 9300 Aalst
6 augustus
2003
20 augustus 2003
3662
K. De Smet
Korenstraat 5
NL 2870 AB Schoonhoven
23 juli 2003
30 juli 2003
Figuur 5
Ann De Ridder
Gegevensbeheer 3
p. 18
2.5 Vreemde sleutels
Met een vreemde sleutel (foreign key) bedoelen we een gegeven dat verwijst naar de
sleutel van een tabel. In ons voorbeeld is er sprake van een tweetal vreemde
sleutels. Als eerste het gegeven code in DRAAILIJST. Dit is een vreemde sleutel
omdat het verwijst naar het gegeven code in de tabel TRACK, dus naar een sleutel.
Ook het gegeven soortcode in TRACK is een vreemde sleutel want het verwijst naar
de sleutel van de tabel SOORT (soortcode). We geven vreemde sleutels aan door ze
met een stippellijn te onderstrepen. Dus:
3 NV SOORT
TRACK
(soortcode, soortomschrijving)
(code, titel, artiest, soortcode)
-----------DRAAILIJST (datum, code)
------
Vreemde sleutels verwijzen in het algemeen naar andere tabellen. Dit lukt alleen
maar als iedere waarde die de vreemde sleutel aanneemt ook als sleutelwaarde
voorkomt in de tabel waarnaar verwezen wordt. Met andere woorden: als in
DRAAILIJST de code ‘R7734’ voorkomt, moet deze waarde ook voorkomen als code
in TRACK, met daarbij de naam van de artiest en de titel van het nummer. De eis dat
iedere waarde die een vreemde sleutel aanneemt ook als sleutelwaarde moet
voorkomen in de andere tabel, staat bekend onder de eis van referentiële integriteit
(referential integrity).
Andersom geldt deze eis niet. Er kan in TRACK best een waarde voor code
voorkomen die we nog niet tegenkomen in DRAAILIJST. De track is dan gewoon nog
nooit gedraaid in het programma! Zoals uit de derde normaalvorm blijkt, kan een
vreemde sleutel zelf deel van een sleutel zijn. Kijk naar het gegeven code in de tabel
DRAAILIJST. Een vreemde sleutel kan echter ook een niet-sleutelattribuut zijn. Kijk
maar naar het gegeven soortcode in de tabel TRACK.
Via de vreemde sleutels zijn de tabellen met elkaar verbonden. Deze verbondenheid
geven we weer door middel van een diagram, omdat dat over het algemeen veel
duidelijker is. Dit diagram noemen we Entiteit Relatie Diagram of Entity Relationship
Diagram, kortweg ERD.
Ann De Ridder
Gegevensbeheer 3
p. 19
3 HET ENTITEIT RELATIE DIAGRAM
In dit hoofdstuk maak je kennis met een datamodel dat zeer geschikt is bij het
ontwerpen van een database: het Entiteit Relatie Diagram (Entity Relationship
Diagram).
In het Entiteit Relatie Diagram wordt gebruik gemaakt van:
 entiteiten
 attributen
 relaties (relationships)
3.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
entiteiten worden gemodelleerd (en soms even belangrijk: welke niet)
 een lijst van attributen (zie verder)
Voorbeeld
Naam
Definitie
Attributen
werknemer
een natuurlijke persoon die in loondienst is van de firma; personen die
slechts occasioneel voor de firma werken en personen die via een
interim-kantoor tewerkgesteld zijn, worden niet als werknemer
beschouwd.
naam, adres, telefoonnummer, geboortedatum, datum in dienstname…
Voorstelling
Een entiteit wordt voorgesteld door een rechthoek.
Werknemer
Ann De Ridder
Gegevensbeheer 3
p. 20
3.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
 een definitie die objectief en ondubbelzinnig aangeeft in welke omstandigheden
precies het veronderstelde verband aan- of afwezig is tussen de gespecifieerde
entiteiten
 een lijst van attributen (zie verder)
Voorbeeld
Naam
werkt in
Deelnemende entiteiten
werknemer, afdeling
Definitie
een werknemer werkt in een afdeling als hij
verantwoording verschuldigd is aan het hoofd van die
afdeling
aantal werkuren
Attributen
Voorstelling
Een relatie wordt voorgesteld als een verbindingslijn tussen de betrokken entiteiten.
Werknemer
Afdeling
Werkt in 
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.
Ann De Ridder
Gegevensbeheer 3
p. 21
3.3 Attributen
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.
Samengestelde gegevens
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, postcode en gemeente apart nodig.
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.
Procesgegevens
Een procesgegeven of berekend gegeven is een gegeven waarvan de waarde
bepaald wordt door de waarde van één of meer andere gegevens.
In een groothandel worden bijvoorbeeld artikelgegevens bijgehouden, o.a. naam,
inkoopprijs en hoeveelheid in voorraad. Bij het inventariseren 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.
Ann De Ridder
Gegevensbeheer 3
p. 22
Een attribuut bestaat uit de volgende elementen:
 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 waarden 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
Naam
personen ten laste
Entiteit
werknemer
Domein
de natuurlijke getallen, inclusief 0
Definitie
het aantal personen die fiscaal ten laste van de medewerker zijn
Verplicht
ja
Voorstelling
De attributen worden bij in de rechthoek geschreven. In diagrammen worden ze
meestal weggelaten om de overzichtelijkheid niet te schaden.
Werknemer
naam
adres
telefoonnummer
datum in dienst
…
Ann De Ridder
Gegevensbeheer 3
p. 23
3.4 Cardinaliteit
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.
Voorbeeld
Als je de relatie ‘persoon is ondergeschikte van manager’ bekijkt, dan gelden
waarschijnlijk de volgende twee beschouwingen betreffende de cardinaliteit:
 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:
 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 kraaiepoot op de lijn tegen de entiteit.
Voor een relatie tussen twee entiteiten zijn er dus, wat de cardinaliteit betreft, vier
mogelijkheden: één-op-één, één-op-veel (twee verschillende mogelijkheden) en
veel-op-veel. Een één-op-één-relatie wordt ook 1:1 genoteerd, een één-op-veelrelatie 1:n (lees: één op n) en een veel-op-veel-relatie m:n (lees: m op n).
Ann De Ridder
Gegevensbeheer 3
p. 24
3.5 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 toegelaten waarden: nul of één.
Voorbeeld
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 beschouwingen 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 de cardinaliteit:
 als de instantie van de desbetreffende entiteit verplicht is (d.w.z. minstens één),
plaatsen we een dwarsstreepje op de lijn
 als de instantie van de desbetreffende entiteit optioneel is (d.w.z. minstens nul),
plaatsen we een cirkeltje op de lijn.
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.
Ann De Ridder
Gegevensbeheer 3
p. 25
OEFENING 5
a. Teken voor het praktijkvoorbeeld uit hoofdstuk 2 het bijbehorende ERD.
b. Gegeven is de onderstaande genormaliseerde gegevensstructuur. Geef hier de
vreemde sleutels aan door deze gestippeld te onderstrepen.
GAST (gastnummer, naam, adres, postcode, plaats, geboortedatum,
telefoonnummer)
BOEKING (boekingnummer, boekdatum, aankomstdatum, vertrekdatum,
plaatsnummer)
------------------PLAATS
(plaatsnummer, voorzieningen, bedrag per nacht)
REGISTER (gastnummer, boekingnummer)
----------------- --------------------BETALING (boekingnummer, betaaldatum, betaald bedrag)
---------------------Ter informatie: het gaat om een deel van de administratie van een camping. Van
een boeking worden de belangrijke gegevens bijgehouden. Bij iedere boeking
wordt bijgehouden welke personen er zullen verblijven in verband met het
nachtregister. Er kan in twee gedeelten betaald worden. Het eerste deel moet
worden betaald binnen vier weken na de boekdatum, het laatste deel moet betaald
worden uiterlijk zes weken voor de geplande aankomstdatum. Per boeking wordt
er steeds één campingplaats geboekt.
Teken ook het bijbehorende ERD.
c. Gegeven is de volgende genormaliseerde gegevensstructuur. Geef hier de
vreemde sleutels aan door deze gestippeld te onderstrepen. Ga er daarbij van uit
dat meerdere spelers deel uitmaken van een elftal, dat ieder elftal slechts één
leider heeft en dat er ereleden bestaan. Deze ereleden staan wel als speler
genoteerd maar er is geen elftalcode ingevuld.
ELFTAL
LEIDER
LID
(elftalcode, leidercode)
(leidercode, leidernaam, telefoonnummer)
(lidcode, lidnaam, lidadres, lidplaats, elftalcode)
Ann De Ridder
Gegevensbeheer 3
p. 26
Teken ook het bijbehorende ERD.
c. Gegeven is het volgende ERD. Beantwoord op basis van dit ERD de gestelde
vragen.







Kan een chef meerdere afdelingen onder zijn beheer hebben?
Kan een afdeling geleid worden door meerdere chefs?
Kan een werknemer bij meerdere afdelingen zijn ingedeeld?
Kan er een afdeling zijn zonder medewerkers?
Kan er een afdeling zijn zonder chef?
Kan er een werknemer zijn zonder afdeling?
Kan er een chef zijn zonder werknemers?
SAMENVATTING HOOFDSTUK 2 EN 3
We hebben de eerste beginselen van het normaliseren geleerd. Daarbij rafelen we
de ongestructureerde gegevens, zoals die op een overzicht worden getoond, in een
aantal stappen uiteen tot een gestructureerd geheel. Daarbij maken we gebruik van
de techniek van het normaliseren.
Eerst stellen we de nulde normaalvorm op door alle elementaire gegevens te
noteren. Daarbij laten we alle vaste teksten (constanten) en procesgegevens
achterwege. We bepalen de sleutel. Het bepalen van de sleutel doen we ook bij
iedere volgende stap.
Vervolgens bepalen we de eerste normaalvorm door de repeating group te
verwijderen.
Hierna bepalen we de tweede normaalvorm. Daarbij nemen we alle gegevens apart
die slechts van een deel van de sleutel afhangen en niet van de gehele sleutel.
Ten slotte bepalen we de derde normaalvorm. Daarbij nemen we alle gegevens apart
die helemaal niet van de sleutel afhangen maar die van een ander nietsleutelattribuut afhangen.
Nadat we de derde normaalvorm hebben gevonden, gaan we na of er misschien
groepen zijn die weggelaten mogen worden zonder dat we informatie verliezen. We
hoeven hierbij alleen maar de groepen te onderzoeken die uit alleen maar
sleutelattributen bestaan.
De gegevensstructuur die we hebben gevonden, geven we vervolgens grafisch weer
door middel van een Entiteit Relatie Diagram (ERD). We laten daarbij het verband
tussen de diverse tabellen zien. Deze verbanden zijn gebaseerd op vreemde
sleutels. Een vreemde sleutel mag alleen maar waarden aannemen die ook in de
overeenkomstige andere tabel voorkomen (referentiële integriteit).
Ann De Ridder
Download