gebruik van quantoren in relationele calculus

13
gebruik van quantoren in relationele calculus dr. Katrien Verbert [email protected]

description

 

Transcript of gebruik van quantoren in relationele calculus

Page 1: gebruik van quantoren in relationele calculus

gebruik van quantoren in relationele calculus

dr. Katrien Verbert [email protected]

Page 2: gebruik van quantoren in relationele calculus

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

Page 3: gebruik van quantoren in relationele calculus

voorbeeld

•  { t | EMPLOYEE(t) and t.SALARY > 50000 }

3

Page 4: gebruik van quantoren in relationele calculus

formule

•  wordt uitgedrukt in predicatenlogica •  maakt gebruik van

–  variabelen –  constanten –  vergelijkingsoperatoren

= ≠ < > ≥ ≤ –  logische connectoren

¬ ∧ ∨ ⇔ ⇒ –  quantificatie van variabelen: ∃ (er bestaat), ∀ (voor alle)

4

Page 5: gebruik van quantoren in relationele calculus

voorbeeld

•  { t | EMPLOYEE(t) and t.SALARY > 50000 }

5

connector

vergelijkingsoperator

constante

variabele

Page 6: gebruik van quantoren in relationele calculus

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

Page 7: gebruik van quantoren in relationele calculus

{ 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’

Page 8: gebruik van quantoren in relationele calculus

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

Page 9: gebruik van quantoren in relationele calculus

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

Page 10: gebruik van quantoren in relationele calculus

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

Page 11: gebruik van quantoren in relationele calculus

{ 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

Page 12: gebruik van quantoren in relationele calculus

–  ( ∀ 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

Page 13: gebruik van quantoren in relationele calculus

{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