Databases I (H.9.4) Domeincalculus Wiebren de Jonge Vrije Universiteit, Amsterdam versie 2003.

Slides:



Advertisements
Verwante presentaties
Erfelijkheid Thema 3.
Advertisements

Les 2 klassediagrammen II
SQL deel 2: datamodel ontwerp
We zijn toch allemaal gelijk…
Module 7 – Hoofdstuk 5 (1) SQL – een begin.
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Het ER model Een powerpoint presentatie, gemaakt door: F. Triep
Databases Informatica Ga verder met een muisklik. SQL FCO DBMS NE FA
Entiteit-Relatie Model
HALLO OPLETTEN : Waarom sql DOEN : Introductie opdracht
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Wouter van der Zwan Lezing Draaitabellen Wouter van der Zwan
Databases.
Databases I Van EER naar relationeel
Entity Relation Model (ER-model).
HET CURRICULUM VITAE = VISTEKAARTJE NUMMER 2
Inleiding Databanken: oefeningen 4 Sven Casteleyn 4 Lokaal: 6G HomePage: te bereiken via
Download en installeer de gereedschappen
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Normalisatie Relationeel databaseontwerp:
Databases I Relationeel Model Martin Caminada / Wiebren de Jonge Vrije Universiteit, Amsterdam definitieve versie 2002.
Databases I (H. 9.3) Tupelcalculus Wiebren de Jonge Vrije Universiteit, Amsterdam versie 2003.
Databases I Normaliseren Martin Caminada / Wiebren de Jonge Vrije Universiteit, Amsterdam definitieve versie 2002.
 Het tentamen wordt afgenomen op maandag 29 okt., zalen Alpha en Gamma van Wees er op tijd!! Te laat komen is afwezig.  Telefoon uit, eten.
Databases.
Relationele Databases Hoofdstuk 10 Deel 2 Blz.: 90 t/m 95.
Semantische Interpretatie Jurafsky & Martin (Ed. 1): Hoofdstuk 15
Interpreteren van data
MET DANK AAN COLLEGA’S IN DEN LANDE ! vee 2012
Relationele Databases
Hoofdstuk 4: Statistiek
Communication Een good listening attitude. A good listener Luistert met zijn oren en met zijn hart. Listening is an attitude! Luisteren vereist de juiste.
De grote Pontaix Pop Quiz. Ronde 1 In deze ronde krijgen de deelnemers ieder 2 vragen die elk 1 punt opleveren.
LauwersCollege Buitenpost Informatica
Databases I Domeincalculus Martin Caminada / Wiebren de Jonge Vrije Universiteit, Amsterdam definitieve versie 2002.
7 Databases. SAMENGESTELDE VOORWAARDEN 1 Wat is het adres van Odile Goossens? SELECT adres, woonplaats FROM leden WHERE naam = ‘Goossens’ AND voornaam.
7 Databases. STRUCTURED QUERY LANGUAGE Bij het relationele model hoort een programmeertaal waarmee de database benaderd kan worden. In de praktijk wordt.
Ordenen van gegevens Inleiding informatiesystemen © Sander Cox.
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Databases I (H. 7: 1-3) Het Relationele Model Wiebren de Jonge Vrije Universiteit, Amsterdam versie 2003.
Databases I (Info) Wiebren de Jonge Vrije Universiteit, Amsterdam versie 2003.
Databases I Relationele Algebra Martin Caminada / Wiebren de Jonge Vrije Universiteit, Amsterdam definitieve versie 2002.
Databases I (H. 17) DB System Architectures & DB System Catalog Wiebren de Jonge Vrije Universiteit, Amsterdam versie 2003.
Databases I Het Entity-Relationship Model
Databases I SQL Martin Caminada / Wiebren de Jonge Vrije Universiteit, Amsterdam definitieve versie 2002.
Databases I (H.8) SQL Wiebren de Jonge Vrije Universiteit, Amsterdam versie 2003.
Databases I Tupelcalculus Martin Caminada / Wiebren de Jonge Vrije Universiteit, Amsterdam definitieve versie 2002.
Databases I (H.7.4 e.v.) Relationele Algebra Wiebren de Jonge Vrije Universiteit, Amsterdam versie 2003.
Les 0 Structured Query Language SQL. Programma Les 0 – Introductieopdracht Les 1 Les 2 Les 3 Schriftelijke toets.
Liefde en relaties.
Herhalingscombinaties
Java Objectgeoriënteerd Programmeren in Java met BlueJ
ANALYSE 3 INFANL01-3 WEEK CMI Informatica.
BIMAIV03 Les A1 BIMAIV03 Les A1 Databases. De gegevens in een database vormen de grondstof voor informatie De informatie wordt opgevraagd in de taal met.
Analyse 3 INFANL01-3 week 2 CMI Informatica.
Shake Song Fort van de Verbeelding Bovenbouw Groep 7 en 8 (en soms ook groep 6)
CONCEPT CHECKS & FAST FEEDBACK
Thema 3 Organen en cellen
Powerpoint presentatie.
Ondersteuning bij contextopgaven met een intelligent kladblaadje.
Hoofdstuk 11 De Break-Even Afzet (BEA). Wat kost internet ? Vroeger moest je internetkosten betalen per minuut. Dat ging via een vorm van bellen. Joep.
STAPPENPLAN VOOR HET MAKEN VAN EEN LEESTOETS LEESRONDE 1 - ORIENTEREND: -Lees titel, tussenkopjes etc. -Lees eerste en laatste alinea -Formuleer hoofdgedachte.
Datamodelleren FCO-IM methode.
Databases.
-calculus versus Scheme
Schrijven 4.3 Formuleren en stijl 1.1
Hoofdstuk 1, 2 en 3 Toegepaste Mechanica deel 1
Databases.
Datamodelleren FCO-IM methode.
Tellen met kaarten.
Transcript van de presentatie:

