20130214 les gb2

54
1 Gegevensbanken relationeel model Prof. Erik Duval 2012 - 2013

Upload: erik-duval

Post on 25-Jul-2015

4.563 views

Category:

Documents


0 download

TRANSCRIPT

1

Gegevensbankenrelationeel model

Prof. Erik Duval2012 - 2013

relationeel model?

• 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, aanpassingen4

“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.”

5

http://www.fang.ece.ufl.edu/reject.html

een relatie Rop de verzamelingen V1 , ... Vn

is een deelverzameling van de productverzameling V1×...× Vn :R ⊆ V1 × ... × Vn

rood

geel

groen

S

M

L

KLEUR MAAT

6

KLEUR MAATrood Srood Mrood Lgeel Mgeel L

groen M

7

8

9

• 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

(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

< (Leeftijd, 4), (Lengte, 104), (Gewicht, 17) >

of < (Leeftijd, Lengte, Gewicht), (4, 104, 17) >

of (4, 104, 17)

12

• tupels zijn niet geordend

• attributen zijn niet geordend

• behalve in notatie <w1, ..., wn>

• elk tupel komt max. 1 keer voor in een relatie

13

• éé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

• Q, R, S: relatienamen

• q, r, s: instanties

• t, u, v, w: tupels

• Andere notatie voor attribuut A van relatie R: R.A

15

r = {< 5, "Karel Goossens", "Naamsestraat", "108", 3000, "Leuven“ >,< 12, "Sofie Vandale", "Rijselstraat", "33", 8500, "Kortrijk“ >,< 34, "Frans Haerden", "Tiensestraat", "12", 3000, "Leuven” >}

t = <5,"Karel Goossens","Naamsestraat","108", 3001,"Leuven“>

t [ Nr , Naam ] = < 5, "Karel Goossens“ >

16

company

18

19

Beperkingen

• 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

• 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

23

• 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

• 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

• 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)

27

• domeinbeperkingen

• vb. uurloon > 0

• vb. leeftijd > 23 ⇒ uurloon > minimum_uurloon

dynamica-regels• Autorisatieregels

• mag deze gebruiker die actie uitvoeren?

• Coördinatieregels

• vb. NEGATIEF-SALDO: tupel toevoegen wanneer saldo<0

• Precondities / postcondities

• vb. geld afhalen van rekening kan enkel indien saldo > 0

• Overgangsregels

• beschrijven welke volgordes van extensies zijn toegestaan

• vb. enkel loonsverhogingen, geen -verlagingen29

• intra-relationele restricties

• intern binnen 1 relatie

• meestal gemakkelijker te controleren

• inter-relationele restricties

• verschillende relaties betrokken

• vb. salaris werknemer < salaris overste

• tendens

• steeds meer soorten restrictiesautomatisch laten controleren door DBMS

30

Aanpassen

• tupel toevoegen

• tupel weglaten

• tupel wijzigen

• integriteit moet gecontroleerd worden!

32

toevoegen

33

• 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

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 ingesteld34

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 controleren35

36

Thanks!

Questions?

http://erikduval.wordpress.com/@ErikDuval

37

(E)ER naar relationeel schema

• (E)ER schema afbeelden op relationele model?

• entiteitstypes(regulier, zwak)

• relatietypes(binaire of hogere graad)

• attributen(enkelvoudig, samengesteld, meerwaardig)

• restricties

• ER → relationeel

• EER → relationeel

38

39

EMPLOYEE

SexName

Ssn

Fname Minit Lname

Address

Bdate

Salary

DEPARTMENT

Number

LocationsName

PROJECT

Name

Number

LocationDEPENDENT

NameSex BirthDate

Relationship

WORKS_FOR

CONTROLS

MANAGES

StartDate

SUPERVISESHAS_DEP.

1N

11

1

N

supervisor supervisee1

N

1 NWORKS_ON

Hours

NM

1. voor elk regulier entiteitstype E:

• maak relatie R

• met alle enkelvoudige attributen van E

• kies één van sleutelattributen als primaire sleutel voor R

40

EMPLOYEE Fname, Minit, Lname, Ssn, Bdate, Address, Sex, Salary

DEPARTMENT Dname, Dnumber

PROJECT Pname, Pnumber, Plocation

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

41

DEPENDENT Essn, Dependent_Name, Sex, Bdate, Relationship

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

42

DEPARTMENT Dname, Dnumber, Mgr_ssn, Mgr_start_date

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

43

EMPLOYEEFname, Minit, Lname, Ssn, Bdate, Address, Sex, Salary,Super_ssn, Dno

PROJECT Pname, Pnumber, Plocation, Dnum

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

44

WORKS_ON Essn, Pno, Hours

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

45

DEPT_LOCATIONS Dnumber, Dlocation

46

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

ER model

• entiteitstype

• 1:1 of 1:N relationship type

• M:N relationship type

• n-aire relationship type

• enkelvoudig attribuut

• samengesteld attribuut

• meerwaardig attribuut

• value set

• sleutel attribuut48

relationeel model

• “entiteits” relatie

• verwijssleutel of relatie

• relatie met 2 verwijssleutels

• relatie met n verwijssleutels

• attribuut

• verzameling attributen

• relatie of verwijssleutel

• domein

• primaire sleutel

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

50

• 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

• Optie 8C: één relatie Lattr(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

• Optie 8D: één relatie Lmet 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

Vragen...?

54