4. • 1962: Codasyl development committee, 'An information
algebra’, CACM, 5, 4, apr 1962
• 1963: J. McCarthy, 'A basis for a mathematical theory of
computation', in Computer programming and formal
systems, Brafford & Hirschberg, eds, North-Holland, 1963
• 1968: D.L. Childs, 'Feasibility of a set-theoretical data-
structure. A general structure based on a reconstituted
definition of a relation', in Proc. IFIP congress 1968, North-
Holland, 1968
• 1970: E.F. Codd, 'A relational model of data for large scale
shared data banks', CACM, 13, 6, jun 1970
• … daarna: uitbreidingen, aanpassingen
4
5. “Adding together the lack of any real-world
example, performance experiment, and
implementation indication or detail, we are left
with an obscure exercise using unfamiliar
mathematics and of little or no practical
consequence. It can be safely rejected.”
http://www.fang.ece.ufl.edu/reject.html
5
6. een relatie R
op de verzamelingen V1 , ...Vn
is een deelverzameling van de productverzameling V1×...× Vn :
R ⊆ V1 × ... × Vn
KLEUR MAAT KLEUR MAAT
rood S rood S
rood M
rood L geel
M
geel M
geel L groen
L
groen M
6
10. • DOM( Ai ) = verzameling alle mogelijke waarden van Ai
• heeft een naam en een type
• enkelvoudig : waarden zijn atomair
• vb. Adres atomair we kunnen straatnaam niet isoleren
10
11. (n-)tupel over de attributen X = { A1, ..., An }
• T = { (A1,w1), ..., (An,wn) }
met
elke wi ∈ DOM ( Ai ) of wi = null
• korter genoteerd:
< (A1, ..., An ), ( w1, ..., wn )>
< w1, ..., wn >
indien geen verwarring mogelijk
• vb:
< 5, "Karel Goossens", "Naamsestraat", "108", 3000, "Leuven" >
11
13. • tupels zijn niet geordend
• attributen zijn niet geordend
• behalve in notatie <w1, ..., wn>
• elk tupel komt max. 1 keer voor in een relatie
13
14. • één atomaire waarde per attribuut
• geen meerwaardige attributen
• geen samengestelde attributen
• alternatief: genest relationeel model
• Null-waarde kan betekenen:
• attribuut is niet van toepassing
• waarde is onbekend
14
15. • Q, R, S:
relatienamen
• q, r, s:
instanties
• t, u, v, w:
tupels
• Andere notatie voor attribuut A van relatie R: R.A
15
21. • Domeinrestricties
• beperken de mogelijke waarden van attributen
• vb: leeftijd: geheel postief getal, tussen 18 en 65
• Sleutelrestricties
• waarden van sleutels moeten uniek zijn
• Algemene integriteitsrestricties
21
22. • relatieschema R(A1, ..., An), U = {A1, ..., An}
• supersleutel K ⊆ U :
• verzameling attributen die tupel van R ondubbelzinnig
bepalen (in om het even welke extensie)
• kandidaatsleutel K
• supersleutel K zonder overtollige attributen
(er bestaat geen supersleutel K' ⊂ K)
• samengestelde sleutel (meer dan 1 attribuut)
enkelvoudige sleutel (1 attribuut)
• primaire sleutel: gekozen uit kandidaatsleutels
• andere kandidaatsleutels zijn alternatieve sleutels
• conventie: primaire sleutel onderstrepen in schema
24. • Integriteit = juistheid en volledigheid van GB
• statica-regels: slaan op 1 toestand van GB
• gelden in elke extensie
• dynamica-regels: slaan op toestandsovergangen
• gelden voor elke overgang van 1 extensie naar andere
25. • attribuut-restricties
• 1 NV-eis: domein van een attribuuut is enkelvoudig
• entiteit-restricties
• tupel mag niet meer dan 1 keer voorkomen in extensie
• geen null-waarden in primaire sleutel
• referentiële integriteit
• Als tupel naar ander tupel verwijst, moet ander tupel
bestaan
• vb.VOLGT-relatie: geen nrs. van vakken die niet bestaan
26. • verzameling attributen FK van relatie R1 is verwijssleutel a.s.a.
• attributen van FK hebben zelfde domein als primaire
sleutelattributen PK van relatie R2
• elke waarde van FK in R1 komt voor als waarde van een
tupel in R2 of is null
• ∀ t1 ∈ R1 : t1[FK] is null of ∃ t2 ∈ R2 : t1[FK] = t2[PK]
• verwijssleutel kan naar eigen relatie verwijzen
• → recursieve relatie; bv. SUPERSSN
(overste van werknemer is ook werknemer)
33. toevoegen
• INSERT <4,"Jan Caers",nul,nul,3000,"Leuven“>
INTO STUDENT
• Studentnr 5 ipv 4 uniciteit van sleutel geschonden
• Studentnr nul regel sleutel niet nul geschonden
• INSERT < 5, 6 > INTO VOLGT :
• referentiële integriteit geschonden (cursus bestaat niet)
• reactie van DBMS op niet-toegelaten toevoeging:
• weigeren + reden voor weigering meedelen aan gebruiker
33
34. weglaten
• vb. DELETE VAK TUPLE WITH Vaknr = 8
• referentiële integriteit geschonden:
er zijn VOLGT tupels die verwijzen naar dat vak
• DBMS kan:
• weglating weigeren
• verwijzende tupels ook weglaten
• verwijzende waarden aanpassen (bv. nul)
• verschillend reageren in verschillende situaties
• door gebruiker ingesteld
34
35. wijzigen
• vb. MODIFY Titel OF VAK WITH Nr = 8 TO "Filosofie"
• weer gevaar voor
• referentiële integriteit,
• uniciteit van sleutel,
• ...
• wijziging van attribuut dat geen primaire of verwijssleutel is
• meestal geen probleem
• wijziging primaire sleutel: weglaten + toevoegen
• wijziging verwijssleutel: referentiële integriteit controleren
35
39. 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
39
40. 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
40
41. 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
41
42. 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
42
43. 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
43
44. 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
44
45. 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
45
47. 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
47
48. 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
48
49. 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
49
51. • 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
51
52. • 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
52
53. • 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
53