2. inhoud deze les
• Relationele algebra
• (E)ER naar relationeel schema
2
3. relationele model: herhaling terminologie
• relatie: een tabel met kolommen en rijen
• attribuut: een kolom van een relatie
• tupel: een rij van een relatie.
• domein: verzameling van toegelaten waarden voor 1 of
meerdere attributen. Voorbeelden zijn “integers”,
“strings”, “datum”, …
3
9. selectie
σ<selectiecriterium>(R)
• selecteert een aantal tupels uit een extensie (= rijen uit een tabel)
• resultaat:
– een relatie (tabel) met zelfde tupelschema
– deelverzameling van de oorspronkelijke extensie
• selectiecriterium F = (logische) formule
– enkelvoudige formules: =, ≠, <, >, <=, >=
– meervoudige formules: logische operatoren ∧, ∨, ¬
De
selec'e
van
tupels
uit
extensie
r
van
rela'e
R
onder
formule
F
is
de
verzameling
van
alle
tupels
uit
r
die
voldoen
aan
F:
σF(r)
=
{t
|
t
∈
r
∧
t
voldoet
aan
F}
9
15. projectie
π <attributenlijst>(R)
– doel: een aantal kolommen uit een tabel halen
– resultaat:
• verzameling tuples
• met attributen deelverzameling van attributen van oorspronkelijke tupels
• verbonden met deelverzameling X van het tupelschema
De
projec'e
van
een
extensie
r
van
rela'e
R
op
een
aAributenverzameling
X
is
πX(r)
=
{
t
|
tupelschema
van
t
is
X
en
∃
t’
∈
r
:
t
⊆
t’
}
15
16. eigenschappen van projectie
• # π X ( r ) ≤ # r
– reden: dubbels worden verwijderd
– # πX(r) = # r indien X een sleutel bevat
• πX (πY ( r ) ) enkel gedefinieerd indien X ⊆ Y
– dus niet commutatief !!
• Idempotent
– enkel allerlaatste (buitenste) projectie moet uitgevoerd worden :
– πX1 ( πX2 (… ( r ) )...) = πX1 ( r )
16
17. samenstelling van uitdrukkingen
• samenstelling in 1 nieuwe uitdrukking
– vb. πFNAME, LNAME, SALARY ( σDNO = 5 ( EMPLOYEE ) )
• opeenvolgende berekeningen met expliciete benoeming van
tussenresultaten
– DEP5_EMPS ← σDNO=5 ( EMPLOYEE )
– RESULT ← πFNAME, LNAME, SALARY (DEP5_EMPS)
• selectie en projectie commuteren indien de attributen in het
selectiecriterium behoren tot de attributen waarop wordt
geprojecteerd
– πX (σ F ( r ) ) = σF ( πX ( r ) ) indien F enkel attributen in X gebruikt
19. Find names of sailors who are younger
than 50
sid bid day
Reserves 22 101 10/10/96 Syntax
58 103 11/12/96
selec'e:
σ<criterium>(R)
sid sname rating age projec'e:
π<aAributen>(R)
Sailors 22 dustin 7 45.0
31 lubber 8 55.5
58 rusty 10 35.0
Boats bid bname color
101 Interlake Blue
102 Interlake Red
103 Clipper Green
104 Marine Red
20. Find names of sailors who are younger
than 50
sid bid day
Reserves 22 101 10/10/96 Oplossing
58 103 11/12/96
πsname(σage<50(Sailors))
sid sname rating age
Sailors 22 dustin 7 45.0
31 lubber 8 55.5
58 rusty 10 35.0
Boats bid bname color
101 Interlake Blue
102 Interlake Red
103 Clipper Green
104 Marine Red
21. hernoeming
– doel: wijziging van attribuutnamen
– notatie: nieuwe namen tussen haakjes vermeld
– voorbeeld:
RESULT(Firstname, Lastname, Salary)
← πFNAME, LNAME, SALARY (DEP5_EMPS)
– hernoeming kan ook met een (unaire) operator ρ voorgesteld worden
1. ρ S(B1, B2,…, Bn) (R) relatie en attributen worden hernoemd
2. ρ S (R) alleen relatie wordt hernoemd
3. ρ (B1, B2,…, Bn) (R) alleen attributen worden hernoemd
21
22. (a) π FNAME, LNAME, SALARY (σ DNO = 5 (EMPLOYEE ) )
(b) zelfde met tussenresultaat en hernoeming van attributen
23. Unie ∪, doorsnede ∩, verschil
– enkel toegelaten op vergelijkbare ("union compatible") relaties
– definitie
2 relaties R( A1,...,An) en S (B1,...,Bm) zijn vergelijkbaar
als en slechts als
m=n (d.w.z. R en S hebben dezelfde graad)
DOM (Ai) = DOM (Bi) voor 1 ≤ i ≤ n
– schema-behoudend, op attribuutnamen na
• afspraak: behoud attribuutnamen van 1-ste relatie
23
26. Cartesisch product
• Zij gegeven de relaties
– R ( A1,...,An )
– S ( B1,...,Bm )
– die niet noodzakelijk vergelijkbaar zijn
• Q = R × S
– heeft schema Q(A1,...,An,B1,...,Bm)
– en bevat elke combinatie van tupels uit R en S
26
29. join operator
• binaire operator
– combineert gerelateerde tupels van 2 relaties
• = cartesisch product + selectie
• notatie
R wvF S
– met F een selectiecriterium
• voorbeeld
– ACTUAL_DEPENDENTS ← EMPNAMES wvSSN=ESSN DEPENDENT
29
30. join operator
– voorbeeld: combineer voor alle departementen informatie over
het departement + de manager ervan:
DEPARTMENT wv MGRSSN = SSN EMPLOYEE
De
join
van
R
en
S
volgens
criterium
F
is
R
wv
F
S
=
σF
(
R
×
S
)
30
31. soorten joins
• Opdeling naargelang van de vorm van de join-voorwaarde F
– F = C1 ∧ C2 ∧ … ∧ Cn
• theta-join: elke Ck is van de vorm Ai θ Bj met
– θ ∈ { =, <, >, ≤, ≥, ≠ }
– DOM (Ai) = DOM (Bj)
• speciale gevallen
– equi-join: enkel " = "
– natuurlijke join
• equi-join + weglaten van overtollige attributen
(d.w.z. per voorwaarde Ai = Bj enkel Ai of Bj behouden)
• notatie: R ÚF S
31
32. vereenvoudigde notaties voor natuurlijke joins
• R Ú X,Y S
– met X en Y lijsten van attributen
– alle attribuutwaarden moeten aan elkaar gelijk zijn
• R Ú S
– lijsten X en Y zijn impliciet: bevatten alle attributen
die dezelfde naam hebben in R en S
32
38. fundamentele operatoren
• de verzameling operatoren {σ, π, ∪, , ×} is volledig:
– andere operatoren kunnen op basis van deze gedefinieerd worden.
– vandaar de naam: fundamentele operatoren.
• niet-fundamentele operatoren:
– join combinatie van σ, π, ×
– ∩ R∩S=R∪S(RS)(SR)
– ...
– zijn niet strikt nodig
– wel gemakkelijk
• nog een niet-fundamentele operator:
– de deling ÷
38
39. deling
• Q = R ÷ S
– ≈ inverse van cartesisch product
• ⇔ Q is de maximale relatie waarvoor geldt dat Q × S ⊆ R
• Q bevat enkel de attributen van R die niet in S zitten
– voorbeeld: "geef alle werknemers die werken aan elk project
waaraan John Smith werkt”
SMITH ← σ FNAME = ‘John’ AND LNAME = ‘Smith’ ( EMPLOYEE )
geeft EMPLOYEE-tupel ‘John Smith’
SMITH_PNOS ← π PNO ( WORKS_ON wv ESSN = SSN SMITH )
geeft alle projecten waaraan John Smith werkt
SSN_PNOS ← π ESSN, PNO ( WORKS_ON )
geeft voor alle werknemers alle projecten waaraan ze werken
SSNS(SSN) ← SSN_PNOS ÷ SMITH_PNOS
39
deling geeft SSN's van gevraagde werknemers
42. oefening: find the names of sailors who
have reserved all boats
sid bid day
Reserves 22 101 10/10/96 Syntax
58 103 11/12/96
selectie: σ<criterium>(R)
sid sname rating age projectie: π<attributen>(R)
join: R wvF S
Sailors 22 dustin 7 45.0 natural join: R*S
deling=R÷S
31 lubber 8 55.5
58 rusty 10 35.0
Boats bid bname color
101 Interlake Blue
102 Interlake Red
103 Clipper Green
104 Marine Red
43. Find the names of sailors who have
reserved all boats
Tempsids $
"#
# (Reserves) / $ (Boats)
sid,bid bid
!
! sname (Tempsids*Sailors)
44. aggregaatfuncties
• functies die op verzamelingen waarden uitgevoerd worden
– SUM, AVERAGE, MAX, MIN, COUNT
• notatie
groepering ℑ functies (R)
• groepering = verz. attributen op basis waarvan groepering gebeurt
• functies = lijst van koppels ( functie, attribuut )
• voorbeeld:
Dno ℑ AVERAGE Salary ( EMPLOYEE )
44
45. aggregaatfuncties
• resultaat: tabel met als attributen
– attributen uit de groepering
– attributen met naam “Functie_attribuut” die het resultaat van de
functie op dat attribuut geven
• voorbeeld:
– Dno ℑ COUNT Ssn, AVERAGE Salary ( EMPLOYEE )
– geeft tabel met attributen: Dno, Count_ssn, Average_salary
• groeperingsattributen kunnen weggelaten worden
– → aggregaatfunctie toegepast op de hele relatie
resultaat: 1 tupel
45
46. (a)
R
(
Dno,
No_of_employees,
Average_sal
)
←
Dno
ℑ COUNT
Ssn,
AVERAGE
Salary
(EMPLOYEE
)
(b)
Dno
ℑ COUNT
Ssn,
AVERAGE
Salary
(EMPLOYEE
)
(c)
ℑ COUNT
Ssn,
AVERAGE
Salary
(EMPLOYEE
)
47. recursieve sluiting
• vb. 1
– vind alle ondergeschikten van persoon Y
– = transitieve sluiting van ” X heeft Y als chef "
• vb. 2
– in een stamboom-databank van honden:
– vind alle voorouders van “zwerver”
• niet algemeen uit te drukken in relationele algebra
– wel voor bepaald aantal niveaus, bv. vind alle ouders, vind alle
grootouders, ...
– relationele uitdrukking groeit per niveau dat erbij komt
– onbeperkt aantal niveaus zou oneindige uitdrukking geven
47
49. uitwendige join
• gewone joins, bv. R * S,
– leveren over de tupels die niet aan de join voorwaarde voldoen
geen enkele informatie op
– vb.
• lijst van alle werknemers + als ze een departement leiden: naam van dat
departement
• join geeft enkel werknemers die effectief een departement leiden
• linkse uitwendige join
– levert info over alle werknemers
– + info over het departement dat ze leiden, of nul als ze geen
departement leiden
• analoog:
– rechtse uitwendige join
– volledige uitwendige join
49
51. varianten op unie
• Vereniging van tupels van niet vergelijkbare relaties
+
• Uitwendige unie: ∪+
+
– Notatie : Q = R ∪ S +
– Attr (Q) = Attr (R) ∪ Attr (S)
– nulwaarde voor attributen die niet van toepassing zijn
-
∪-
-
• Inwendige unie:
– Notatie : Q = R ∪ - S
– Attr(Q) = Attr(R) ∪ - Attr(S)
• ( alleen gemeenschappelijke attributen blijven behouden )
51
52. voorbeelden van queries
– Q 1:
• Retrieve the name and address of all employees who work for the
‘Research’ department
RESEARCH_DEPT ← σ DNAME = Research ( DEPARTMENT )
RESEARCH_EMPS ← ( RESEARCH_DEPT wv Dnumber = Dno EMPLOYEE )
RESULT ← π Fname, Lname, Address ( RESEARCH_EMPS )
52
53. voorbeelden van queries
– Q 3:
• Find the names of employees who work on all the projects controlled by
department number 5
DEPT5_PROJS ( Pno ) ← π Pnumber (σ Dnum = 5 ( PROJECT ) )
EMP_PROJ ( Ssn, Pno ) ← π Essn, Pno ( WORKS_ON )
RESULT_EMP_SSNS ← EMP_PROJ ÷ DEPT5_PROJS
RESULT ← π Lname, Fname ( RESULT_EMP_SSNS Ú EMPLOYEE )
53
54. voorbeelden van queries
– Q 4:
• Make a list of projects that involve an employee whose last name is ‘Smith’,
either as a worker or as a manager of the department that controls the project
SMITHS (Essn) ← π SSN (σ Lname = Smith ( EMPLOYEE ) )
SMITH_WORKER_PROJ ← π Pno ( WORKS_ON Ú SMITHS )
MGRS ← π Lname, Dnumber (EMPLOYEE wv Ssn = Mgr_ssn DEPARTMENT)
SMITH_MANAGED_DEPTS (Dnum) ← π Dnumber (σ Lname = Smith (MGRS) )
SMITH_MGR_PROJS (Pno) ←
π Pnumber ( SMITH_MANAGED_DEPTS Ú PROJECT )
RESULT ← (SMITH_WORKER_PROJ ∪ SMITH_MGR_PROJS )
54
55. voorbeelden van queries
• Q 5:
– List the names of all employees with two or more dependents
T1 (Ssn, No_of_dependents) ← EssnFCOUNT Dependent_name (DEPENDENT)
T2 ← σ No_of_dependents ≥ 2 ( T1 )
RESULT ← π Lname, Fname ( T2 Ú EMPLOYEE )
55
56. voorbeelden van queries
• Q 6:
– Retrieve the names of employees who have no dependents
ALL_EMPS ← π Ssn ( EMPLOYEE )
EMPS_WITH_DEPS ( Ssn ) ← π Essn ( DEPENDENT )
EMPS_WITHOUT_DEPS ← ALL_EMPS EMPS_WITH_DEPS
RESULT ← π Lname, Fname ( EMPS_WITHOUT_DEPS Ú EMPLOYEE )
56
57. voorbeelden van queries
– Q 7:
• List the names of managers who have at least one
dependent
MGS ( Ssn ) ← π Mgr_ssn ( DEPARTMENT )
EMPS_WITH_DEPS ( Ssn ) ← π Essn ( DEPENDENT )
MGRS_WITH_DEPS ← MGRS ∩ EMPS_WITH_DEPS
RESULT ← π Lname, Fname ( MGRS_WITH_DEPS Ú EMPLOYEE )
57