4. Fname Minit Lname Number
Salary Name
Name N WORKS_FOR 1 Locations
Sex Address
Ssn StartDate
EMPLOYEE DEPARTMENT
1
Bdate 1 1
MANAGES
Hours CONTROLS
supervisor supervisee
1
N
1 N N
SUPERVISES WORKS_ON M
HAS_DEP.
PROJECT
N
Name Location
DEPENDENT
Number
Name
Relationship
Sex BirthDate
4
6. 1. voor elk regulier entiteitstype E:
• maak relatie R
• met alle enkelvoudige attributen van E
• kies één van sleutelattributen als primaire sleutel voor R
EMPLOYEE
Fname, Minit, Lname, Ssn, Bdate, Address,
Sex, Salary
DEPARTMENT
Dname, Dnumber
PROJECT
Pname, Pnumber, Plocation
5
8. stap 2. voor elk zwak entiteitstype W:
• maak een relatie R
• met alle enkelvoudige attributen van W
• en als verwijssleutel de primaire sleutel van eigenaar
DEPENDENT
Essn, Dependent_Name, Sex, Bdate, Relationship
6
10. stap 3. voor elk binair 1:1 relatietype R:
• S en T relaties voor deelnemende entiteitstypes van R
• neem primaire sleutel van T op als verwijssleutel in S
(of omgekeerd) - vermijd nul-waarden
• neem ook enkelvoudige attributen op
DEPARTMENT
Dname, Dnumber, Mgr_ssn, Mgr_start_date
7
12. stap 4. voor elk binair 1:N relatietype R:
• S relatie die entiteitstype van N-kant voorstelt
• voeg in S primaire sleutel relatie aan 1-kant toe
• neem ook enkelvoudige attributen op
EMPLOYEE
Fname, Minit, Lname, Ssn, Bdate, Address, Sex, Salary,
Super_ssn, Dno
PROJECT
Pname, Pnumber, Plocation, Dnum
8
14. stap 5. voor elk binair N:M relatietype R:
• maak nieuwe relatie S
• met verwijssleutels primaire sleutels van deelnemende
relaties
• met verwijssleutels samen als primaire sleutel
• neem ook enkelvoudige attributen van R op
WORKS_ON
Essn, Pno, Hours
9
16. stap 6. voor elk meerwaardig attribuut A:
• creëer een relatie R
• met attribuut dat overeenkomt met A
• + verwijssleutel: primaire sleutel K van bijhorende relatie
• als primaire sleutel: A en K samen
DEPT_LOCATIONS
Dnumber, Dlocation
10
19. Stap 7: voor elk n-air relatietype R (n>2) :
• maak nieuwe relatie S
• met verwijssleutels: primaire sleutels van deelnemende
entiteitstypes
• met alle enkelvoudige attributen van R
• met primaire sleutel: alle verwijssleutels samen
12
20. Stap 7: voor elk n-air relatietype R (n>2) :
• maak nieuwe relatie S
• met verwijssleutels: primaire sleutels van deelnemende
entiteitstypes
• met alle enkelvoudige attributen van R
• met primaire sleutel: alle verwijssleutels samen
12
21. Stap 7: voor elk n-air relatietype R (n>2) :
• maak nieuwe relatie S
• met verwijssleutels: primaire sleutels van deelnemende
entiteitstypes
• met alle enkelvoudige attributen van R
• met primaire sleutel: alle verwijssleutels samen
12
22. ER model relationeel model
• entiteitstype • “entiteits” relatie
• 1:1 of 1:N relationship type • verwijssleutel of relatie
• M:N relationship type • relatie met 2 verwijssleutels
• n-aire relationship type • relatie met n verwijssleutels
• enkelvoudig attribuut • attribuut
• samengesteld attribuut • verzameling attributen
• meerwaardig attribuut • relatie of verwijssleutel
• value set • domein
• sleutel attribuut • primaire sleutel
13
25. Stap 8: behandeling van super/subklasse-relaties
• Elke specialisatie met m subklassen { S1, S2,..., Sm }
en superklasse C met attributen { k, a1, ..., an }
14
26. Stap 8: behandeling van super/subklasse-relaties
• Elke specialisatie met m subklassen { S1, S2,..., Sm }
en superklasse C met attributen { k, a1, ..., an }
• Optie 8A
• maak relatie L voor C met attr(L) = { k, a1, ..., an }
• en primaire sleutel PK(L) = k
• en relaties Li voor elke subklasse Si met
• attr(Li) = { k } ∪ { attr(Si) }
• en PK(Li) = k
14
29. • Optie 8B
• maak voor elke subklasse Si een relatie Li
met attr(Li) = { attr(Si) } ∪ { k, a1, ..., an }
en PK(Li) = k
• werkt enkel correct voor disjuncte, totale specialisatie
• niet totale specialisatie
→ verlies van gegevens (∉ Si)
• niet disjuncte specialisatie
→ redundantie
16
30. • Optie 8B
• maak voor elke subklasse Si een relatie Li
met attr(Li) = { attr(Si) } ∪ { k, a1, ..., an }
en PK(Li) = k
• werkt enkel correct voor disjuncte, totale specialisatie
• niet totale specialisatie
→ verlies van gegevens (∉ Si)
• niet disjuncte specialisatie
→ redundantie
16
31. • Optie 8B
• maak voor elke subklasse Si een relatie Li
met attr(Li) = { attr(Si) } ∪ { k, a1, ..., an }
en PK(Li) = k
• werkt enkel correct voor disjuncte, totale specialisatie
• niet totale specialisatie
→ verlies van gegevens (∉ Si)
• niet disjuncte specialisatie
→ redundantie
16
33. • Optie 8C: één relatie L
attr(L) = { k,a1, ..., an } ∪ { attr(S1) } ∪ ... ∪ { attr(Sm) } ∪ { t } en
PK(L) = k
17
34. • Optie 8C: één relatie L
attr(L) = { k,a1, ..., an } ∪ { attr(S1) } ∪ ... ∪ { attr(Sm) } ∪ { t } en
PK(L) = k
• waarbij t duidt aan tot welke subklasse elk tupel behoort
• weggelaten als specialisatie predikaatgedefinieerd
• enkel voor disjuncte subklassen
• veel verschillende attributen in subklassen: veel nul
17
35. • Optie 8C: één relatie L
attr(L) = { k,a1, ..., an } ∪ { attr(S1) } ∪ ... ∪ { attr(Sm) } ∪ { t } en
PK(L) = k
• waarbij t duidt aan tot welke subklasse elk tupel behoort
• weggelaten als specialisatie predikaatgedefinieerd
• enkel voor disjuncte subklassen
• veel verschillende attributen in subklassen: veel nul
17
36. • Optie 8C: één relatie L
attr(L) = { k,a1, ..., an } ∪ { attr(S1) } ∪ ... ∪ { attr(Sm) } ∪ { t } en
PK(L) = k
• waarbij t duidt aan tot welke subklasse elk tupel behoort
• weggelaten als specialisatie predikaatgedefinieerd
• enkel voor disjuncte subklassen
• veel verschillende attributen in subklassen: veel nul
17
38. • Optie 8D: één relatie L
met attr(L) = { k, a1, ..., an } ∪ { attr(S1) } ∪ ... ∪ { attr(Sm) }
∪ { t1, t2, ..., tm } en PK(L) = k
• ti, 1≤ i ≤ m is boolean die aangeeft of entiteit in Si zit
18
39. • Optie 8D: één relatie L
met attr(L) = { k, a1, ..., an } ∪ { attr(S1) } ∪ ... ∪ { attr(Sm) }
∪ { t1, t2, ..., tm } en PK(L) = k
• ti, 1≤ i ≤ m is boolean die aangeeft of entiteit in Si zit
• gebruikt voor overlappende subklassen
18
40. • Optie 8D: één relatie L
met attr(L) = { k, a1, ..., an } ∪ { attr(S1) } ∪ ... ∪ { attr(Sm) }
∪ { t1, t2, ..., tm } en PK(L) = k
• ti, 1≤ i ≤ m is boolean die aangeeft of entiteit in Si zit
• gebruikt voor overlappende subklassen
• ook hier gevaar voor veel nulwaarden
18
41. • Optie 8D: één relatie L
met attr(L) = { k, a1, ..., an } ∪ { attr(S1) } ∪ ... ∪ { attr(Sm) }
∪ { t1, t2, ..., tm } en PK(L) = k
• ti, 1≤ i ≤ m is boolean die aangeeft of entiteit in Si zit
• gebruikt voor overlappende subklassen
• ook hier gevaar voor veel nulwaarden
18
42. • Optie 8D: één relatie L
met attr(L) = { k, a1, ..., an } ∪ { attr(S1) } ∪ ... ∪ { attr(Sm) }
∪ { t1, t2, ..., tm } en PK(L) = k
• ti, 1≤ i ≤ m is boolean die aangeeft of entiteit in Si zit
• gebruikt voor overlappende subklassen
• ook hier gevaar voor veel nulwaarden
18