relationele algebra en relationele calculus

  • 2,479 views
Uploaded on

 

More in: Education , 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
2,479
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
218
Comments
0
Likes
2

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. relationele algebra en relationele calculus dr. Katrien Verbert Katrien.Verbert@cs.kuleuven.be
  • 2. inleiding leerstof 1.  relationele algebra en relationele calculus 2.  SQL 3.  vervolg SQL en extra voorbeeld 4.  demo Access + JDBC 5.  PHP 6.  functionele afhankelijkheden en normalisatie 2
  • 3. inhoud deze les •  Relationele algebra •  Relationele calculus –  Tupel relationele calculus –  Domein relationele calculus •  Query By Example (QBE) 3
  • 4. relationele vraagtalen •  vraagtaal (query language) = gegevensmanipulatietaal •  biedt functionaliteit voor –  opvragen –  toevoegen –  verwijderen –  wijzigen van gegevens 4
  • 5. indeling van relationele vraagtalen •  Algebraïsche talen •  Calculustalen –  steunen op relationele algebra –  steunen op relationele calculus –  gebruiken operatoren –  gebruiken formele beschrijving van gewenste info –  proceduraal •  predikatenlogica –  niet-proceduraal –  2 soorten: •  tupel-calculus, •  domein-calculus 5
  • 6. relationele algebra •  verzamelingsoperatoren –  unie, doorsnede, verschil, cartesisch product •  relationele operatoren –  selectie, projectie, join, deling, hernoeming •  unaire of binaire operatoren 6
  • 7. selectie 7
  • 8. selectie σ<selectiecriterium>(R) •  selecteert een aantal tupels uit een extensie (= rijen uit een tabel) •  resultaat: –  een relatie (tabel) met zelfde tupelschema –  deelverzameling van de oorspronkelijke extensie •  selectiecriterium F = (logische) formule –  enkelvoudige formules: =, ≠, <, >, <=, >= –  meervoudige formules: logische operatoren ∧, ∨, ¬ De selec'e van tupels uit extensie r van rela'e R onder formule F  is de verzameling van alle tupels uit r die voldoen aan F:  σF(r) = {t | t ∈ r ∧ t voldoet aan F}  8
  • 9. voorbeelden •  σDNO=4 (EMPLOYEE) •  σSALARY > 30000 (EMPLOYEE) •  σ (DNO = 4 ∧ SALARY > 25000) v (DNO = 5 ∧ SALARY > 30000)(EMPLOYEE) 9
  • 10. eigenschappen van selectie •  behoudt het schema •  σ(r) ⊆ r; dus kardinaliteit stijgt niet: #(σ(r)) ≤ #r •  samenstelling van selecties is commutatief –  volgt uit commutativiteit van "en": •  σF (σG ( r ) ) = σ F( { t ∈ r | t voldoet aan G } ) •  = { t ∈ { t' ∈ r | t' voldoet aan G } | t voldoet aan F } •  = { t ∈ r | t voldoet aan F en G } =σF∧G(r) •  = { t ∈ r | t voldoet aan G en F } •  = σ G ( { t ∈ r | t voldoet aan F } ) •  = σ G (σ F ( r ) ) –  gevolg: •  σ C1 (σ C2 (… (σ Cn ( r ) ) )...) = σ C1 ∧ C2 ∧... ∧ Cn ( r ) 10
  • 11. projectie 11
  • 12. projectie π <attributenlijst>(R) –  doel: een aantal kolommen uit een tabel halen –  resultaat: •  verzameling tuples •  met attributen deelverzameling van attributen van oorspronkelijke tupels •  verbonden met deelverzameling X van het tupelschema De projec'e van een extensie r van rela'e R op een   aAributenverzameling X is  πX(r) = { t | tupelschema van t is X en ∃ t’ ∈ r : t ⊆ t’ }  12
  • 13. eigenschappen van projectie •  # π X ( r ) ≤ # r –  reden: dubbels worden verwijderd –  # πX(r) = # r indien X een sleutel bevat •  πX (πY ( r ) ) enkel gedefinieerd indien X ⊆ Y –  dus niet commutatief !! •  Idempotent –  enkel allerlaatste (buitenste) projectie moet uitgevoerd worden : –  πX1 ( πX2 (… ( r ) )...) = πX1 ( r ) 13
  • 14. samenstelling van uitdrukkingen –  samenstelling in 1 nieuwe uitdrukking •  vb. πFNAME, LNAME, SALARY ( σDNO = 5 ( EMPLOYEE ) ) –  opeenvolgende berekeningen met expliciete benoeming van tussenresultaten •  DEP5_EMPS ← σDNO=5 ( EMPLOYEE ) •  RESULT ← πFNAME, LNAME, SALARY (DEP5_EMPS) –  selectie en projectie commuteren indien de attributen in het selectiecriterium behoren tot de attributen waarop wordt geprojecteerd •  πX (σ F ( r ) ) = σF ( πX ( r ) ) indien F enkel attributen in X gebruikt
  • 15. 15
  • 16. hernoeming –  doel: wijziging van attribuutnamen –  notatie: nieuwe namen tussen haakjes vermeld –  voorbeeld: RESULT(Firstname, Lastname, Salary) ← πFNAME, LNAME, SALARY (DEP5_EMPS) –  hernoeming kan ook met een (unaire) operator ρ voorgesteld worden 1.  ρ S(B1, B2,…, Bn) (R) relatie en attributen worden hernoemd 2.  ρ S (R) alleen relatie wordt hernoemd 3.  ρ (B1, B2,…, Bn) (R) alleen attributen worden hernoemd 16
  • 17. (a) π FNAME, LNAME, SALARY (σ DNO = 5 (EMPLOYEE ) ) (b) zelfde met tussenresultaat en hernoeming van attributen
  • 18. Unie ∪, doorsnede ∩, verschil –  enkel toegelaten op vergelijkbare ("union compatible") relaties –  definitie 2 relaties R( A1,...,An) en S (B1,...,Bm) zijn vergelijkbaar als en slechts als m=n (d.w.z. R en S hebben dezelfde graad) DOM (Ai) = DOM (Bi) voor 1 ≤ i ≤ n –  schema-behoudend, op attribuutnamen na •  afspraak: behoud attribuutnamen van 1-ste relatie –  eigenschappen •  ∪ en ∩ zijn commutatief en associatief ( niet); •  wetten van De Morgan; •  ... 18
  • 19. RESULT ← RESULT1 ∪ RESULT2 19
  • 20. 20
  • 21. Cartesisch product •  Zij gegeven de relaties –  R ( A1,...,An ) –  S ( B1,...,Bm ) –  die niet noodzakelijk vergelijkbaar zijn •  Q = R × S –  heeft schema Q(A1,...,An,B1,...,Bm) –  en bevat elke combinatie van tupels uit R en S 21
  • 22. FEMALE_EMP ← σSEX = ‘F’ (EMPLOYEE) EMPNAMES ← π FNAME, LNAME, SSN (FEMALE_EMP) EMP_DEPENDENTS ← EMPNAMES × DEPENDENT ACTUAL_DEPENDENTS ← σ SSN = ESSN (EMP_DEPENDENTS) RESULT ← π FNAME, LNAME, DEPENDENT_NAME (ACTUAL_DEPENDENTS ) 22
  • 23. join operator •  binaire operator –  combineert gerelateerde tupels van 2 relaties •  = cartesisch product + selectie •  notatie R F S –  met F een selectiecriterium •  voorbeeld –  ACTUAL_DEPENDENTS ← EMPNAMES SSN=ESSN DEPENDENT 23
  • 24. join operator –  voorbeeld: combineer voor alle departementen informatie over het departement + de manager ervan: DEPARTMENT  MGRSSN = SSN EMPLOYEE De join van R en S volgens criterium F is   R  F S = σF ( R × S )  24
  • 25. soorten joins •  Opdeling naargelang van de vorm van de join-voorwaarde F –  F = C1 ∧ C2 ∧ … ∧ Cn •  theta-join: elke Ck is van de vorm Ai θ Bj met –  θ ∈ { =, <, >, ≤, ≥, ≠ } –  DOM (Ai) = DOM (Bj) •  speciale gevallen –  equi-join: enkel " = " –  natuurlijke join •  equi-join + weglaten van overtollige attributen (d.w.z. per voorwaarde Ai = Bj enkel Ai of Bj behouden) •  notatie: R F S 25
  • 26. vereenvoudigde notaties voor natuurlijke joins •  R  X,Y S –  met X en Y lijsten van attributen –  alle attribuutwaarden moeten aan elkaar gelijk zijn •  R  S –  lijsten X en Y zijn impliciet: bevatten alle attributen die dezelfde naam hebben in R en S 26
  • 27. (a) PROJ_DEPT ← PROJECT  DEPARTMENT (b) DEPT_LOCS ← DEPARTMENT  DEPT_LOCATIONS
  • 28. semi-join •  natuurlijke join + projectie op attributen van één van de 2 relaties •  notatie: R ⋉ S = πR ( R  S ) •  vb. –  informatie over alle personeelsleden die manager van een departement zijn 28
  • 29. natuurlijke join en semi-join r s rs r⋉s 29
  • 30. fundamentele operatoren 30
  • 31. fundamentele operatoren •  de verzameling operatoren {σ, π, ∪, , ×} is volledig: –  andere operatoren kunnen op basis van deze gedefinieerd worden. –  vandaar de naam: fundamentele operatoren. •  niet-fundamentele operatoren: –  join combinatie van σ, π, × –  ∩ R∩S=R∪S(RS)(SR) –  ... –  zijn niet strikt nodig –  wel gemakkelijk •  nog een niet-fundamentele operator: –  de deling ÷ 31
  • 32. deling •  Q = R ÷ S –  ≈ inverse van cartesisch product •  ⇔ Q is de maximale relatie waarvoor geldt dat Q × S ⊆ R •  Q bevat enkel de attributen van R die niet in S zitten –  voorbeeld: "geef alle werknemers die werken aan elk project waaraan John Smith werkt” SMITH ← σ FNAME = ‘John’ AND LNAME = ‘Smith’ ( EMPLOYEE ) geeft EMPLOYEE-tupel ‘John Smith’ SMITH_PNOS ← π PNO ( WORKS_ON  ESSN = SSN SMITH ) geeft alle projecten waaraan John Smith werkt SSN_PNOS ← π ESSN, PNO ( WORKS_ON ) geeft voor alle werknemers alle projecten waaraan ze werken SSNS(SSN) ← SSN_PNOS ÷ SMITH_PNOS 32 deling geeft SSN's van gevraagde werknemers
  • 33. 34
  • 34. formeel •  zij gegeven relaties R(X) en S(Y); Y ⊆ X •  Als Q(Z) = R(X) ÷ S(Y), dan is –  Z = X Y –  q = { t | ∀ ts ∈ s ∃ tr ∈ r : tr [Z] = t en tr [Y] = ts } •  Deling gedefinieerd als afgeleide operatie uit de fundamentele operatoren: –  Q1 ← π Z (R) –  Q2 ← π Z ( (S × Q1) R) –  Q ← Q1 Q2 –  er geldt dat Q = R ÷ S 35
  • 35. 36
  • 36. voorbeelden van queries –  Q 2: •  For every project located in ‘Stafford’, list the project number, the controlling department number, and the department manager’s last name, address, and birthdate STAFFORD_PROJS ← σ Plocation = ‘Stafford’ ( PROJECT ) CONTR_DEPT ← (STAFFORD_PROJS  Dnum = DnumberDEPARTMENT) PROJ_DEPT_MGR ← ( CONTR_DEPT  Mgr_ssn = Ssn EMPLOYEE ) RESULT ← π Pnumber, Dnum, Lname, Address, Bdate ( PROJ_DEPT_MGR ) 37
  • 37. voorstelling d.m.v. een query boom 38
  • 38. aggregaatfuncties •  functies die op verzamelingen waarden uitgevoerd worden –  SUM, AVERAGE, MAX, MIN, COUNT •  notatie groepering ℑ functies (R) •  groepering = verz. attributen op basis waarvan groepering gebeurt •  functies = lijst van koppels ( functie, attribuut ) •  voorbeeld: Dno ℑ AVERAGE Salary ( EMPLOYEE ) 39
  • 39. aggregaatfuncties •  resultaat: tabel met als attributen –  attributen uit de groepering –  attributen met naam “Functie_attribuut” die het resultaat van de functie op dat attribuut geven •  voorbeeld: –  Dno ℑ COUNT Ssn, AVERAGE Salary ( EMPLOYEE ) –  geeft tabel met attributen: Dno, Count_ssn, Average_salary •  groeperingsattributen kunnen weggelaten worden –  → aggregaatfunctie toegepast op de hele relatie resultaat: 1 tupel 40
  • 40. (a)  R ( Dno, No_of_employees, Average_sal )                                              ← Dno ℑ COUNT Ssn, AVERAGE Salary (EMPLOYEE )  (b)  Dno ℑ COUNT Ssn, AVERAGE Salary (EMPLOYEE )  (c) ℑ COUNT Ssn, AVERAGE Salary (EMPLOYEE ) 
  • 41. recursieve sluiting •  vb. 1 –  vind alle ondergeschikten van persoon Y –  = transitieve sluiting van ” X heeft Y als chef " •  vb. 2 –  in een stamboom-databank van honden: –  vind alle voorouders van “zwerver” •  niet algemeen uit te drukken in relationele algebra –  wel voor bepaald aantal niveaus, bv. vind alle ouders, vind alle grootouders, ... –  relationele uitdrukking groeit per niveau dat erbij komt –  onbeperkt aantal niveaus zou oneindige uitdrukking geven 42
  • 42. 43
  • 43. voorbeeld •  voorbeeld –  relatie PARENT ( ParentID, ChildID ) •  ouders van hond #12 : –  P1 ( DogID ) ← π ParentID (σ ChildID = 12 ( PARENT ) ) •  grootouders: –  P2 ( DogID ) ← π ParentID (PARENT  ChildID=DogID P1) •  overgrootouders: –  P3 ( DogID ) ← π ParentID (PARENT  ChildID=DogID P2) •  ... •  RESULT = P1 ∪ P2 ∪ P3 ∪ … ∪ Pn •  vereist steeds een eindige waarde voor n 44
  • 44. uitwendige join •  gewone joins, bv. R * S, –  leveren over de tupels die niet aan de join voorwaarde voldoen geen enkele informatie op –  vb. •  lijst van alle werknemers + als ze een departement leiden: naam van dat departement •  join geeft enkel werknemers die effectief een departement leiden •  linkse uitwendige join –  levert info over alle werknemers –  + info over het departement dat ze leiden, of nul als ze geen departement leiden •  analoog: –  rechtse uitwendige join –  volledige uitwendige join 45
  • 45. TEMP ← ( EMPLOYEE             Ssn = Mgr_ssn DEPARTMENT )  RESULT ← π Fname, Minit, Lname, Dname  ( TEMP )  46
  • 46. varianten op unie •  Vereniging van tupels van niet vergelijkbare relaties + •  Uitwendige unie: ∪+ + –  Notatie : Q = R ∪ S + –  Attr (Q) = Attr (R) ∪ Attr (S) –  nulwaarde voor attributen die niet van toepassing zijn - ∪- - •  Inwendige unie: –  Notatie : Q = R ∪ S - –  Attr(Q) = Attr(R) ∪ - Attr(S) •  ( alleen gemeenschappelijke attributen blijven behouden ) 47
  • 47. voorbeelden van queries –  Q 1: •  Retrieve the name and address of all employees who work for the ‘Research’ department RESEARCH_DEPT ← σ DNAME = ‘Research’ ( DEPARTMENT ) RESEARCH_EMPS ← ( RESEARCH_DEPT  Dnumber = Dno EMPLOYEE ) RESULT ← π Fname, Lname, Address ( RESEARCH_EMPS ) 48
  • 48. voorbeelden van queries –  Q 3: •  Find the names of employees who work on all the projects controlled by department number 5 DEPT5_PROJS ( Pno ) ← π Pnumber (σ Dnum = 5 ( PROJECT ) ) EMP_PROJ ( Ssn, Pno ) ← π Essn, Pno ( WORKS_ON ) RESULT_EMP_SSNS ← EMP_PROJ ÷ DEPT5_PROJS RESULT ← π Lname, Fname ( RESULT_EMP_SSNS  EMPLOYEE ) 49
  • 49. voorbeelden van queries –  Q 4: •  Make a list of projects that involve an employee whose last name is ‘Smith’, either as a worker or as a manager of the department that controls the project SMITHS (Essn) ← π SSN (σ Lname = ‘Smith’ ( EMPLOYEE ) ) SMITH_WORKER_PROJ ← π Pno ( WORKS_ON  SMITHS ) MGRS ← π Lname, Dnumber (EMPLOYEE  Ssn = Mgr_ssn DEPARTMENT) SMITH_MANAGED_DEPTS (Dnum) ← π Dnumber (σ Lname = ‘Smith’ (MGRS) ) SMITH_MGR_PROJS (Pno) ← π Pnumber ( SMITH_MANAGED_DEPTS  PROJECT ) RESULT ← (SMITH_WORKER_PROJ ∪ SMITH_MGR_PROJS ) 50
  • 50. voorbeelden van queries •  Q 5: –  List the names of all employees with two or more dependents T1 (Ssn, No_of_dependents) ← EssnFCOUNT Dependent_name (DEPENDENT) T2 ← σ No_of_dependents ≥ 2 ( T1 ) RESULT ← π Lname, Fname ( T2  EMPLOYEE ) 51
  • 51. voorbeelden van queries •  Q 6: –  Retrieve the names of employees who have no dependents ALL_EMPS ← π Ssn ( EMPLOYEE ) EMPS_WITH_DEPS ( Ssn ) ← π Essn ( DEPENDENT ) EMPS_WITHOUT_DEPS ← ALL_EMPS EMPS_WITH_DEPS RESULT ← π Lname, Fname ( EMPS_WITHOUT_DEPS  EMPLOYEE ) 52
  • 52. voorbeelden van queries –  Q 7: •  List the names of managers who have at least one dependent MGS ( Ssn ) ← π Mgr_ssn ( DEPARTMENT ) EMPS_WITH_DEPS ( Ssn ) ← π Essn ( DEPENDENT ) MGRS_WITH_DEPS ← MGRS ∩ EMPS_WITH_DEPS RESULT ← π Lname, Fname ( MGRS_WITH_DEPS  EMPLOYEE ) 53
  • 53. relationele calculus •  vragen stellen d.m.v. omschrijving van de resultaatverzameling –  relationele algebra beschrijft operaties om tot het resultaat te komen ( b.v. projecteer, ...) → proceduraal –  relationele calculus beschrijft condities waaraan het resultaat moet voldoen → declaratief •  omschrijving wordt gegeven in predikatenlogica •  relationele calculus omvat –  tupelcalculus: maakt gebruik van tupelvariabelen –  domeincalculus: domeinvariabelen stellen een attribuutwaarde voor 54
  • 54. ter herinnering: propositielogica •  propositie –  bewering die waar of onwaar zijn –  aangegeven door middel van 1 symbool: p, q, ... •  operatoren –  ontkenning ¬ –  conjunctie ∧ –  disjunctie ∨ –  implicatie ⇒ –  equivalentie ↔ •  samengestelde beweringen –  een of meer symbolen –  operatoren 55
  • 55. predikatenlogica •  (eerste orde) predikatenlogica –  maakt gebruik van variabelen –  predikaat = bewering over objecten –  formules verwijzen expliciet naar die objecten (d.m.v. variabelen, constanten, functies) –  quantificatie van variabelen: ∃ , ∀ –  predikatenlogica van de eerste orde: •  achter ∃ en ∀ staan alleen variabelen, geen complete verzamelingen •  relationele calculus gebruikt eerste orde predikatenlogica 56
  • 56. tupel relationele calculus •  Basisvormen van query: { t | formule(t) } { t.A1, t.A2, ..., t.An | formule(t) } –  t : tupel variabele –  formule : voorwaarde (of predikaat) beschrijft de condities waaraan t moet voldoen om in het resultaat voor te komen –  attribuut van tupelvariabele selecteren: t.ATTR •  voorbeelden: –  { t | EMPLOYEE(t) and t.SALARY > 50000 } –  { t.FNAME, t.LNAME | EMPLOYEE(t) and t.SALARY > 50000 } 57
  • 57. voorbeeld •  Q_0 –  Geef de geboortedatum en het adres van de werknemer (of de werknemers) met naam ‘John Smith’ { t.Bdate, t.Address | EMPLOYEE(t) and t. Fname = ‘John’ and t.Lname = ‘Smith’ } 58
  • 58. algemene uitdrukking in tupelcalculus { t1.A1, t2.A2, ..., tn.An | COND(t1, t2,... tn, tn+1,..., tn+m) } –  ti : tupelvariabele (niet noodzakelijk verschillend) –  Ai: attribuutnaam, horende bij de relatie ti –  COND: een voorwaarde (of “well formed formula” - WFF) –  ti links van "|" = alle variabelen die vrij voorkomen (niet gebonden door ∃ of ∀) in de COND 59
  • 59. conditie •  COND bestaat uit –  atomen + logische connectoren + quantificatoren •  een atoom is van de vorm: –  R(ti) R: relatienaam, ti: tupelvariable –  ti.A θ tj.B θ ∈ { <,>,=, ≤, ≥, ≠ } en A attribuut van ti, B attribuut van tj –  ti.A θ c of c θ tj.B θ ∈ { <,>,=, ≤, ≥, ≠ } en c een constante •  waarde van een atoom: true of false 60
  • 60. gebonden en vrije variabelen •  een tupelvariabele t is gebonden als ze gequantificeerd is (met een quantor ∀ of ∃ voorkomt) •  voorbeelden: F1: d.DNAME = ‘Research’ F2: ( ∃ t ) ( d.DNUMBER = t.DNO ) F3: ( ∀ d ) ( d.MGSSN = ‘333445555’ ) d is vrij in F1 en in F2 d is gebonden met ∀ in F3 t is gebonden met ∃ in F2 61
  • 61. •  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) }  vrije tupelvariabelen alleen links van |    EMPLOYEE(t) en DEPARTEMENT(d) specificeren het bereik van t en d  d.Dname = 'Research’   selec'evoorwaarde  d.Number = t.Dno    joinvoorwaarde 62
  • 62. –  Q_2 •  Geef voor elk project in Stafford het nummer, nummer van het controlerend departement, en familienaam, geboortedatum en adres van de manager van dat departement. {p.Pnumber, p.Dnum, m.Lname, m.Bdate, m.Address        | PROJECT(p)      AND EMPLOYEE(m)           AND  p.Loca'on = 'Stafford'          AND  ( (∃d) (DEPARTMENT(d)                         AND  p.Dnum = d.Dnumber                         AND  d.Mgr_ssn = m.Ssn) ) }  63
  • 63. –  Q_8 •  Geef voor elk werknemer de voor- en familienaam en de voor- en familienaam van zijn/haar supervisor { e.FNAME, e.LNAME, s.FNAME, s.LNAME         | EMPLOYEE(e) AND EMPLOYEE(s)           AND e.Super_ssn = s.Ssn }  64
  • 64. –  Q_3’ •  Geef de naam van elke werknemer die aan een project werkt gecontroleerd door departement 5. { e.LNAME, e.FNAME         | EMPLOYEE(e)           AND ( (∃ x) (∃ w) ( PROJECT(x) AND WORKS_ON(w)                                        AND x.Dnum = 5                                       AND w.Essn = e.Ssn                                        AND x.Pnumber = w.Pno ) ) }  65
  • 65. –  Q_4 •  Geef een lijst van alle projectnummers van projecten waarin een werknemer met familienaam ‘Smith’ betrokken is, als werknemer of als manager van het controlerend departement { p.Pnumber | PROJECT(p) and     ( ( (∃ e) (∃ w) ( EMPLOYEE(e) AND WORKS_ON(w)                           AND w.Pno = p.Pnumber                           AND e.Lname = 'Smith'                           AND e.Ssn = w.Essn ) )    OR    ( (∃ m) (∃ d) ( EMPLOYEE(m) and DEPARTMENT(d)                           AND p.Dnum = d.Dnumber                           AND d.Mgr_ssn = m.Ssn                          AND m.Lname = 'Smith’ ) ) ) }  66
  • 66. universele quantor ∀ •  steeds omzetbaar tot existentiële –  vb: ¬ ( ∀ x ) ( P(x) ) ⇔ ( ∃ x ) ( ¬ P(x) ) •  laat meer natuurlijke formuleringen toe •  wel oppassen: bereik van x moet ergens beperkt worden! –  notie safe expression (veilige uitdrukking) –  levert een eindige verzameling op (zie verder) 67
  • 67. transformaties •  ( ∀ x ) ( P(x) ) ⇔ ¬ ( ∃ x ) ( ¬ P(x) ) •  ( ∃ x ) ( P(x) ) ⇔ ¬ ( ∀ x ) ( ¬ P(x) ) •  ( ∀ x ) ( P(x) ∧ Q(x) ) ⇔ ¬ ( ∃ x ) ( ¬ P(x) ∨ ¬ Q(x) ) •  ( ∀ x ) ( P(x) ∨ Q(x) ) ⇔ ¬ ( ∃ x ) ( ¬ P(x) ∧ ¬ Q(x) ) •  ( ∃ x ) ( P(x) ∧ Q(x) ) ⇔ ¬ ( ∀ x ) ( ¬ P(x) ∨ ¬ Q(x) ) •  ( ∃ x ) ( P(x) ∨ Q(x) ) ⇔ ¬ ( ∀ x ) ( ¬ P(x) ∧ ¬ Q(x) ) •  ( ∀ x ) ( P(x) ) ⇒ ( ∃ x ) ( P(x) ) •  ¬ ( ∃ x ) ( P(x) ) ⇒ ¬ ( ∀ x ) ( P(x) ) 68
  • 68. –  Q_3: Geef de namen van de werknemers die aan alle projecten gecontroleerd door departement 5 werken { e.Lname, e.Fname |    EMPLOYEE(e)    AND    ( (∀x) ( NOT (PROJECT(x))              OR              ( NOT (x.Dnum = 5 )              OR              ( (∃w) ( WORKS_ON(w)                       AND w.Essn = e.Ssn                       AND x.Pnumber = w.Pno ) ) ) ) }  Condi'e moet voor alle x gelden → die x‐en waarvoor de bedoelde  condi'e triviaal niet voldaan kan zijn op voorhand uitsluiten:    x is geen project    x is wel een project maar niet nr. 5 
  • 69. { e.Lname, e.Fname |    EMPLOYEE(e)    AND    ( (∀x) ( NOT (PROJECT(x))              OR              ( NOT (x.Dnum = 5 )              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 •  or ( not ( x.Dnum = 5 ) ) –  alle projecten die niet gecontroleerd zijn door departement 5 uitsluiten –  verder moet dus gelden voor een employee e dat hij werkt op elk project dat niet uitgesloten werd 70
  • 70. alternatief, met existentiële quantor {e.Lname, e.Fname |     EMPLOYEE(e)     AND    (NOT (∃x) (PROJECT(x)                      AND x.Dnum = 5                      AND NOT (∃ w) (WORKS_ON(w)                                               AND w.Essn = e.Ssn                                              AND x.Pnumber = w.Pno))))}  in woorden: we zoeken alle employees, zodanig dat voor employee e mag er geen project bestaan dat gecontroleerd wordt door dept 5, waaraan deze employee niet werkt 71
  • 71. –  Q_6 •  Geef de namen van alle werknemers zonder personen ten laste: {e.Fname, e.Lname |     EMPLOYEE(e) AND    (NOT (∃ d) ( DEPENDENT(d) AND e.Ssn = d.Essn )) } {e.Fname, e.Lname  |     EMPLOYEE(e) AND   ( (∀ d) ( NOT (DEPENDENT(d)) OR NOT (e.Ssn = d.Essn) ) ) } 72
  • 72. –  Q_7 •  Geef de namen van alle managers die ten minste één persoon ten laste hebben: {e.Fname, e.Lname | EMPLOYEE(e)       AND  ( (∃ d) (∃ p) ( DEPARTEMENT(d) AND  DEPENDENT(p)       AND  e.Ssn = d.Mgr_ssn  AND  p.Essn = e.Ssn ) ) }  73
  • 73. notie van "veilige" (safe) query •  levert slechts een eindig aantal tuples als resultaat •  levert geen resultaten "uit het niets" op •  bv: { t | NOT EMPLOYEE(t) } –  geen enkele beperking op wat het resultaat bevat •  formeel: –  domein van tupel relationele uitdrukking = { voorkomende constanten } U domeinen van attributen van relaties –  uitdrukking is veilig indien resultaattupels enkel elementen uit het domein van de uitdrukking bevatten •  onveilige queries zijn zinloos → vermijden 74
  • 74. Quantoren in SQL •  ∃ EXISTS •  ∀ –  bestaat niet: –  gebruik not ( ∃ x ): NOT EXISTS 75
  • 75. QUEL •  vraagtaal gebaseerd op tupelcalculus •  precieze syntax •  uitbreidingen: bv. tellen, groeperen –  dichter bij tupelcalculus dan SQL –  vb: range of e is EMPLOYEE  retrieve (e.Bdate, e.Address)  where e.Fname = 'John'        and e.Minit = 'B'        and e.Lname = 'Smith' 76
  • 76. domein relationele calculus –  Analoog aan tupelcalculus, maar variabelen verwijzen naar een attribuutwaarde i.p.v. een heel tupel –  Vorm van query: { x1, ..., xn | COND (x1, x2, ..., xn+m ) } –  Voorbeeld: •  { v f | EMPLOYEE ( v, m, f, s, b, a, g, w, c, d ) } –  COND = atomen + connectoren + quantoren •  is een WWF (well formed formule) •  net als bij tupelcalculus •  atoom = R(x1,...,xn) of "xi θ xj" of "xi θ c"} met R een relatienaam, θ ∈ { <, >, =, ≤, ≥, ≠ } en c een constante 77
  • 77. •  Q_0 –  Geef geboortedatum en adres van werknemer John B. Smith { u v | (∃ q) (∃ r) (∃ s) (∃ t) (∃ w) (∃ x) (∃ y) (∃ z)          ( EMPLOYEE ( qrstuvwxyz )               AND q = 'John' AND r = 'B' AND s = 'Smith’ ) }  –  praktisch worden alleen de variabelen gequantificeerd die in een voorwaarde voorkomen: { u v | (∃ q) (∃ r) (∃ s)          ( EMPLOYEE ( qrstuvwxyz )               AND q = 'John' AND r = 'B' AND s = 'Smith’ ) }  –  Andere vorm (constanten direct ingevuld) : { u v | (EMPLOYEE('John', 'B', 'Smith', t, u, v, w, x, y, z ) }  78
  • 78. •  Q_1 –  Geef naam en adres van alle werknemers die voor departement 'Research' werken: {q s v | (∃ z) (∃ l) (∃ m) ( EMPLOYEE( qrstuvwxyz ) AND                           ( DEPARTMENT( lmno )                             AND  l = 'Research' AND m = z) ) }  79
  • 79. –  Q_2 •  Geef voor elk project in Stafford nummer, nummer van controlerend dept. en de managers familienaam, geboortedatum en adres: {i k s u v | (∃ j) (∃ m) (∃ n) (∃ t)        ( PROJECT ( h i j k ) AND                   EMPLOYEE ( q r s t u v w x y z )                               AND DEPARTMENT ( l m n o )        AND k = m AND n = t AND j = 'Stafford' ) }  80
  • 80. •  Q_6 •  Geef de namen van alle werknemers zonder personen ten laste: {q s | ( ∃ t ) (EMPLOYEE ( q r s t u v w x y z )      AND ( NOT (∃ l ) (DEPENDENT ( l m n o p )        AND t = l ) ) ) }  {q s  | ( ∃ t ) ( EMPLOYEE ( q r s t u v w x y z )                     AND ( ( ∀ l ) ( NOT ( DEPENDENT ( l m n o p ) )              OR NOT t = l ) ) ) ) }  81
  • 81. •  Q_7 •  Geef de namen van de managers met ten minste één persoon ten laste: { s q | ( ∃ t ) ( ∃ j ) ( ∃ l )                     (  EMPLOYEE ( q r s t u v w x y z )      AND   DEPARTMENT ( h i j k )                       AND   DEPENDENT ( l m n o p )       AND  t = j  AND  t = l   )  }  82
  • 82. QBE = Query By Example •  was een der eerste grafische query talen •  geïllustreerd a.h.v. QMF-implementatie (DB2, ...) •  queries worden uitgedrukt d.m.v. een voorbeeld –  maakt gebruik van skelet-tabellen of sjablonen –  gebruiker vult die in naargelang het gewenste soort resultaat –  voorbeelden (= variabelen) beginnen met _ –  constanten worden letterlijk ingegeven •  evt. met operator, bv. >20 •  20 is equivalent met =20 –  P. : print: dit moet in het resultaat zichtbaar zijn 83
  • 83. 84
  • 84. –  Q_0 •  retrieve the birthdate and address of the employee whose name is ‘John B. Smith’
  • 85. Q_0A List the social security numbers of employees who work more than 1 20 hours per week on project number 1 Q_0B List the social security numbers of employees who work more than 20 hours per week on either project 1 or project 2 1 P. 2 > 20 86
  • 86. algemene regels •  condities op 1 rij staan in AND-verband •  condities op verschillende rijen staan in OR-verband •  aparte "condition box" voor complexere voorwaarden •  "Result" tabel kan expliciet vermeld worden –  P. onder naam van tabel i.p.v. bij attributen 87
  • 87. join dezelfde variabele in verschillende kolommen zetten 88
  • 88. orde van resultaat •  P. AO(m). –  print in ascending order (m = prioriteit) •  P. DO(n). –  print in descending order (n = prioriteit) 89
  • 89. queries met aggregaatfuncties en groepering •  groeperingsoperator: –  G. •  Aggregaatfuncties: –  AVG., SUM., CNT., MAX., MIN. –  bij default toegepast op verschillende waarden –  indien toe te passen op alle waarden: pefix ALL 90
  • 90. negatie ¬ •  gebruik gelijkaardig met NOT EXISTS in SQL –  onder tabelnaam: "dit tupel komt niet voor” –  niet toegelaten in conditiebox •  niet volledig equivalent (→ niet relationeel volledig) –  althans QMF-implementatie niet •  voorbeeld –  vind alle employees die aan alle projecten van departement nr. 5 werken –  kan niet uitgedrukt worden in de versie van QBE zoals hier besproken 92
  • 91. •  Q_6 List the names of all employees who have no dependents 93
  • 92. wijzigingen in de gegevensbank •  I. insert aangegeven bij toe voegen tupel •  D. delete aangegeven bij de weg te laten tupel •  U. Update aangegeven in de te wijzigen kolom •  ook weglaten van meerdere tupels tegelijk is mogelijk 94
  • 93. •  (a) insert a new EMPLOYEE tuple •  (b) delete the tuple with given SSN from EMPLOYEE •  (c) increase the salary of ‘John Smith’ by 10 % and reassign him to department number 4
  • 94. VRAGEN? Katrien.Verbert@cs.kuleuven.be 96
  • 95. feedback? Les van vandaag  Alle lessen tot nu toe  goed  minder  goed  97