gebruik van quantoren in relationele calculus
DESCRIPTION
TRANSCRIPT
gebruik van quantoren in relationele calculus
dr. Katrien Verbert [email protected]
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
voorbeeld
• { t | EMPLOYEE(t) and t.SALARY > 50000 }
3
formule
• wordt uitgedrukt in predicatenlogica • maakt gebruik van
– variabelen – constanten – vergelijkingsoperatoren
= ≠ < > ≥ ≤ – logische connectoren
¬ ∧ ∨ ⇔ ⇒ – quantificatie van variabelen: ∃ (er bestaat), ∀ (voor alle)
4
voorbeeld
• { t | EMPLOYEE(t) and t.SALARY > 50000 }
5
connector
vergelijkingsoperator
constante
variabele
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
{ t.Fname, t.Lname, t.Address | EMPLOYEE(t) AND (∃d) (DEPARTMENT(d) AND d.Dname = 'Research’ AND d.Number = t.Dno) }
• Q_1 – Geef naam en adres van alle werknemers die voor het
'Research' departement werken
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’
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
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
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
{ 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.
– Q_3: Geef de namen van de werknemers die aan alle projecten werken
11
– ( ∀ 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
{ 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 ) ) ) ) }
12
{e.Fname, e.Lname | EMPLOYEE(e) AND ( (∀ d) ( NOT (DEPENDENT(d)) OR NOT (e.Ssn = d.Essn) ) ) }
• Q_6 – Geef de namen van alle werknemers zonder personen ten
laste:
13