de praktijk: praktijk: tabellen
ISO Het Relationele Database Model Prof. dr. Paul De Bra
een database bestaat uit een aantal tabellen z elke tabel heeft een naam en een aantal attributen z elk attribuut heeft een naam en een data type z een tabel-instantie heeft een aantal rijen vb: een instantie van de account tabel:
Gebaseerd op: Database System Concepts, 5th Ed. ©Silberschatz, Korth and Sudarshan Database System Concepts, 5th Ed., slide version 5.0, June 2005
de onderliggende theorie: theorie: relaties
2.3
©Silberschatz, Korth and Sudarshan
alternatieve voorstellingen Het maakt niet uit of we een tabel customer over de
Laat (attributen) D1, D2, …. Dn verzamelingen
voorstellen; een relatie r is een deelverzameling van D1 x D2 x … x Dn een relation een verzameling n-tuples (a1, a2, …, an) waarbij elke ai ∈ Di
attributen customer_name, customer_street en customer_city schrijven als r = { (Jones, Main, Harrison), (Smith, North, Rye), (Curry, North, Rye), (Lindsay, Park, Pittsfield) } of dat we hem tekenen als tabel.
attributes (or columns)
Voorbeeld:
customer_name = {Jones, Smith, Curry, Lindsay} customer_street = {Main, North, Park} customer_city = {Harrison, Rye, Pittsfield} r = { (Jones, Main, Harrison), (Smith, North, Rye), (Curry, North, Rye), (Lindsay, Park, Pittsfield) } is een relatie over customer_name x customer_street x customer_city Database System Concepts, 5th Ed., slide version 5.0, June 2005
2.4
©Silberschatz, Korth and Sudarshan
relatie schema en instantie schema = structuur: naam van de relatie,
attribuunamen en waardenverzameling een tabel attributes (or columns)
Jones Smith Curry Lindsay
Main North North Park
customer_city Harrison Rye Rye Pittsfield
tuples (or rows)
2.6
Main North North Park
customer_city Harrison Rye Rye Pittsfield
tuples (or rows)
customer
Database System Concepts, 5th Ed., slide version 5.0, June 2005
2.5
©Silberschatz, Korth and Sudarshan
rekenen met tabellen: tabellen: relationele algebra procedurele taal: we bepalen hoe een vraag 6 basisoperaties z selectie: σ z projectie: ∏ z vereniging: ∪ z verschil: – z Cartesisch product: x z
hernoeming: ρ
de operaties maken van 1 of 2 tabellen weer
een nieuwe tabel
customer
Database System Concepts, 5th Ed., slide version 5.0, June 2005
Jones Smith Curry Lindsay
moet worden beantwoord
instantie = verzameling tupels of rijen in
customer_name customer_street
customer_name customer_street
©Silberschatz, Korth and Sudarshan
Database System Concepts, 5th Ed., slide version 5.0, June 2005
2.7
©Silberschatz, Korth and Sudarshan
1
de selectie van rijen
betekenis van de selectie notatie: σ p(r)
Relation r
σA=B ^ D > 5 (r)
A
B
C
D
p is het selectie predicaat, r is een relatie (schema)
α
α
1
7
de selectie betekent in de verzamelingenleer dat voor
α
β
5
7
β
β
12
3
β
β
23 10
A
B
C
D
α
α
1
7
β
β
23 10
Database System Concepts, 5th Ed., slide version 5.0, June 2005
2.8
elke instance r :
σp(r) = {t | t ∈ r and p(t)} p is een logische formule met termen verbonden door: ∧ (en), ∨ (of), ¬ (niet) en elke term is :
operatie of waarbij operatie =, ≠, >, ≥. < of ≤ is vb: σ branch_name=“Perryridge”(account) ©Silberschatz, Korth and Sudarshan
de projectie (of selectie van kolommen) kolommen) tabel r:
∏A,C (r)
A
B
C
α
10
1
α
20
1
β
30
1
β
40
2
Database System Concepts, 5th Ed., slide version 5.0, June 2005
2.9
©Silberschatz, Korth and Sudarshan
betekenis van de projectie notatie:
∏
A1 , A2 ,K, Ak
(r )
waarbij A1,…, Ak attributen zijn en r een relatie voor elke instantie r geldt dat
∏
A1 , A2 ,K, Ak
(r )
= { t | ∃ s ∈ r, ∀ i ∈ { 1,…,k } t(Ai) = s(Ai) } Vb: als account een relatie is met de attributen
A
C
A
C
α
1
α
1
α
1
β
1
β
1
β
2
β
2
=
Database System Concepts, 5th Ed., slide version 5.0, June 2005
2.10
account_number, branch_name, balance dan verwijderen we het branch_name attribute met : ∏account_number, balance (account)
©Silberschatz, Korth and Sudarshan
volgorde van bewerkingen is belangrijk wat is er mis met de volgende query om het
rekeningnummer en saldo te verkrijgen van de rekeningen geopend in filiaal Perryridge? σbranch_name=“Perryridge”(Π account_number, balance (account) ) de collecte uitwerking is: Πaccount_number, balance(σbranch_name=“Perryridge”(account) ) selectie en projectie mogen soms wel
verwisseld worden: σbalance > 10000(Π account_number, balance (account) ) of Πaccount_number, balance(σbalance > 10000(account) ) Database System Concepts, 5th Ed., slide version 5.0, June 2005
2.12
©Silberschatz, Korth and Sudarshan
Database System Concepts, 5th Ed., slide version 5.0, June 2005
2.11
©Silberschatz, Korth and Sudarshan
de hernoeming operatie wordt gebruikt om attribuutnamen te
veranderen (terwijl de inhoud van de tabel ongewijzigd blijft) laat ook toe om naar een hele tabel te
verwijzen onder een andere naam. voorbeeld:
ρ x (E) noemt het resultaat van E
om tot X; ρ x(A1, …, An) (E) noemt het resultaat van een uitdrukking E met n attributen om tot X, met attributen A1, …, An.
Database System Concepts, 5th Ed., slide version 5.0, June 2005
2.13
©Silberschatz, Korth and Sudarshan
2
de vereniging (unie) unie) tabellen r, s:
betekenis van de vereniging
A
B
A
B
notatie: r ∪ s
α
1
α
2
betekenis:
α
2
β
3
β
1
r ∪ s = {t | t ∈ r of t ∈ s}
voorwaarden om r ∪ s te mogen gebruiken:
s
r
1. r, s moeten evenveel attributen hebben
r ∪ s:
A
B
α
1
α
2
β
1
β
3
Database System Concepts, 5th Ed., slide version 5.0, June 2005
2. de overeenkomstige attributen moeten dezelfde waardenverzamelingen hebben. 3. bij verschillende attribuutnamen: hernoeming vb: geef alle klanten met een rekening of lening: ∏customer_name(depositor) ∪ ∏customer_name(borrower)
2.14
©Silberschatz, Korth and Sudarshan
de verschil operatie tabellen r, s:
A
B
A
B
α
1
α
2
α
2
β
β
1
B
α
1
β
1
©Silberschatz, Korth and Sudarshan
notatie: r – s betekenis:
r – s = {t | t ∈ r en t ∉ s}
3
voorwaarden om r – s te mogen gebruiken:
s
A
2.15
betekenis van het verschil
1. r, s moeten evenveel attributen hebben 2. de overeenkomstige attributen moeten dezelfde waardenverzamelingen hebben. 3. bij verschillende attribuutnamen: hernoeming
r r – s:
Database System Concepts, 5th Ed., slide version 5.0, June 2005
vb: geef alle klanten die een rekening hebben
maar geen lening: ∏customer_name(depositor) – ∏customer_name(borrower) Database System Concepts, 5th Ed., slide version 5.0, June 2005
2.16
©Silberschatz, Korth and Sudarshan
extraatje: extraatje: de doorsnede tabellen r, s:
A
B
A
B 2
α
1
α
α
2
β
β
1
2.17
©Silberschatz, Korth and Sudarshan
betekenis van de doorsnede notatie: r ∩ s betekenis:
r ∩ s = r – (r – s)
3
voorwaarden om r ∩ s te mogen gebruiken zijn
s
r r ∩ s:
Database System Concepts, 5th Ed., slide version 5.0, June 2005
uiteraard dezelfde als voor het verschil vb: geef alle klanten die een rekening en een A
B
α
2
lening hebben: ∏customer_name(depositor) ∩ ∏customer_name(borrower)
de doorsnede is niet nodig (wordt uitgedrukt
door tweemaal een verschil) maar wel handig Database System Concepts, 5th Ed., slide version 5.0, June 2005
2.18
©Silberschatz, Korth and Sudarshan
Database System Concepts, 5th Ed., slide version 5.0, June 2005
2.19
©Silberschatz, Korth and Sudarshan
3
het cartesisch (cartesiaans) cartesiaans) product tabellen r, s:
A
B
C
D
E
α
1
β
2
α β β γ
10 10 20 10
a a b b
r
notatie: r x s betekenis:
r x s = {t q | t ∈ r en q ∈ s} als r en s gelijknamige attributen hebben dan
s
r x s: A
B
C
D
E
α α α α β β β β
1 1 1 1 2 2 2 2
α β β γ α β β γ
10 10 20 10 10 10 20 10
a a b b a a b b
Database System Concepts, 5th Ed., slide version 5.0, June 2005
2.20
betekenis van het cartesisch product
moeten we ze hernoemen we gebruiken vaak een standaard
hernoeming met behulp van de tabelnaam: als r attributen A, B heeft en s attributen A, C dan gebruiken we vaak r x s als een tabel met attributen r.A, r.B, s.A, s.C. ©Silberschatz, Korth and Sudarshan
Database System Concepts, 5th Ed., slide version 5.0, June 2005
het bank voorbeeld
depositor (customer_name, account_number) borrower (customer_name, loan_number)
2.22
©Silberschatz, Korth and Sudarshan
voorbeelden rekening of lening hebben bij de bank (of allebei, want “of” heeft die betekenis) ∏customer_name (borrower) ∪ ∏customer_name (depositor)
geef de namen van de klanten die een
rekening en een lening hebben bij de bank ∏customer_name (borrower) ∩ ∏customer_name (depositor)
2.24
geef alle leningen met een bedrag van meer
dan 1200
σamount > 1200 (loan) geef het leningnummer van alle leningen met
een bedrag van meer dan 1200
∏loan_number (σamount > 1200 (loan))
Database System Concepts, 5th Ed., slide version 5.0, June 2005
2.23
©Silberschatz, Korth and Sudarshan
moeilijkere voorbeelden
geef de namen van de klanten die een
Database System Concepts, 5th Ed., slide version 5.0, June 2005
©Silberschatz, Korth and Sudarshan
voorbeeldvoorbeeld-vragen
branch (branch_name, branch_city, assets) customer (customer_name, customer_street, customer_city) account (account_number, branch_name, balance) loan (loan_number, branch_name, amount)
Database System Concepts, 5th Ed., slide version 5.0, June 2005
2.21
©Silberschatz, Korth and Sudarshan
geef de namen van alle klanten die een lening hebben
bij het filiaal “Perryridge” ∏customer_name (σbranch_name=“Perryridge” (σborrower.loan_number = loan.loan_number(borrower x loan))) geef de namen van alle klanten die een lening
hebben bij het filiaal “Perryridge” maar die geen rekening hebben bij (eender welk filiaal van) de ∏customer_name (σbranch_name = “Perryridge”
(σborrower.loan_number = loan.loan_number(borrower x loan))) – ∏customer_name(depositor) Database System Concepts, 5th Ed., slide version 5.0, June 2005
2.25
©Silberschatz, Korth and Sudarshan
4
verschillende correcte uitwerkingen geef de namen van alle klanten die een lening
geef het hoogste saldo dat voorkomt in de bank. z
hebben bij het filiaal “Perryridge” z
moeilijke “truuk” truuk” vragen
zoek
Query 1
eerst de saldi die niet het hoogste zijn (er is een hoger)
– hernoem account zodat we paren van saldi met elkaar kunnen vergelijken
∏customer_name (σbranch_name = “Perryridge” (
gebruik
de verschil operatie om het saldo te vinden dat niet voorkomt in de vorige verzameling saldi.
σborrower.loan_number = loan.loan_number (borrower x loan))) z
z
strategie:
de query wordt dan:
Query 2 ∏balance(account) - ∏account.balance
∏customer_name(σloan.loan_number = borrower.loan_number (
(σaccount.balance < d.balance (account x ρd (account)))
(σbranch_name = “Perryridge” (loan)) x borrower))
Database System Concepts, 5th Ed., slide version 5.0, June 2005
2.26
©Silberschatz, Korth and Sudarshan
Database System Concepts, 5th Ed., slide version 5.0, June 2005
sleutels (een tabel instance is een verzameling). een database kan zo ontworpen worden dat
ook sommige deelrijen (projectie op attributen) altijd uniek zijn: z
supersleutel: deelrijen zijn uniek
z
kandidaat sleutel: deelrijen zijn uniek en nog kleinere deelrijen zijn dat niet
z
primaire sleutel: een door de ontwerper uitgekozen kandidaat sleutel
2.28
©Silberschatz, Korth and Sudarshan
opgaven
tupels (rijen) in een tabel zijn altijd uniek
Database System Concepts, 5th Ed., slide version 5.0, June 2005
2.27
©Silberschatz, Korth and Sudarshan
opgave 2.1 met meer vragen dan in het boek:
de database bestaat uit volgende tabellen: employee (person_name, street, city)
works (person_name, company_name, salary) company (company_name, city) manages (person_name, manager_name) de sleutels hebben hierbij belang!
Database System Concepts, 5th Ed., slide version 5.0, June 2005
2.29
©Silberschatz, Korth and Sudarshan
opgaven
opgaven
Stel volgende vragen in de relationele algebra:
Stel volgende vragen in de relationele algebra:
1.
geef de namen van alle bedienden die wonen in Eindhoven
6.
geef de namen van de bedienden die meer verdienen dan hun manager
2.
geef de namen van alle bedienden die niet in Eindhoven wonen
7.
geef de naam van de bedrijven die gevestigd zijn in een stad waar nog een ander bedrijf gevestigd is
3.
geef de namen van alle bedienden die zichzelf als manager hebben
8.
geef de namen van alle bedienden die wonen in de stad waar ze werken
4.
geef de naam van de managers met een salaris van meer dan 100.000
9.
geef de namen van alle bedienden die wonen in een andere stad dan hun manager
5.
geef de naam van de bedienden met een manager met een salaris van meer dan 100.000
10.
geef de naam van de bedrijven die gevestigd zijn in een stad waar geen enkele bediende van dat bedrijf woont
Database System Concepts, 5th Ed., slide version 5.0, June 2005
2.30
©Silberschatz, Korth and Sudarshan
Database System Concepts, 5th Ed., slide version 5.0, June 2005
2.31
©Silberschatz, Korth and Sudarshan
5
opgaven
opgaven
Stel volgende vragen in de relationele algebra: 11.
geef de naam van bedienden wiens manager voor een ander bedrijf werkt dan zij zelf
12.
geef de namen van de bedrijven die werknemers hebben die in Eindhoven wonen geef de namen van de bedrijven die geen werknemers hebben die in Eindhoven wonen
13. 14.
geef de naam van de bediende met het hoogste salaris
15.
geef de naam van de manager met het hoogste salaris
Database System Concepts, 5th Ed., slide version 5.0, June 2005
2.32
©Silberschatz, Korth and Sudarshan
Wat betekenen de volgende vragen? 1.
Πcity(company) − Πcity(employee)
2.
Πcompany.city(company) − Πcompany.city( σemployee.person_name = works.person_name ∧
works.company_name = company.company_name ∧ employee.city = company.city
(employee × works × company) ) 3.
Πm.person_name( σ works.salary < m.salary ∧ works.person_name = manages.person_name ∧ m.person_name = manages.manager_name
(works × manages × ρm(works) ) )
Database System Concepts, 5th Ed., slide version 5.0, June 2005
2.33
©Silberschatz, Korth and Sudarshan
extraatje: extraatje: de join operatie Vaak voorkomende operatie: neem relaties
r(a,b) en s(a,c) en stel de volgende vraag: Geef de b’s van de r-en waarvoor er een s is met c = “blah”. Dit wordt:
Πb( σr.a = s.a ∧ s.c = “blah” (r × s) ) Er is een handige “afkorting”: de join of ZY:
r ZY s = Πr.a, r.b, s.c( σr.a = s.a (r × s) ) Dus de “blah” query wordt:
Πb( σs.c = “blah” (r ZY s) ) Database System Concepts, 5th Ed., slide version 5.0, June 2005
2.34
©Silberschatz, Korth and Sudarshan
6