3 Datamodellen voor databasemanagement ER-diagrammen Betekenis Formalisme Graad van r a 1 a2 unair relationshiptype r e binair relationshiptype e1 a1 a2 r Cardinaliteitsratio’s van a1 e2 ER-diagrammen (0..n) (0..n) e1 (0..1) e1 a1 a2 (0..1) a1 a2 (1..n) (1..n) e1 (1..0) e1 a1 a2 (1..0) a1 a2 Voorbeeld aonr levnr relationshiptype ‘in-bestelling’ leverancier levnaam ao-lev lev-ao aankooporder (1..1) (0..n) aodatum in-bestelling figuur 3.1 Grafisch formalisme voor ER-diagram Zwakke entiteittypen hotelnaam levnr leverancier (1..1) ao-lev lev-ao (0..n) aonr aankooporder hotel (1..1) kam-hot hot-kam (0..n) hotelnaam kamer kamernnr figuur 3.2 Bestaansafhankelijkheden en zwakke entiteittypen in een ER-diagram Voorbeeld van een ER-model geeft ontvangt leiding aan leiding van leidt wnaam (0..n) (0..1) wnr werknemer sekse adres (0.. m) (1..1) (1..n) geboortedatum dep-mgr mngt mgr-dep dnaam dnr dep-wkn pro-wkn werkt -in werkt-aan wkn-dep wkn-pro (0..1) gewerkt (1..1) departement dlocatie (1..1) pro -dep belast - met dep-pro pnaam pnr (0..n) (0..n) project pduur figuur 3.3 ER-diagram van een ER-model (personeelsadministratie) EER-diagrammen (voorbeeld – disjunctie) wnr werknemer wnaam t wadres d acad- aantal graad jaaruur wetenschgraad ‘zap’ status ‘aap’ ‘atp’ figuur 3.4 Voorbeeld van een EER-diagram van een disjuncte, totale specialisatie EER-diagrammen (voorbeeld – niet disjunct) pnr product pnaam t o fabricagetijd levertermijn aankoopproduct fabricageproduct figuur 3.5 Voorbeeld van een EER-diagram van een niet disjuncte, totale specialisatie EER-diagram werknemer t t d ‘zap’ ‘aap’ p d ‘atp’ vast benoemd personeel tijdelijk benoemd personeel (1..1) mvl-tbp tbp-mvl (0..n) mandaat verlenging permanente onderwijscommissie (1..1) sp-poc poc-sp (0..n) studieproject figuur 3.6 Voorbeeld van een EER-diagram waarin een entiteittype voorwerp is van van meer dan één specialisatie EER-diagram (specialisatieraster) persoon t o werknemer student t t d ‘zap’ ‘aap’ d ‘atp’ studentassistent kandidatuurstudent licentiestudent t d onderwijsassistent onderzoeksassistent figuur 3.7 Voorbeeld van een EER-diagram van een specialisatieraster EER-diagram (categorisatie) natuurlijke persoon rechtspersoon u p rekeninghouder (1..n) ba-rh rh-ba (1..n) bank figuur 3.8 Voorbeeld van een EER-diagram van een categorisatie EER-diagram (aggregatie) (1..n) job (0..n) s-j j-s sollicitant interview (1..1) j-i i-j (0..1) jobaanbieding figuur 3.9 Voorbeeld van een EER-diagram van een soort van aggregatie geeft leiding aan ontvangt leiding van leidt (0..n) (0..1) werknemer (1..n) (0..m) p manager dep-wkn werkt-in (1..1) dep-mgr toew-wkn werkt-aan wkn-dep wkn-toew (0..n) gewerkt mngt mgr-dep (1..1) departement (1..1) (1..1) pro-dep belast-met dep-pro (0..n) project toewijzing figuur 3.10 Voorbeeld van een EER-diagram voor een EER-model (personeelsadministratie) Hiërchisch diagram departement dnr dnaam dlocatie werknemer wnr wnaam adres sekse geboortedatum project pnr pnaam pduur figuur 3.11 Grafische voorstelling van een hiërarchisch gegevensmodel met behulp van een hiërarchisch diagram Structuurbeperkingen van een hiërarchisch gegevensmodel project 10 project 11 werknemer 130 werknemer 131 werknemer 145 werknemer 130 werknemer 146 project 12 werknemer 130 werknemer 131 werknemer 156 figuur 3.12 Het modelleringsprobleem van n:m relationshiptypen in een hiërarchisch gegevensmodel project 10 werknemer (vp) 130 vc werknemer (vp) 131 project 11 werknemer (vp) 145 vc werknemer (vp) 146 project 12 vc werknemer (vp) 156 figuur 3.13 Illustratie van een virtueel parent/child relationshiptype Voorbeeld van een hiërarchisch model departement werknemer dnr dnaam dlocatie project mngt pnr pnaam pduur - wnr wnaam adres sekse geboortedatum werkt-in - leidt - werkt-aan gewerkt hiërarchische structuur 1 hiërarchische structuur 2 figuur 3.14 Voorbeeld van een hiërarchisch diagram van een hiërarchisch gegevensmodel (personeelsadministratie) CODASYL-model departement dnr dnaam dlocatie werkt-in werknemer wnr wnaam adres sekse geboortedatum belast-met project pnr pnaam pduur figuur 3.15 Grafische voorstelling van een CODASYL-model met behulp van een Bachman-diagram werknemer project wkn-pro pro-wkn werkt-aan werknemer 130 project 10 131 11 145 12 146 156 werkt-aan werkt-aan werkt-aan werkt-aan werkt-aan werkt-aan werkt-aan werkt-aan figuur 3.16 Het oplossen van n:m relationshiptypen in een CODASYL- model hiërarchie geeft-leiding-aan ontvangt-leiding-van werknemer wrk-pro wnr wnaam adres sekse geboortedatum werkt-aan werkt-in mngt gewerkt departement dnr dnaam dlocatie pro-wrk belast-met project pnr pnaam pduur figuur 3.17 Voorbeeld van een Bachman-diagram voor een CODASYLgegevensmodel (personeelsadministratie) Het relationele model (1) R1 (DNR, DNAAM, DLOCATIE) 1NF R11 (DNR, DNAAM) R12 (DNR, DLOCATIE) figuur 3.18 Illustratie van de eerste normalisatiestap Het relationele model (2) R1 (WNR, WNAAM, PROJECT (PNR, PNAAM, PDUUR, GEWERKT) 1NF R11 (WNR, WNAAM) R12 (WNR, PNR, PNAAM, PDUUR, GEWERKT) figuur 3.19 Illustratie van de eerste normalisatiestap Het relationele model (3) R11 (WNR, WNAAM) R12 (WNR, PNR, PNAAM, PDUUR, GEWERKT) 2NF R21 (WNR, WNAAM) R22 (WNR, PNR, GEWERKT) R23 (PNR, PNAAM, PDUUR) figuur 3.20 Illustratie van de tweede normalisatiestap Het relationele model (4) R2 (WNR, WNAAM, DNR, DNAAM, MGNR) 3NF R31 (WNR, WNAAM, DNR) R32 (DNR, DNAAM, MGNR) figuur 3.21 Illustratie van de derde normalisatiestap Boyce-Codd-normalisatiestap R1 (LNR, LNAAM, PNR, HOEVEELHEID) Kandidaatsleutel LNR, PNR en kandidaatsleutel LNAAM, PNR LNR LNAAM en LNAAM LNR BCNF RBCNF 1 (LNR, LNAAM) of RBCNF 1 (LNR, LNAAM) RBCNF 2 (LNR, PNR, HOEVEELHEID RBCNF 2 (LNAAM, PNR, HOEVEELHEID) figuur 3.22 Illustratie van de Boyce-Codd-normalisatiestap Het relationele model (5) RBCNF (SNR, RICHTING, ACTIVITEIT) 4NF R41 (SNR, RICHTING) R42 (SNR, ACTIVITEIT) figuur 3.23 Illustratie van de vierde normalisatiestap Voorbeeld van een relationeel model WERKNEMER (WNR, WNAAM, STRAATADRES, GEMEENTE, SEKSE, GEBOORTEDATUM, LWNR, DNR) LWNR: vreemde sleutel, verwijst naar WNR in WERKNEMER, null toegelaten DNR: vreemde sleutel, verwijst naar DNR in DEPARTEMENT, null niet toegelaten DEPARTEMENT (DNR, DNAAM, DLOCATIE, MGNR) MGNR: vreemde sleutel, verwijst naar WNR in WERKNEMER, null niet toegelaten PROJECT (PNR, PNAAM, PDUUR, DNR) DNR: vreemde sleutel, verwijst naar DNR in DEPARTEMENT, null niet toegelaten WERKT-AAN (WNR, PNR, GEWERKT) WNR: vreemde sleutel, verwijst naar WNR in WERKNEMER, null niet toegelaten PNR: vreemde sleutel, verwijst naar PNR in PROJECT, null niet toegelaten figuur 3.24 Illustratie van het relationele gegevensmodel (personeelsadministratie) 0..1 geeft-leiding-aan Werknemer wnr ontvangt-leiding-van wnaam: Naamdomein * adres: Adresdomein sekse: (M,V) * geboortedatum: Date 1..1 leeftijd wijzig-departement 1..* wijzig-projecten ........................ werkt-in mngt werkt -aan Departement 1..1 gewerkt dnr dnaam dlocatie 0..1 wijzig-manager voeg-werknemer-toe ........................ Project * pnr pnaam pduur voeg-project-toe voeg-werknemer-toe .......................... Figuur 3.25 Illustratie van UML-Class diagram (personeelsdaministratie) Specialisatie en generalisatie Werknemer wnr wnaam wadres geboortedatum leeftijd Zelfstandigacademisch-personeel (‘zap’) Assisterendacademisch-personeel (‘aap’) Administratiefen-technisch-personeel (‘atp’) academische-graad aantal-cursus-jaaruren wetenschappelijke-graad aantal-oefeningen-jaaruren status wijzig-aantal-jaaruren wijzig-aantal-jaaruren wijzig-status figuur 3.26 Illustratie van specialisatie/generalisatie in een UML-class diagram (disjuncte specialisatie) Aggregatie Grasmaaier modelnummer modelnaam * * ---------------* * aantal 1..1 Mes mesnummer meslengte mesdiameter ---------------- 1..1 Motor motornummer motortype paardenkracht ------------------ 1..1 Wiel wielnummer wieltype wieldiameter ---------------- 1..1 Mantel mantelnummer mantelmateriaal manteldikte ------------------ figuur 3.27 Illustratie van aggregatie (‘part-of-relationships’) in een UML-class diagram (gedeelde aggregatie) Het ODMG-objectmodel interface ObjectFactory Object new( ); ; interface Object enum Lock_Type (read, write, upgrade); exception LockNotGranted; void lock(in Lock_Type mode) raises(LockNotGranted); boolean try_lock(in Lock_Type mode); boolean same_as(in Object anObject); Object copy ( ); void delete ( ); ; figuur 3.28 Interface definities in het ODMG-objectmodel (het creëren en gebruiken van objecten) interface DateFactory: ObjectFactory exception InvalidDate( ); Date julian_date (in unsigned short year, in unsigned short julian_day) raises(InvalidDate); Date calendar_date (in unsigned short year, in unsigned short month, in unsigned short day) raises(InvalidDate); boolean is_leap_year (in unsigned short year); boolean is_valid_date (in unsigned short year, in unsigned short month, in unsigned short day); unsigned short days_in_year (in unsigned short year); unsigned short days_in_month (in unsigned short year, in Date::Month month); Date current( ); ; interface Date: Object typedef unsigned short ushort; enum Weekday Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday; enum Month January, February, March, April, May, June, July, August, September, October, November, December; unsigned short year( ); unsigned short month( ); unsigned short day( ); boolean is_equal(in Date a_date); ...................... ; figuur 3.29 Interface-definities in het ODMG-objectmodel (struct objecten) interface CollectionFactory: ObjectFactory Collection new_of_size (in long size); ; interface Collection: Object exception InvalidCollectionType; exception ElementNotFoundany element;; unsigned long cardinality( ); boolean is_empty( ); boolean is_ordered( ); boolean allows_duplicates( ); boolean contains_element(in any element); void insert_element(in any element); void remove_element(in any element) raises(ElementNotFound); ...................... ; interface Set: Collection Set create_union(in Set other_set); Set create_intersection(in Set other_set); Set create difference(in Set other_set); boolean is_subset_of(in Set other_set); boolean is_proper_subset_of(in Set other_set); boolean is_superset_of(in Set other_set); boolean is_proper_superset_of(in Set other_set); ; figuur 3.30 Interface definities in het ODMG-objectmodel (collection objecten) class Werknemer ( extent werknemers key wnr ) attribute string wnr; attribute string wnaam; attribute struct Address; attribute enum Geslacht(M,V) sekse; attribute date geboortedatum; relationship Departement werkt-in inverse Departement:: heeft-werknemers; void wijzig-departement (in string dnaam) raises (dnaam-not-valid); ; class Departement ( extent departementen key dnr ) attribute string dnr; attribute string dnaam; attribute set<string> dlocatie; relationship set<Werknemer> heeft-werknemers inverse Werknemer:: werkt-in; void voeg-werknemer-toe(in string new-wnaam) raises (wnaam-not-valid); ; sfiguur 3.31 Voorbeeld van een klassedefinitie in het ODMG-model class Werknemer ( extent werknemers key wnr ) attribute string wnr; attribute string wnaam; attribute struct Address; attribute enum Geslacht(M,V) sekse; attribute date geboortedatum; relationship set<Werknemer> geeft-leiding-aan inverse Werknemer:: ontvangt-leiding-van; relationship Werknemer ontvangt-leiding-van inverse Werknemer:: geeft-leiding-aan; relationship Departement werkt-in inverse Departement:: heeft-werknemers; relationship set<Project> heeft-projecten inverse Project:: werkt-aan; void wijzig-departement (in string dnaam) raises (dnaam-not-valid); ; class Manager extends Werknemer ( extent managers ) attribute date relationship Departement inverse Departement:: mstdatum; mngt wordt-gemngt; class Departement ( extent departementen key dnr ) attribute string dnr; attribute string dnaam; attribute set<string> dlocatie; relationship set<Werknemer> heeft-werknemers inverse Werknemer:: werkt-in; relationship set<Project> is-belast-met-projecten inverse Project:: verantwoordelijk-departement relationship Manager wordt-gemngt inverse Manager:: mngt; void voeg-werknemer-toe(in string new-wnaam) raises (wnaam-not-valid); figuur 3.32 Klassedefinities in het ODMG-objectmodel (personeelsadministratie) (wordt vervolgd) Voorbeeld van een ODMGobjectmodel class Project extent projecten key pnr ) attribute attribute attribute relationship relationship void string pnr; string pnaam; string pduur; Departement verantwoordelijk-departement inverse Departement is-belast-met-projecten; set<Werknemer> werkt-aan inverse Werknemer:: heeft-projecten; voeg-project-toe(in string new-pnaam) raises (pnaam-not-valid); ; figuur 3.32 Klassedefinities in het ODMG-objectmodel (personeelsadministratie) (vervolg)