1. gebruik van quantoren in
relationele calculus
dr. Katrien Verbert
Katrien.Verbert@cs.kuleuven.be
2. tupel relationele calculus
• Basisvorm: {t | formule(t)}
– t is een tupelvariabele en formule(t) een formule waarin
tupelvariable t voorkomt.
• Resultaat:
– Verzameling van alle tupels t waarvoor formule(t) waar is.
• Formule bestaat uit:
– atomen + logische connectoren + quantificatoren
2
4. formule
• wordt uitgedrukt in predicatenlogica
• maakt gebruik van
– variabelen
– constanten
– vergelijkingsoperatoren
=≠<>≥≤
– logische connectoren
¬∧∨⇔⇒
– quantificatie van variabelen: ∃ (er bestaat), ∀ (voor alle)
4
5. voorbeeld connector constante
• { t | EMPLOYEE(t) and t.SALARY > 50000 }
vergelijkingsoperator
variabele
5
6. quantoren
• Existentiële quantor: ∃ (er bestaat)
• Universele quantor: ∀ (voor alle)
• (∃t)(formule(t))
– er bestaat een tupel t die aan de conditie voldoet
– bv. (∃t)(EMPLOYEE(t) and t.fname=‘John’)
• (∀t)(formule(t))
– alle tuples in het universum voldoen aan de conditie
6
7. • Q_1
– Geef naam en adres van alle werknemers die voor het
'Research' departement werken
{ t.Fname, t.Lname, t.Address | EMPLOYEE(t)
AND (∃d) (DEPARTMENT(d)
AND d.Dname = 'Research’
AND d.Number = t.Dno) }
existentiële quantor: moet waar zijn voor tenminste één tuple
we vragen werknemers op waarvoor er een gerelateerd tupel in
de departement tabel bestaat met als naam ‘Research’
8. gebruik van universele quantoren
• (∀x) (P(x))
– waar als P(x) waar is voor elke x van het universum
– bv. (∀x) (x.color = “Rood”)
– betekent dat alles wat bestaat rood is
• logische implicatie
– (∀x) (Boot(x) ⇒ (x.color = “Rood”))
– (∀x) IF Boot(x) THEN (x.color = “Rood”)
– Als x een boot is, dan moet de kleur rood zijn
8
9. gebruik van universele quantoren
• ⇒ is een logische implicatie
– a ⇒ b betekent dat als a waar is, ook b waar moet zijn
– a ⇒ b is hetzelfde als ¬a ∨ b
• (∀x) (x.dnum=5 ⇒ F2)
• (∀x) IF x.dnum=5 THEN F2
• (∀x) (not (x.dnum=5) or F2)
– x.dnum=5: F2 moet waar zijn
9
10. gebruik van universele quantoren
• (∀x) (Boot(x) ⇒ (x.color = ‘Rood’))
• ⇒ is een logische implicatie
– als x een boot is, dan moet de kleur rood zijn
• (∀x) (¬Boot(x) ∨ x.color = ‘Rood’)
– X is geen boot: conditie is waar
– X is een boot: x.color=‘Rood’ moet waar zijn
10
11. – Q_3: Geef de namen van de werknemers die aan alle projecten
werken
{ e.Lname, e.Fname |
EMPLOYEE(e)
AND
( (∀x) ( NOT (PROJECT(x))
OR
( (∃w) ( WORKS_ON(w)
AND w.Essn = e.Ssn
AND x.Pnumber = w.Pno ) ) ) ) }
In woorden: als x een project is, dan moet er een
overeenkomsUg tupel in de works_on tabel bestaan.
11
12. { e.Lname, e.Fname |
EMPLOYEE(e)
AND
( (∀x) ( NOT (PROJECT(x))
OR
( (∃w) ( WORKS_ON(w)
AND w.Essn = e.Ssn
AND x.Pnumber = w.Pno ) ) ) ) }
– ( ∀ x ) ( F ) :
• moet voldaan zijn voor alle tuples in het universum die aan x kunnen
worden toegekend
– daarom:
• ( ∀ x ) ( not PROJECT ( x ) )
• alle tupels die niet tot PROJECT behoren uitsluiten van verdere
selectievoorwaarde
– verder moet dus gelden voor een employee e dat hij werkt op
elk project dat niet uitgesloten werd
12
13. • Q_6
– Geef de namen van alle werknemers zonder personen ten
laste:
{e.Fname, e.Lname |
EMPLOYEE(e) AND
( (∀ d) ( NOT (DEPENDENT(d)) OR NOT (e.Ssn = d.Essn) ) ) }
13