PowerPoint-presentatie

advertisement
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
ElementNotFoundany 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)
Download