Hoofdstuk 11. Informatiemodellering
11.8 Groeperen: het
ontwerp van de database
Als de beperkingsregels in het
IGD zijn aangebracht is het model van de informatie
klaar.
Dan kan bepaald worden welke tabellen er voor
de database nodig zijn, en welke kolommen er in de
tabellen voorkomen.
Dat kan je zelf doen.
Maar je kan ook de database door Infagon laten ontwerpen.
Als je klikt op het GLR-icoontje
(GLR=grouping, lexicalizing, reducing)
dan krijgt je het volgende
venster:

Als je dan op Run
klikt gaat het programma controleren of aan alle
voorwaarden voldaan is. En als dat het geval is dan worden de
tabellen gevormd.
Als je niet op alle feittypen en objecttypen een pijl hebt
geplaatst krijg je een foutmelding en dan moet je
dat eerst veranderen.
Soms krijg je ook nog
waarschuwingen, maar daar hoef je je niets van aan te
trekken.
De controle bestaat uit negen onderdelen (checks),
waarbij de checks 1 tot en met 3 van groot belang
zijn.
Check 7 geeft vaak een groot aantal
waarschuwingen waar we ons niets van aan hoeven te
trekken.
We bespreken daarom alleen 1, 2, 3 en
7.
- Check 1
Every fact type must have
an intra UC.
Dat betekent dat elk feittype een uniciteitsbeperking moet
hebben.
Als er dus geen uniciteitsbeperking gevonden
kan worden die één of enkele rollen bedekt, moet er
een uniciteitsbeperking over alle rollen liggen.
- Check 2
The N-rule must be valid
for every nominalized fact type.
Dat
betekent dat elk feittype, waar
een bol omheen staat, een uniciteitsbeperking moet
hebben die alle rollen bedekt. Dit heet de
N-regel.
- Check 3
The N-1-rule must be valid
for every fact type.
Dat betekent dat
elk feittype (waar geen bol
omheen staat) hooguit één mag rol hebben waar geen
uniciteitsbeperking overheen ligt. Dat heet de
N-1-regel.
Reden: als er twee rollen buiten de
uniciteitsbeperking vallen kun je het feittype splitsen.
- Check 7
Non-lexical object types
without totality constraints must have a fact type
expression.
Een voorbeeld: Als je een
model hebt waarin plaatsen voorkomen, omdat je van
personen de woonplaats wilt vastleggen, dan hoort
er bij de rol van (woon)plaats eigenlijk een
totaliteitsstip te staan. Je neemt immers
een plaats alleen op als het een woonplaats is. Die
stip wordt vaak vergeten en het programma geeft daarvoor een
waarschuwing. Als je je er niets van aantrekt heeft het
verder geen gevolgen.
Als je voor
verschillende objecten dezelfde labeltypen hebt
gebruikt dan krijg je dat in een venster te
zien, en dan moet je er alsnog verschillende namen voor
bedenken door er iets voor te zetten (prefix) of er
achter (suffix)
Als je de uniciteitsbeperkingen
hebt aangebracht zoals in de figuur vlak boven 11.8 dan
krijg je het volgende uitvoerrapport. Je ziet dat er wel
enkele waarschuwingen zijn, maar dat er 0 Errors zijn.

Klik dan op Run en
als alles goed gaat dan krijg je een nieuw IGD dat er
als volgt uitziet:

Je ziet dat er drie tabellen zijn, en je ziet ook uit
welke kolommen die tabellen bestaan.
En je ziet ook
wat de bijbehorende sleutelvelden zijn, dat zie je aan
de pijlen die er boven staan.
Je kunt de volgorde van de vakjes
eventueel nog veranderen.
Het is het meest logisch om
in alle tabellen de voornaam en de achternaam vooraan te
plaatsen.
Als dat niet zo is, en je wilt het vakje van de
voornaam verschuiven, dan selecteer je het vakje van
voornaam (klik op het vakje
terwijl je de Alt-toets ingedrukt houdt) en
je versleept het
naar voren.
Hoe bepaal je welke tabellen er zijn, en wat er in
die tabellen zit?
Je kunt volgen hoe het
programma Infagon het doet, maar je moet het ook zelf
kunnen!
Om het GLR-proces te starten kun je in
onderstaand venster het vinkje voor Step-by-Step
aanklikken.

Als je dan op Run
klikt gaat het programma bezig, en dan kun je
precies volgen wat er gebeurt.
Eerst verschijnt
het volgende venster:

Het programma ziet dat een persoon maar één geboortedatum
heeft (aan de pijl van de uniciteitsbeperking), en stelt
voor om de geboortedatum in de tabel van
de persoon (voornaam+achternaam) op te nemen.
Het feittype is_geboren_op en het objecttype
datum hebben dan hun dienst gedaan, en kunnen dan
wel gemist worden.
Als je op Yes hebt geklikt
verschijnt het volgende venster:

Het programma ziet dat een persoon maar één adres heeft (aan
de pijl van de uniciteitsbeperking), en stelt voor om
het adres in de tabel met
voornaam+achternaam+geboortedatum op te nemen. Het
feittype woont_op en het objecttype adres hebben
dan hun dienst gedaan, en kunnen dan wel gemist
worden.
Als je op Yes hebt geklikt verschijnt het
volgende venster:

Het programma ziet dat een persoon maar één woonplaats heeft
(aan de pijl van de uniciteitsbeperking), en stelt voor
om de woonplaats in de tabel met
voornaam+achternaam+geboortedatum+adres op te nemen. Het
feittype woont_in en het objecttype
plaats hebben dan hun dienst gedaan, en kunnen
dan wel gemist worden.
Als je op Yes hebt geklikt
verschijnt het volgende venster:

Het programma ziet dat een persoon maar in
één klas kan zitten (aan de pijl van de
uniciteitsbeperking), en stelt voor om de klas
in de tabel met
voornaam+achternaam+geboortedatum+adres+woonplaats op te
nemen. Het feittype zit_in_klas en het objecttype
klas hebben dan hun dienst gedaan, en kunnen dan
wel gemist worden.
Dan zijn er nog twee feittypen
over, die verbonden zijn met het objecttype
persoon.
Er zit geen
uniciteitsbepering op de rol persoon bij die
feittypen, daarom worden daar aparte
tabellen voor gegenereerd.
De ene tabel
bevat dan de voornaam+achternaam van de persoon +
sport.
De andere tabel bevat dan de voornaam+achternaam van de
persoon + vak + cijfer.