gebruik van quantoren in relationele calculus

  • 750 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
750
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
61
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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
  • 3. voorbeeld •  { t | EMPLOYEE(t) and t.SALARY > 50000 } 3
  • 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