Databases I (H.9.4) Domeincalculus Wiebren de Jonge Vrije Universiteit, Amsterdam versie 2003

Te behandelen querytalen u relationele algebra u domeincalculus u tupelcalculus u SQL

Voorbeeld-DB DEPT D#NAMEBUDGET D1engineering500,000 D2sales200,000 DPD EMPE#NAME REL E#NAME BDATE D# E3Mary daughter E1John D1 E3Sue wife E2Joe D1 E4Suzie daughter E3Jack D1 E4Tom son E4Will D2 E4Mary wife E5Bridget D2

Voorbeeld query in domeincalculus “Geef de naam en geboortedatum van de werknemers die in afdeling D2 werken” wij: { (n, b) | EMP(name: n, bdate: b, D#: “D2”) } òf: { (n, b) |  d ( EMP(name: n, bdate: b, D#: d) and (d=“D2”) ) } boek:{ n, b |  e EMP( e, n, b, “D2” ) } òf: { n, b |  e  d ( EMP( e, n, b, d ) and (d=“D2”) ) } Onze notatie: u variabelen altijd gescheiden door komma’s (i.v.m. langere namen) u expliciete weergave van attributen in “membership condition” (i.v.m. vermijden van volgorde en kunnen weglaten van onnodige attributen) u alle quantoren altijd expliciet vermelden! (Bij tentamen verplicht !!)

Domeincalculus Algemene vorm: { (v 1, v 2, …, v n ) | CONDITIE(v 1, v 2, …, v n, v n+1, …, v n+m ) } waarbij CONDITIE een formule in predicaatlogica is met: –v 1, v 2, …, v n als vrije domeinvariabelen, en –v n+1, v n+2, …, v n+m als gebonden dom.variabelen (door quantor  of  ) en die opgebouwd is uit de volgende atomen: –R (A 1 : a 1, A 2 : a 2, …, A n : a n )(“membership condition”; elke waarbij R een relatie in de DB is, en v i komt voor in een m.c.) A 1, A 2, …, A n attributen van relatie R zijn, en a 1, a 2, …, a n domeinvariabelen of constanten zijn –v i op v j met v i en v j domeinvariabelen en op  { , , , , ,  } –v i op c (of: c op v i ) met v i een domeinvariabele, c een constante en op  { , , , , ,  }

Voorbeeld query (“met  en  ”) “Geef de namen en E#’s van werknemers geboren vóór 1970” { (n, e) |  b ( EMP( E#: e, name: n, bdate: b )  (b < “ ”) ) } ne JohnE1 JoeE2 JackE3

Voorbeeld query (“met  ”) “Geef de namen van de ‘dependents’ van Will” { (n) |  e ( EMP(E#: e, name: “Will”)  DPD(E#: e, name: n) ) } òf: { (n) |  e 1  e 2 ( EMP(E#: e 1, name: “Will”)  DPD(E#: e 2, name: n)  (e 1 =e 2 ) ) } n Suzie Tom Mary

Voorbeeld query (“met  ”) “Geef de E#’s en namen v.d. ongehuwde engineering- werknemers” { (e, n) |  d ( EMP (E#: e, name: n, D#: d)  DEPT (D#: d, name: “engineering”)   DPD (E#: e, REL: “husband”)   DPD (E#: e, REL: “wife”) ) } òf: { (e, n) |  d ( EMP (E#: e, name: n, D#: d)  DEPT (D#: d, name: “engineering”) )   r ( DPD (E#: e, REL: r)  (r=“husband”  r=“wife”) ) } N.B. Je maakt hierbij gebruik van de Closed World Assumption. Maar dat was al veel vaker het geval. B.v. ook bij queries van type “Geef alle...”.

Andere voorbeeld-DB SECRETARY NAME E# BDATE ADDRESS TSPEED Sue E Singel Mary E Damrak SALESMAN NAME E# BDATE ADDRESS LIMIT John E Rokin Joe E Nes ENGINEER NAME E# BDATE ADDRESS SPECIAL Jack E NZVBW 13 electronics Jill E NZABW 15 software

Voorbeeld query (“met  ”) “Geef voor iedere werknemer (= secretary, salesman of engineer) z’n E# en naam” { (e, n) | SECRETARY(E#: e, name: n)  SALESMAN(E#: e, name: n)  ENGINEER(E#: e, name: n)} en E1Sue E2Mary E3John E4Joe E5Jack E6Jill

Andere voorbeeld-DB PROJ J#NAME J1build-intranet J2market-research EMP_PROJ EMPE#J# E#NAME BDATE D# E2J1 E1John D1 E3J1 E2Joe D1 E3J2 E3Jack D1 E4J2 E4Will D2 E5J2 E5Bridget D2

Voorbeeld query (“met  ”) “Geef de E#’s van de werknemers die werken aan alle projecten” { (e) | EMP(E#: e)   j ( PROJ(J#: j)  EMP_PROJ(E#: e, J#: j) ) } e E3 N.B. “EMP(E#: e)  ” is hier nodig om te voorkomen dat je alle mogelijke “smurrie” als antwoord krijgt als PROJ toevallig leeg is !! Tip: Bind aan het begin van je conditie altijd alle vrije domeinvariabelen d.m.v. een “membership condition” !!

Voorbeeld Database M_ZOEKENDE NAAMADRESGJAAR MINJ MAXJ TeunNes WimSingel SjonDamstr V_ZOEKENDE NAAMADRESGJAAR MINJ MAXJ TruusAmstel BepRokin AnitaNZVBW

Voorbeeld query (“met  ”) “Geef alle paren (met naam + adres) van mannen en vrouwen, ongeacht of ze in elkaars gewenste leeftijdscategorie vallen” { (mn, ma, vn, va) |M_ZOEKENDE(naam: mn, adres: ma)  V_ZOEKENDE(naam: vn, adres: va) }

Resultaat query mn mavn va Teun Nes 30Truus Amstel 80 Teun Nes 30Bep Rokin 42 Teun Nes 30Anita NZVBW 18 Wim Singel 23Truus Amstel 80 Wim Singel 23Bep Rokin 42 Wim Singel 23Anita NZVBW 18 Sjon Damstr 9Truus Amstel 80 Sjon Damstr 9Bep Rokin 42 Sjon Damstr 9Anita NZVBW 18

Voorbeeld query (“met  ”) “Geef alle paren (met naam + adres) van mannen en vrouwen, ongeacht of ze in elkaars gewenste leeftijdscategorie vallen” { PAAR(m_naam, m_adres, v_naam, v_adres) | M_ZOEKENDE(naam: m_naam, adres: m_adres)  V_ZOEKENDE(naam: v_naam, adres: v_adres) } òf: { PAAR(m_naam: mn, m_adres: ma, v_naam: vn, v_adres: va) | M_ZOEKENDE(naam: mn, adres: ma)  V_ZOEKENDE(naam: vn, adres: va) }

Resultaat query (“met  ”) PAAR m_naamm_adresv_naamv_adres TeunNes 30Truus Amstel 80 Teun Nes 30Bep Rokin 42 Teun Nes 30Anita NZVBW 18 Wim Singel 23Truus Amstel 80 Wim Singel 23Bep Rokin 42 Wim Singel 23Anita NZVBW 18 Sjon Damstr 9Truus Amstel 80 Sjon Damstr 9Bep Rokin 42 Sjon Damstr 9Anita NZVBW 18

Relationeel volledig (relationally complete) u domeincalculus is relationeel compleet, want je kunt er dezelfde queries mee opstellen als met de operaties { , , , ,  } in de relationele algebra

Voorbeeld complexe queries (I) ZOEKENDE NAAM ADRES GESL GJAARMINJ MAXJ Teun Nes 30 M Wim Singel 23 M Sjon Damstr 9 M Truus Amstel 80 V Bep Rokin 42 V Anita NZVBW 18 V “Geef de namen en adressen van alle eventuele paren, d.w.z. tweetallen personen van tegenovergesteld geslacht die binnen elkaars gewenste leeftijdscategorie vallen”

Voorbeeld query (I) “Geef de namen en adressen van alle eventuele paren, d.w.z. tweetallen personen van tegenovergesteld geslacht die binnen elkaars gewenste leeftijdscategorie vallen” { (mn, ma, vn, va) |  m_gjaar  m_minj  m_maxj  v_gjaar  v_minj  v_maxj (ZOEKENDE(naam: mn, adres: ma, gesl: ‘M’, gjaar: m_gjaar, minj: m_minj, maxj: m_maxj)  ZOEKENDE(naam: vn, adres: va, gesl: ‘V’, gjaar: v_gjaar, minj: v_minj, maxj: v_maxj)  v_minj  m_gjaar  m_gjaar  v_maxj  m_minj  v_gjaar  v_gjaar  m_maxj) }

Voorbeeld complexe queries (I) mn ma vn va Teun Nes 30 Truus Amstel 80 Teun Nes 30 Bep Rokin 42 Wim Singel 23 Truus Amstel 80 Wim Singel 23 Bep Rokin 42 Sjon Damstr 9 Anita NZVBW 18

Voorbeeld complexe queries (II) CAN_SUPPLY SUPPLIERPART PRICE s1 p1 3 s1 p2 3NEEDED s2 p1 2PART s2 p2 3 p1 s2 p3 4 p2 s3 p1 4 p3 s3 p2 3 s3 p3 3 “Geef de supplier(s) die alles s3 p4 8 kunnen leveren wat we nodig hebben”

Voorbeeld complexe queries (II) “Geef de supplier(s) die alles kunnen leveren wat we nodig hebben” { (s) | CAN_SUPPLY(supplier: s)   p ( NEEDED(part: p)  CAN_SUPPLY(supplier: s, part: p) ) } In de (beperkte) domeincalculus zoals tot nu toe gepresenteerd, kan b.v. nog niet uitgedrukt worden: “Geef voor iedere supplier die alles kan leveren wat we nodig hebben, z’n totaalprijs”

Voorbeeld complexe queries (III) DRAAITFAN_VAN STATIONARTIESTPERSOONARTIEST CountryCarpenters JanOP CountryParton PietMeeuwis NoordzeeHazes JoostBorsato NoordzeeBorsato JoostCarpenters NoordzeeMeeuwis Radio10MeeuwisLUISTERT_NAAR Radio10ElvisPERSOONSTATION Radio10Abba JanRadio10 PietNoordzee JoostRadio10 JoostNoordzee

Voorbeeld complexe queries (III.a) “Geef de artiesten die gedraaid worden op de stations waar Joost naar luistert” { (a) |  s (DRAAIT(station: s, artiest: a)  LUISTERT_NAAR(persoon: “Joost”, station: s)) } a Hazes Borsato Meeuwis Elvis Abba

Voor deze query foute expressies (ad III.a) Wat geven onderstaande expressies als resultaat? { (a) |  s (LUISTERT_NAAR(persoon: “Joost”, station: s)) } Als Joost naar  1 station luistert: ALLES (incl. ‘troep’), anders: NIETS { (a) |  s (LUISTERT_NAAR(persoon: “Joost”, station: s)) } Altijd: NIETS(Omdat LUISTER_NAAR altijd een eindig aantal tupels heeft) { (a, s) | LUISTERT_NAAR(persoon: “Joost”, station: s) } Alle mogelijke paren met als eerste element willekeurige “troep” en als tweede element een station waar Joost naar luistert.

Voorbeeld complexe queries (III.b) “Geef de fans van artiesten die nergens gedraaid worden” { (p) |  a (FAN_VAN(persoon: p, artiest: a)   s DRAAIT(station: s, artiest: a)) } p Jan

Voorbeeld complexe queries (III.c) “Geef de personen die tenminste naar ieder radiostation luisteren waar Piet ook naar luistert” (N.B. tenminste, dus eventueel ook nog naar andere stations) { (p) | LUISTERT_NAAR(persoon: p)   s (LUISTERT_NAAR(persoon: “Piet”, station: s)  LUISTERT_NAAR(persoon: p, station: s)) } p Piet Joost

Voorbeeld herschrijven van query in PNF “Geef de fans van artiesten die nergens gedraaid worden” { (p) |  a ( FAN_VAN(persoon: p, artiest: a)   s DRAAIT(station: s, artiest: a) ) }  a (FAN_VAN(p, a)   s DRAAIT(s, a))   a (FAN_VAN(p, a)   s  DRAAIT(s, a))(    )   a (  s  DRAAIT(s, a)  FAN_VAN(p, a))(f  d  d  f)   a  s (  DRAAIT(s, a)  FAN_VAN(p, a))(uitbreiden scope  )

Prenex Normal Form u Een formule f is in Prenex Normal Form (PNF) als alle quantoren aan het begin van de formule staan, d.w.z. d.e.s.d. als f van de vorm Q 1 x 1 Q 2 x 2 … Q n x n f is, waarbij Q i  { ,  } en f geen quantoren bevat u Waarom (leren) herschrijven? –helpt bij vergelijken of twee queries equivalent zijn –herschrijven query soms noodzakelijk wegens beperkingen querytaal –PNF levert in SQL vaak beter leesbare queries op

Herschrijfregels (1/3) u  f  f u f  g   f  g u f  g  g  f f  g  g  f u  (f  g)   f   g  (f  g)   f   g u f  (g  h)  (f  g)  (f  h) f  (g  h)  (f  g)  (f  h) u  x f(x)   x  f(x)  x f(x)   x  f(x)

Herschrijfregels (2/3) u Qx f(x)  Qy f(y) hierbij moet elk voorkomen van x dat vrij is in f, vervangen door y u Qx f(x)  g  Qx (f(x)  g) hierbij mag in g géén vrij voorkomen Qx f(x)  g  Qx (f(x)  g) van x zitten (als wel, dan vervangen) u Q 1 x f(x)  Q 2 x g(x)  Q 1 x Q 2 y (f(x)  g(y)) géén y vrij in f en elke Q 1 x f(x)  Q 2 x g(x)  Q 1 x Q 2 y (f(x)  g(y)) x vrij in g wordt een y u  x f(x)   y g(y)   x (f(x)  g(x)) elke y die vrij is in g,  x f(x)   y g(y)   x (f(x)  g(x)) vervangen door x u Let op:  x f(x)   y g(y)   x (f(x)  g(x)) (wel geldt:  )  x f(x)   y g(y)   x (f(x)  g(x)) (wel geldt:  )

Herschrijfregels (3/3) u  x  A: f(x)   x (x  A  f(x)) u  x  A: f(x)   x (x  A  f(x) )