GEGEVENSMANAGEMENT deel III
Brilbeer in de dierentuin van Wenen, de enige beer die van nature in Zuid Amerika voorkomt. Leeft vooral in vochtige bossen op de Andes.
- Op een gegeven moment is Telecom ‘content’ gaan leveren. En de nieuwe doelstelling ‘leveren van content’ wordt ondersteund door de doelstelling ‘leveren van telecommunicatie’ en is daarmee hoger.
- Telecom was altijd al een bedrijf, maar onderdeel van de overheid. Er was daarmee steeds een doelstelling “maken van winst”. Vòòr de verzelfstandiging was dat aspect voor de bedrijfsvoering, niet van het hoogste belang. De winst ging naar de staat en die bepaalde hoeveel ruimte er op de rijksbegroting was voor het investeren in Telecom. Daarna is het gewicht van deze doelstelling sterk toegenomen, en dat was ook de bedoeling; Telecom moest zijn investeringen zelf uit de opbrengsten gaan financieren, en tegelijk aan de de behoefte van de markt gaan voldoen. Toen Telecom als onderdeel van KPN, naar de beurs ging werd dat gewicht nog veel groter.
Om het een en ander toe te lichten een globaal plaatje als introductie tot die methode. Daarna volgt een uitgewerkt, maar versimpeld, voorbeeld.
Gegevens worden gezien als een neerslag van feiten.
In de buitenste ring staan de FEITEN. Die buitenste ring symboliseert wat ik in het voorafgaande het Universe Of Discourse heb genoemd. Dat is de professionele discussie tussen betrokkenen, gestuurd door gemeenschappelijke doelstellingen, over dat onderwerp. De feiten zijn de neerslag van die discussie.
- LINKS BOVEN staat het Objectmodel waarmee geregistreerd wordt waarover de feiten gaan.
- RECHTS BOVEN in het Semantisch-model wordt vastgelegd wat we over die feiten willen weten
- RECHTS ONDER: het Logisch datamodel legt vast hoe we datgene wat we over die feiten willen weten gaan registeren.
- LINKS ONDER: het Fysieke datamodel legt dat wat we gaan registreren vast in een database notatie, hierbij kunnen om implementatie redenen nog bepaalde gegevens worden toegevoegd.
Bij gegevensmanagement houden we ons vooral bezig met de eerste twee aspecten. Het Logisch datamodel ontstaat in het project in samenwerking met de systeemontwerper en een database-specialist van de automatiseringsafdeling. Het fysieke datamodel is het terrein van de database-specialisten.
Essentieel is dat het steeds over een type gaat. Bijvoorbeeld bij het maken van het objectmodel nemen we feiten over objecten waar. Vervolgens onderkennen we, gestuurd door de doelstellingen, typen. En we registreren de objecttypen! De stap van object naar objecttype gebeurt ‘vanzelf’ doordat de taal ons daartoe dwingt; we hebben geen woord voor “dat beestje met veren daar”, maar we hebben het over die vogel. Ook in de andere modellen hebben we het steeds over typen, of over een exemplaar van een type. We zijn niet bezig met de inhoud van een database; maar werken aan een structuur, waarin je alle denkbare inhouden zou kunnen opslaan.
Voorbeeld: versimpeld Gegevensmodel van een Bibliotheek
Het primaire doel van een bibliotheek is het uitlenen van boeken. Het primaire doel van de registratie is het registreren daarvan. Het reserveren van boeken, en het inschrijven van nieuwe boeken en klanten zijn subdoelen.
Er lopen in zo een typisch registratieve situatie eigenlijk twee processen parellel: Het primaire bedrijfsproces, het uitlenen van boeken aan klanten, en als afspiegeling daarvan een secundair registratief proces het maken van aantekeningen over dat uitlenen.
Beide processen lopen nagenoeg synchroon omdat er anders informatie over het primaire proces verloren gaat die geregistreerd had moeten worden.
In termen van “waarnemingen”, vinden in het registratieve proces waarnemingen plaats van het primaire proces; de bibliothecaris neemt daarin ook zijn eigen handelingen en beslissingen waar.
In het domein vinden we:
- Als concrete zaken: KLANTEN, BOEKEN en AUTEURS.
- Als gebeurtenissen: UITLENING en RESERVERING. {eigenlijk zijn er nog twee voor het beëindigen van beiden}
- Er is één concept: omdat er van een boek meerdere exemplaren kunnen zijn hebben we naast BOEK ook SOORT-BOEK nodig.
Het Objectmodel
- KLANT: Een PERSOON die gerechtigd is bij de bibliotheek BOEKen te lenen.
- BOEK: Een aantal pagina’s op papier die, al dan niet in een band zijn samengevoegd en waarop een geschrift over enig onderwerp is vastgelegd. (opmerking: hier is duidelijk het boek in fysieke zin bedoeld. Dit zijn de objecten die je uitleent. Vaak voorzien van een automatisch leesbare identificerende code, om efficient uit te kunnen lenen)
- SOORT-BOEK: Een verzameling BOEKEN, die omdat ze allen dezelfde inhoud hebben, voor de KLANT bij het uitlenen verwisselbaar zijn.
- AUTEUR: Een NATUURLIJK-PERSOON die één of meerdere SOORT-BOEKen geschreven heeft.
- UITLENING: Een tijdelijke overdracht van een BOEK aan een KLANT
- RESERVERING: De kennisgeving van een KLANT dat hij zo spoedig mogelijk een UITLENING wil van een exemplaar van een SOORT-BOEK.
- NATUURLIJK-PERSOON: een mens
- NIET-NATUURLIJK-PERSOON: een rechtspersoon of een samenwerkingsverband dat zich als zelfstandige organisatie manifesteert.
- PERSOON: Een generalisatie van een natuurlijk- en een niet-natuurlijk-persoon.
Een Reservering is een samenstelling van drie objecttypen: de reservering zelf, soort-boek en klant. We noemen dit wel een aggregatie.
Een uitlening is ook een aggregatie. De gestippelde pijl van soort-boek naar boek, geeft aan dat boek een element is van soort-boek.
Het Semantisch-model
Hierin wordt vastgelegd wat we over de objecten uit het objectmodel willen weten. Dat kan alleen maar als je de objecten individueel kent. Dergelijke geïdentificeerde objecten hebben daarmee de status van entiteit verkregen. Of praktisch gesproken; ze komen in de database.
Omdat het in de modellencyclus bijna altijd over typen gaat; hebben we het dus over entiteittypen.
Dit lijken precies dezelfde zaken als de objecttypen; althans ze hebben dezelfde naam en definitie, waarom is er een verschil tussen het objecttype en het gelijknamige entiteittype BOEK? Het antwoord luidt: er zijn héél erg veel meer objecten BOEK dan entiteiten BOEK; een entiteit is een object dat onderdeel is van de onderhavige registratie.
In de post Gegevensmanagement II staat een korte introductie over de methode van vastleggen wat we over entiteiten willen registreren. Dat gebeurde daar met beweringen van de vorm (A,R,B) waarbij A en B entiteiten zijn en R het predikaat is; een paar woorden, zodat A+R+B een falsifieerbare uitspraak is. Bijvoorbeeld:
- (merel-1, hoort bij nest, nest-7)
- (merel-1, vormt een paar met. merel-2)
In het semantisch model gaat het over typen; dus over entiteittypen en beweringtypen. Ik schrijf de eniteittypen met hoofdletters, dan krijg je:
-(MEREL, hoort bij , NEST)
-(MEREL, vormt een paar met, MEREL#)
Substitutie van entiteiten levert dan de beweringen. De spoorwegkruising achter MEREL aan de rechterzijde dient om aan te geven dat het om twee verschillende merels gaat. NEST is in dit domein een zogenaamde secundaire entiteit, omdat het alleen op de rechterpositie voorkomt, en dus nooit zelf onderwerp van een bewering is; we willen er verder niets over weten.
Semantisch-model van de biblotheek
Hieronder staat een opsomming van entiteittypen met hun beweringtypen. Door substitutie van entiteiten voor hun type in een beweringtype ontstaan beweringen.
De accolades rond {AUTEUR} bij SOORT-BOEK geven aan dat één soort-boek meerdere auteurs kan hebben.
KLANT:
- KLANT wordt aangeduid met klantnaam PERSOONSNAAM
- KLANT is geboren op datum DATUM
- KLANT is geregistreerd onder KLANTNUMMER
- KLANT woont op ADRES
- BOEK wordt geïdentificeerd met code BOEK-CODE
- BOEK is exemplaar van SOORT-BOEK
- SOORT-BOEK wordt geïdentificeerd met nummer ISBN-NUMMER
- SOORT-BOEK is geschreven door {AUTEUR}
- SOORT-BOEK wordt aangeduid met TITEL
- UITLENING is gedaan aan KLANT
- UITLENING betreft boek BOEK
- UITLENING is gedaan op datum DATUM
- RESERVERING is gemaakt voor KLANT
- RESERVERING betreft soort-boek SOORT-BOEK
- RESERVERING is gemaakt op datum DATUM
Tekening semantisch model bibliotheek
In de tekening worden entiteittypen voorgesteld door een ellips met hun naam erin. De entiteittypen zijn verbonden met een gebogen lijn als er een beweringtype is die ze verbindt.
De secundaire entiteittypen zijn als eindpunt duidelijk te onderscheiden.
{Een secundaire entiteit is een waarde, en een secundair eniteittype is een lijstje met waarden. Bijvoorbeeld entiteittype KLEUR met waarden: rood, groen, blauw, …. . Maar ook het ISBN-nummer is een secundair entiteittype waarvan de waarden, de nummers, getallen van 13 cijfers zijn.}
AUTEUR is in dit domein secundair, maar je zou AUTEUR makkelijk tot primair kunnen verheffen.
Je creëert daartoe twee beweringtypen voor AUTEUR.
AUTEUR wordt aangeduid met auteursnaam PERSOONSNAAM
AUTEUR heeft geschreven {SOORT-BOEK}
Met de behandeling van het objectmodel en het semantisch model hebben we het aspect ‘betekenis’ van wat we willen registreren van de feiten vastgelegd. Als het goed is, dan heb je personeel van de opdrachtgever bij het ontwikkelen van deze modellen betrokken en hebben zij, en hun bazen, er mee ingestemd.
In het Logisch Datamodel gaan we vastleggen hoe we gegevenstypen vorm gaan geven zodat de toekomstige gegevens betekenisvol vastgelegd en gepresenteerd kunnen worden.
Logisch datamodel
In het objectmodel hebben we de objecttypen gedefinieerd waarover de feiten gaan. In het semantisch model hebben we vastgelegd wat we over de feiten willen weten. Daarmee is hebben we een structuur waarmee de betekenis van de toekomstige data van de database kan worden vastgelegd.
Bij de start van het ontwikkelen van het Logisch Datamodel (LDM), wordt de status van het project serieuzer; en wordt de rol van de automatiseerders groter. Het LDM gaat de view worden die zij op de database krijgen.De zoekpaden door de gegevens zijn voor hen van belang omdat ze nodig zijn voor de transacties die ze moeten gaan ontwikkelen.
De rol van personeel van de opdrachtgever betrokken bij het project verschuift van materie-deskundigen naar dat van potentiële gebruikers. Blijf ze erbij betrekken. Leg uit wat je aan het doen bent en waarom.
In het logisch datamodel wordt bepaald hoe we gaan registreren:
{Even abstract: de essentie van het relationele model voor databases, is het registreren van entiteiten in een tabel}
Ieder primair entiteittype P wordt een tabel, met zijn entiteiten als regels in die tabel. Terwijl ieder secundaire entiteittype S dat in een beweringtype van de vorm P predikaat S voorkomt, een kolom van die tabel van P wordt.{secundaire entiteittypen zijn een verzameling van waarden, en hun entiteiten zijn die waarden}
Een kolom van P wordt in het LDM een attribuut-type genoemd. Denk boven de kolom de naam S eventueel met een toevoeging die past bij de rol in het beweringtype. Dit is de naam van het attribuut(type).
Als deze attibuutnaam in het onderstaande onderstreept is, dan is het een sleutel. Dat wil zeggen met de waarde; het attribuut, kan je de entiteit (de regel van de tabel waar het atribuut in staat) selecteren.
Voorbeeld voor KLANT
de kop van zijn tabel:
klantnummer ; klantnaam; geboortedatum; adres.
De geboortedatum is optioneel; de klant kan immers ook een niet-natuurlijk persoon zijn. Klantnummer is de sleutel van KLANT en daarom onderstreept.
De hoofdstructuur van het LDM: een tekening
{Deze tekening toont hoe de tabellen met elkaar samenhangen}
De hoofdstructuur van het LDM wordt gevormd door de primaire entiteittypen. Dat zijn dus tabellen, maar in de tekening van de hoofdstructuur voorgesteld als vierkanten met van de naam van het primaire entiteittype erin; daarmee zijn de secundaire entiteittypen in de tekening niet zichtbaar want onderdeel van een vierkant geworden.
De primaire entiteittypen, vierkanten, zijn met elkaar verbonden met relaties afgeleid uit beweringtypen van het semantisch model die ze met elkaar verbinden. Dit wordt voorgesteld door een rechte lijn, met tbv de layout, soms een rechte hoek erin. Aan beide zijden van een relatie staat een symbool voor de cardinaliteit van de relatie, zie linksonder in de tekening.
Voor iedere relatie die aan de zijde van het een vierkant een ‘harkje’ heeft; hetgeen wil zeggen dat dit vierkant meerdere keren in de relatie voor kan komen; krijgt de betreffende tabel een extra kolom bestemd voor sleutels van de andere kant van die relatie.
De relatie tussen KLANT en RESERVERING staat voor de reserveringen die een klant heeft uitstaan. Hij mag er meerdere doen, maar hoeft er geen gedaan te hebben. Maar een reservering hoort altijd bij één klant.
In de tabel RESERVERING wordt dit gerealiseerd door een extra kolom waarin de sleutel van de klant, het klantnummer staat. Bij een klant kunnen zijn reserveringen worden opgezocht door in die kolom van RESERVERINGEN op zijn klantnummer te zoeken.
Bij één RESERVERING hoort precies één soort-boek. Dat vereist een kolom in de tabel reservering met de isbn-nummers (sleutels) van de gereserveerde soort-boeken. Andersom hoeft een soort-boek niet gereserveerd te zijn.
Dit geeft de volgende kop boven de kolommen van de tabel van RESERVERING.
klantnummer ; isbn-nummer ; datum gereserveerd
Klantnummer en isbn-nummer vormen samen de sleutel van reservering.
Volgens onze methode begin je een opstart van het Logisch Datamodel door in de tekening van het Semantisch Model aan beide zijden van een boog voor een beweringtype dezelfde informatie te geven in de vorm (0-1), (1-1), (0-n) of (1-n); waarin ‘n’ staat voor onbeperkt.
Een UITLENING lijkt wel een beetje op een reservering; hij wordt op een bepaalde datum gedaan aan één klant; en betreft één boek. Een klant kan meerdere uitleningen hebben lopen, maar hoeft er geen te hebben. Een boek kan echter maar eenmaal uitgeleend zijn; of natuurlijk gewoon in de kast staan.
De kop van de tabel van UITLENING wordt:
boek-code ; klantnummer ; datum uitgeleend .
Een BOEK is altijd van één SOORT-BOEK. Dat vereist dus een extra kolom met isbn-nummers bij BOEK. Bij een (populair) SOORT-BOEK behoren vaak vele BOEKen, maar er kan een nieuw gepubliceerd SOORT-BOEK zijn waar de bibliotheek nog geen exemplaren van heeft.
Kop van de tabel van BOEK
boek-code ; isbn-nummer ;
Het entiteittype AUTEUR is toch primair gemaakt.
Wanneer je het aantal auteurs tot 1 beperkt `dan kan AUTEUR een secundair entiteittype zijn, en als een kolom bij SOORT-BOEK opgenomen. Maar meerdere auteurs bij één boek is natuurlijk geen zeldzaamheid. De bibliothecaris heeft op dit punt een aanpassing van het semantisch model geëist. {onder de tekening van het semantisch model staat dit al uitgewerkt}.
Dat betekent daar o.a. toevoegen van het beweringtype “AUTEUR heeft geschreven {SOORT-BOEK}”.
Daarmee is er een meer op meer relatie tussen AUTEUR en SOORT-BOEK noodzakelijk. Dergelijke relaties worden gerealiseerd met wat in het spraakgebruik een relatie-entiteit wordt genoemd. Dat gedraagt zich als een primair entiteittype met twee (extra) kolommen: in dit geval één met het isbn-nummer van SOORT-BOEK en een met auteursnaam. En die tabel krijgt één regel voor iedere combinatie van een soort-boek en een auteur die (ook) aan het soort-boek geschreven heeft. Via deze tabel kan je van ieder SOORT-BOEK bij zijn auteurs komen, en van iedere AUTEUR bij zijn soort-boeken.
Kop boven SOORT-BOEK/AUTEUR
isbn-nummer ; auteursnaam.
{deze twee zijn samen de sleutel van soort-boek/auteur}
{Net als AUTEUR/SOORT-BOEK is ook RESERVERING een soort relatie-entiteit met behalve de primaire sleutel klantnummer+isbn-nummer ook een kolom voor de reserverings-datum.}
verbonden
Het entiteittype SOORT-BOEK heeft twee kolommen:
isbn-nummer ; titel.
{Ik denk dat het handig is om ook een kolom voor kastnummer op te nemen voor de locatie in de bibliotheek waar boeken van deze soort te vinden zijn}
{Een tabel wordt geschikt voor een relationele database geacht als deze aan de volgende voorwaarden voldoet:
Alle kolommen die geen sleutel zijn, zijn onafhankelijk van elkaar; maar zijn wel allen afhankelijk van de (volledige) sleutel.
In de literatuur heet dit dat de tabel in de derde Normaalvorm is.
Het doel is het vermijden van redundantie in de database; terwille van eenmalige invoer en vermijden van inconsistentie.
Uit de tekening van het LDM blijken er twee paden van SOORT-BOEK naar KLANT te lopen: via de uitlening en via de reservering. Dat zou ook op redundantie kunnen wijzen. Dat is niet het geval want je komt langs beide wegen gewoonlijk niet bij dezelfde klant uit.}
{een programmeur die wat ervaring met logische datamodellen heeft zal wellicht zeggen dit LDM van de bibliotheek had ik kunnen maken zonder me eerst bezig te houden met Universe of Discourse, objectmodel en semantisch model.
Dat komt omdat je al heel wat keren in een bibliotheek bent geweest.
In de post Gegevensmanagement deel I staat een casus voor een onderzoek aan trekvogels. Probeer daar eens een LDM van te maken}
Het volgende model is het Fysieke Datamodel. Dat is het werk van de datebase-specialisten. Het LDM is input voor hen.
Het Fysieke Datamodel
In het Logisch Datamodel is vastgelegd hoe we de gegevens over de feiten die voor ons doel relevant zijn gaan registreren. In het Fysiek Datamodel wordt bepaald waarmee dat gebeurt.
Daarvoor hebben we twee belangrijke tools:
1) De Structured Query Language (SQL)
Dit is een universeel gangbare taal om databases mee te bevragen; maar je kan er ook databases mee bouwen.
2) Een Relationeel DataBase Management Systeem (RDBMS) dat geschikt is voor het platform waarop je de database wil installeren.
Eerst wordt het LDM "vertaald" in SQL. En worden er allerlei technisch of implementatie-gegevens toegevoegd: over gebruikers en hun bevoegdheden, over het netwerk en printers, gegevens over recovery door het DBMS, ... .
Er is een doorlopend onderzoek naar de te verwachten systeembelasting; want dat soort informatie is ook al nodig om te bepalen op wat voor systeem de database en de bijbehorende processen gaan draaien.
Maar dit onderzoek wordt specifieker naarmate de implementatie dichterbij komt.
Met name van de meest kritische zoekpaden is van belang te weten hoe vaak ze gebuikt gaan worden. En van de grootste tabellen is de groeisnelheid van belang, evenals de te verwachten maximale grootte.
Een methode om de zoeksnelheid van het operationele systeem te verbeteren is het maken van een index van de sleutel van entiteiten die problemen geven en een slimme zoekstrategie te gebruiken op die sleutel.
Een uiterste middel is het denormaliseren van een entiteit. Als - onwaarschijnlijk - voorbeeld op het model van de Bibliotheek het volgende:
Stel dat de bibliothecaris er een probleem mee heeft dat er veel oude reserveringen zijn omdat er geen boeken van een gereserveerde soort terugkomen. En hij wil de namen van de klanten die een boek van die soort te leen hebben, zodat hij ze kan vragen om het boek terug te brengen.
Nu duurt het pad van reservering, naar soort-boek, naar boek, naar uitlening, naar klant, naar klantnaam hem te lang. Dan zou de volgende denormalisatie helpen: neem in het fysieke datamodel in uitlening de klantnaam redundant op en maak van boek en uitlening één tabel boekplus (ze hebben al dezelfde sleutel). Een complicatie is dat je na teruggave het uitlening-deel en de klantnaam in boekplus moet leegmaken.
De kwaliteit van gegevens
In mijn ervaring bij KPN was gegevensvervuiling soms een plaag voor de gebruikers van de automatisering.
Het vaak ondergeschikte belang van correct registreren
Stel dat de de Directeur van de bibliotheek verordonneert, dat een klant in totaal maximaal 7 boeken te leen mag hebben.
Dit zou gerealiseerd kunnen worden door de programmatuur rond het maken van een nieuwe uitlening een foutmelding te laten geven bij nummer acht.
Nu komt Koningin Máxima op een dag langs en vraagt om twee boeken voor een lezing over microkredieten die ze binnenkort wil geven. Bij het uitlenen blijkt echter dat Maxima van Oranje al zes boeken geleend heeft.
Dat wordt natuurlijk heel klantvriendelijk opgelost. Zij wordt door de bibliothecaris nogmaals ingeschreven als Maxima Zorreguieta en krijgt onder die naam de twee boeken.
Wat is het gevolg hervan? Iedereen is blij: de Koningin is blij met haar acht boeken, de bibliothecaris is trots op de verleende service aan deze voorname klant, en de directeur is blij omdat hij op zijn rapportage ziet dat het aantal prominente klanten verder is gestegen, en dat zijn opdracht tot het beperken van de uitleningen tot maximaal 7 per klant strikt wordt gevolgd.
Alleen de gegevensmanager zal treurig zijn als hij ontdekt dat de kwaliteit van de klantgegevens verder is afgenomen.
Enkele opmerkingen:
- Beperkingen op een gegevensmodel die niet volgen uit de essentie van entiteiten, beweringen en doelstellingen maar om bedrijfsmatige redenen opgelegd worden kunnen gaan wringen.
- De kwaliteit van gegevens is bij transacties vaak het minste belang dat speelt.
- Je kan een beperking zoals hier ook anders realiseren. Dan geef je bij iedere uitlening boven de zeven programmatisch een waarschuwing aan de baliemedewerker dat de transactie niet toegestaan is, en dat hij daarvoor ter verantwoording kan worden geroepen. Dan kan deze in schrijnende gevallen een uitzondering maken.
- Je moet altijd proberen het proces voor de baliemedewerker zo in te richten dat het makkelijker is om het goed te doen, dan fout. {Bij het invoeren van klanten in de CentraleKlantenRegistratie van KPN, moest je eerst zoeken of de klant al bekend was. Als dat niet het geval was, moest je deze als nieuwe klant invoeren. Bij een wachtrij voor de balie was daarom meteen invoeren als nieuwe klant voor een verkoper aantrekkelijk; in de beginfase van CKR was 20% van de nieuwe klanten een doublure; fout ging sneller dan goed. CKR had er last van maar het verkoopsysteem niet}
- Je moet ernaar streven een situatie te bereiken dat een gemaakte fout terug kan worden gevoerd naar de baliemedewerker; hij moet er een belang bij hebben om het goed te doen.





Comments
Post a Comment