Databases I Relationele Algebra Martin Caminada / Wiebren de Jonge Vrije Universiteit, Amsterdam definitieve versie 2002.

Slides:



Advertisements
Verwante presentaties
Les 2 klassediagrammen II
Advertisements

SQL deel 2: datamodel ontwerp
Module 7 – Hoofdstuk 5 (1) SQL – een begin.
Datamodellering en –verwerking 8C020 college 5. Terugblik college 4 • Zeikenhuis (RM) • Querytalen • SQL – Inleiding – Data definitie – Data manipulatie.
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Meerdere tabellen: Relaties en Joins
Relationele databases en
Databases Informatica Ga verder met een muisklik. SQL FCO DBMS NE FA
Module 7 – Hoofdstuk 5 (4) SQL – voorwaarden aan groepen en meerdere tabellen.
Databank van een restaurant Download op Twee tabellen: Klanten: Alle klanten die minstens.
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Sets in een RDBS Een database
Relationele Databases
Normaliseren Datamodellering 2006.
Databases.
Databases I Van EER naar relationeel
LauwersCollege Buitenpost Informatica
Inleiding Databanken: oefeningen 4 Sven Casteleyn 4 Lokaal: 6G HomePage: te bereiken via
Computervaardigheden en Programmatie Universiteit AntwerpenDatabank - Gevorderden 5.1 Computervaardigheden en Programmatie 1rste BAC Toegepaste Biologische.
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Normalisatie Relationeel databaseontwerp:
SQL (structured Query Language) DDL (Data Definition Language) DML (Data Manipulation Language) Ontwerp databaseBevraag database.
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 (H.3) Het Entity-Relationship Model Wiebren de Jonge Vrije Universiteit, Amsterdam versie 2003.
Databases I Normaliseren Martin Caminada / Wiebren de Jonge Vrije Universiteit, Amsterdam definitieve versie 2002.
Spatial subgroup mining
Statistische functies (aggregaatfuncties)
Databases.
Laat software voor je werken
SQL ( SERVER ) Les #02: T-SQL. A GENDA Herhaling les 4 Views SELECT…INTO Beheren van tabellen: CREATE ALTER DROP Opdracht voor de volgende les.
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.
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Vakgroep Telecommunicatie en Informatieverwerking 1 Relationele databases: Het relationeel databasemodel Hoofdstuk 4 Database, Document and Content Management.
24/04/2015IT-Assurance1 IT-Assurance deeltijd 4. Inleiding SQL Introductie in de basisfuncties Bijbehorend lesmateriaal: -AIV-boek van Derksen en Crins.
Databases I (H. 7: 1-3) Het Relationele Model Wiebren de Jonge Vrije Universiteit, Amsterdam versie 2003.
Databases I Praktische aspecten Database Design en Database System Architectuur Martin Caminada / Wiebren de Jonge Vrije Universiteit, Amsterdam definitieve.
Databases I (Info) 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 (H.9.4) Domeincalculus 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.
College 3 Hoofdstuk 3: Basis concepten van een relationele database
Les 0 Structured Query Language SQL. Programma Les 0 – Introductieopdracht Les 1 Les 2 Les 3 Schriftelijke toets.
Java Objectgeoriënteerd Programmeren in Java met BlueJ
ANALYSE 3 INFANL01-3 WEEK CMI Informatica.
ANALYSE 3 INFANL01-3 WEEK CMI Informatica.
Analyse 3 INFANL01-3 week 2 CMI Informatica.
ANALYSE 3 INFANL01-3 WEEK 8 CMI Informatica. ANALYSE 3- INFANL01-3 ▸ Vorige les ▸ Herhaling ▸ Normaliseerregels ▸ Omzetten ERD ▸ Group by en SET ▸ Proeftentamen.
Week 1 BIMAIV03 Les B2 BIMAIV03 Les B2. Uit het voorgaande... CREATE TABLE... Opdracht om een nieuwe tabel binnen de database te creëren. Aandachtspunten.
ANALYSE 3 INFANL01-3 WEEK 6 CMI Informatica. ANALYSE 3- INFANL01-3 ▸ Vorige les ▸ Subqueries met correlaties ▸ Subqueries zonder correlaties ▸ Views ▸
Wat is SQL (1)? SQL (Structured Query Language):  is een zeer krachtige taal met een beperkt vocabulaire (aantal ‘woorden’)  is declaratief (‘WAT’ niet.
– Software development fundamentals
Een computersysteem organiseert gegevens in een hiërarchie die begint bij een bit die de waarde 0 of een 1 vertegenwoordigt. Bits kunnen worden gegroepeerd.
SQL Les February 2019.
SQL Les 3 17 February 2019.
SQL Les 3 23 February 2019.
SQL Les 7 24 February 2019.
SQL Les 6 14 April 2019.
SQL Les 9 12 May 2019.
SQL Les 4 12 May 2019.
– Software development fundamentals
Software Development fundamentals
Databases SQL.
Transcript van de presentatie:

Databases I Relationele Algebra Martin Caminada / Wiebren de Jonge Vrije Universiteit, Amsterdam definitieve versie 2002

Overzicht

Queries voorbeeld query: “Geef de namen en geboortedata van de employees die bij department engineering werken” een query is een vraag naar specifieke informatie uit de database (merk op: in de database-wereld worden update-opdrachten veelal ook tot het begrip “query” gerekend)

Voorbeeld Database DEPARTMENT D#NAMEBUDGET D1engineering500,000 D2sales200,000 DEPENDENT EMPLOYEEE#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

Resultaat query “Geef de namen en geboortedata van de employees die bij department engineering werken” NAMEBDATE John Joe Jack

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

Relationele Algebra u idee: querytaal bestaande uit operaties, gedefinieerd op één of meerdere tabellen, die elk weer opnieuw een tabel opleveren u operaties: –select (  ) –project (  ) –intersection (  ) –union (  ) / outer union –difference (-) –carthesisch product (  ) –theta join (|> <|) –division (÷)

Voorbeeld Select (  ) “Geef alle employees die werken bij department D2”  DNO=“D2” EMPLOYEE E#NAME BDATE D# E4Will D2 E5Bridget D2

Select:  cond (REL) u select condition is van de vorm: –attribuutnaam comp waarde –attribuutnaam comp attribuutnaam met comp  { ‘  ’, ‘  ’, ‘  ’, ‘  ’, ‘  ’, ‘  ’ } (select condition werkt dus op één individueel tupel!) u select condition mag AND, OR of NOT bevatten (voorbeeld:  DNO=“D1” AND BDATE < “ ” EMPLOYEE)

Voorbeeld Project (  ) “Geef voor elke employee z’n naam en geboortedatum”  NAME, BDATE EMPLOYEE NAME BDATE John Joe Jack Will Bridget

Project:  attr_1, attr_2 … attr_n (REL) u geeft voor ieder tupel uit REL een tupel met uitsluitend de attributen attr_1, attr_2 … attr_n u attr_1, attr_2 … attr_n moeten attributen zijn van relatie REL u dubbele tupels worden geëlimineerd

Voorbeeld Theta Join (|><|) “Geef de namen van de dependents van Will” EMP(E_E#, E_NAME, BDATE, D#)  EMPLOYEE DPD(D_E#, D_NAME, REL)  DEPENDENT EMP_DPD  EMP |><| E_E#=D_E# DPD RESULT   D_NAME (  E_NAME = “Will” (EMP_DPD)) NAME Suzie Tom Mary

Tussenresultaat na theta join EMP_DPD E_E#E_NAME BDATE D# D_E# D_NAME REL E3Jack D1 E3 Mary daughter E3Jack D1 E3 Sue wife E4Will D2 E4 Suzie daughter E4Will D2 E4 Tom son E4Will D2 E4 Mary wife

Theta Join:REL1 |><| cond REL2 u voegt tupels van verschillende relaties bij elkaar. resultaat: tupels met attributen van beide relaties u REL1 en REL2 mogen geen attributen met dezelfde naam hebben u join condition is van de vorm: attribuutnaam_rel1 comp attribuutnaam_rel2 met comp  { ‘  ’, ‘  ’, ‘  ’, ‘  ’, ‘  ’, ‘  ’ } u join condition mag meerdere voorwaarden bevatten (cond_1 AND cond_2 AND … AND cond_n) u equijoin: theta join met join conditie(s) uitsluitend ‘=‘

Voorbeeld Natural Join (  ) “Geef de namen van de dependents van Will” EMP(E#, E_NAME, BDATE, D#)  EMPLOYEE DPD(E#, D_NAME, REL)  DEPENDENT EMP_DPD  EMP  DPD RESULT   D_NAME  E_NAME=“Will” EMP_DPD

Tussenresultaat na natural join EMP_DPD E#E_NAME BDATE D# D_NAME REL E3Jack D1 Mary daughter E3Jack D1 Sue wife E4Will D2 Suzie daughter E4Will D2 Tom son E4Will D2 Mary wife

Natural Join:REL1  REL2 u voegt tupels van verschillende relaties bij elkaar u join conditie: attributen met dezelfde naam moeten dezelfde waarde(n) hebben (alternatief: join attributen expliciet specificeren: EMP  (E#), (E#) DPD) u join conditie kan gebaseerd zijn op meerdere attributen: REL1(A, B, C, D)  REL2(C, D, E, F) u attributen met dezelfde naam komen slechts één keer in het resultaat voor

Voorbeeld Cartesisch Product (  ) “Geef de namen van de dependents van Will” EMP(E_E#, E_NAME, BDATE, D#)  EMPLOYEE DPD(D_E#, D_NAME, REL)  DEPENDENT EMP_DPD   E_E# = D_E# (EMP  DPD) RESULT   D_NAME (  E_NAME=“Will” (EMP_DPD))

Cartesisch Product:REL1  REL2 u voegt tupels van verschillende relaties bij elkaar. resultaat: tupels met attributen van beide relaties u REL1 en REL2 mogen geen attributen met dezelfde naam hebben u cartesisch product kan gezien worden als join zonder join condition

Voorbeeld Verschil (  ) “Geef de E#’s en namen van de ongehuwde engineering-employees” DPM(D#, DPM_NAME, BUDGET)  DEPARTMENT EMP(E#, EMP_NAME, BDATE, D#)  EMPLOYEE DPD(E#, DPD_NAME, REL)  DEPENDENT ENGINEERS   DPM_NAME=“engineering” ( EMP  DPM) MARRIED   REL=“husband” OR REL=“wife” ( EMP  DPD) RESULT   (  E#,EMP_NAME ENGINEERS)  (  E#,EMP_NAME MARRIED) E#EMP_NAME E1John E2Joe

Vereniging (  ) / Doorsnede (  ) / Verschil (  ) u geeft respectievelijk wiskundige vereniging, doorsnede en verschil van twee relaties u voorwaarde: “union compatible” REL1(A1, A2, … An) en REL2(B1, B2, … Bm) zijn union compatible indien: –ze dezelfde graad hebben (d.w.z. n=m), en –dom(Ai) = dom(Bi) voor iedere 1  i  n u merk op: relationele algebra bevat geen complement operator

Voorbeeld Database PROJECT J#NAME J1build-intranet J2market-research EMP_PROJ EMPLOYEEE#J# E#NAME BDATE D# E2J1 E1John D1 E3J1 E2Joe D1 E3J2 E3Jack D1 E4J2 E4Will D2 E5J2 E5Bridget D2

Voorbeeld Division (  ) “Geef de E#’s van de employees die werken aan alle projecten” EMP_PROJ  (  J# PROJECT))) E#J# E2J1 E3J1J#E# E3J2  J1=E3 E4J2J2 E5J2

Division:REL1  REL2 u REL1  REL2 met REL1(A1, A2, … An, B1, B2, … Bm) en REL2(B1, B2, … Bm) geeft de waarden van A1, A2, … An die in REL1 voorkomen in combinatie met alle waarden (tupels) die in REL2 voorkomen u alternatieve definitie (domeincalculus): {a1, a2, … an |  b1, b2, … bm: (REL2(b1, b2, … bm)  REL1(a1, a2, … an, b1, b2, … bm))}

Relationeel compleet u de verzameling operaties { , , , ,  } is relationeel compleet: andere operaties (zoals |><|, ,  of  ) kunnen hierin worden uitgedrukt

Herschrijven doorsnede (  ) R  S  (R  S)  ((R  S)  (S  R))

Herschrijven theta join (|><|) R |><| cond S   cond (R  S)

Herschrijven division (  ) (neem JNRS   J# PROJECT) ALL_PROJ_EMPS  EMP_PROJ  JNRS geeft hetzelfde resultaat als: ALL_EMPS   E# EMP_PROJ NOT_WORKING_ON  (ALL_EMPS  JNRS)  EMP_PROJ ALL_PROJ_EMPS  ALL_EMPS   E# NOT_WORKING_ON

Voorbeeld Outer Join (=|><|) “Geef van iedere employee zijn E# en (indien aanwezig) de naam van zijn/haar echtgenoot(e)” EMP(E_E#, E_NAME, BDATE, D#)  EMPLOYEE DPD(D_E#, D_NAME, REL)  DEPENDENT ECHTGENOTEN   REL=“husband” OR REL=“wife” DPD  E_E#, D_NAME (EMP =|><| E_E# = D_E# ECHTGENOTEN)

Tussenresultaat direct na outer join E#E_NAME BDATE D# D_E# D_NAME REL E1John D1 null null null E2Joe D1 null null null E3Jack D1 E3 Sue wife E4Will D2 E4 Mary wife E5Bridget D2 null null null

Resultaat outer join E_E# D_NAME E1 null E2 null E3 Sue E4 Mary E5 null

(Left) Outer Join:REL1 =|><| REL2 u REL1 =|><| REL2 bevat: –de tupels die zouden worden geproduceerd door een theta join –de tupels uit REL1 waarvoor er geen bijbehorend tupel uit REL2 bestaat dat voldoet aan de join-condition; deze tupels worden aangevuld met null-waarden voor de attributen van REL2 u ook bij de outer join geldt als voorwaarde dat REL1 en REL2 geen attributen met dezelfde naam bevatten

Voorbeeld Database SECRETARY NAME SSN BDATE ADDRESS TSPEED Sue Singel Mary Damrak SALESMAN NAME SSN BDATE ADDRESS LIMIT John Rokin Joe Nes ENGINEER NAME SSN BDATE ADDRESS SPECIAL Jack NZVBW 13 electronics Jill NZABW 15 software

Voorbeeld Outer Union “Geef van alle employees (= secretary, salesman of engineer) de naam, ssn en (indien aanwezig) typesnelheid” EVERYBODY  SECRETARY OUTER_UNION SALESMAN OUTER_UNION ENGINEER RESULT   NAME, SSN, TSPEED (EVERYBODY)

Tussenresultaat (direct na outer unions) EVERYBODY NAME SSN BDATE ADDRESS TSPEED LIMIT SPECIAL Sue Singel null null Mary Damrak null null John Rokin 21 null null Joe Nes 87 null null Jack NZVBW 13 null null electronics Jill NZABW 15 null null software

Eindresultaat RESULT NAME SSN TSPEED Sue Mary John 003 null Joe 004 null Jack 005 null Jill 006 null

REL1 Outer Union REL2  REL1 OUTER_UNION REL2: –gedefinieerd op relaties die partially compatible zijn (d.w.z. slechts sommige attributen zijn union compatible) –levert relatie op met tupels met attributen van REL1 of REL2 (of beide) –tupels die uit REL1 afkomstig zijn hebben null-waarden voor attributen die uitsluitend in REL2 zitten –tupels die uit REL2 afkomstig zijn hebben null-waarden voor attributen die uitsluitend in REL1 zitten Outer Union mag alleen als je in het resultaat een Primary Key kunt definiëren

Keys Stel, je hebt: EMP(E#, E_NAME, BDATE, E_D#)  EMPLOYEE DPM(D_D#, D_NAME, BUDGET)  DEPARTMENT Wat wordt dan de key van: u EMP |><| E_D# = D_D# DPM antwoord: E_E# u EMP  DPM antwoord: (E_E#, D_D#) u  E_D# = D_D# (EMP  DPM) antwoord: E_E# in relaties die resultaat zijn van relationele algebra operaties kun je (zolang er geen null-waarden zijn) altijd een primary key definiëren

Voorbeeld Aggregate functions “Geef het gemiddelde department-budget” F AVERAGE BUDGET DEPARTMENT AVERAGE_BUDGET “Geef per D# het aantal employees” D# F COUNT E# EMPLOYEE D#COUNT_E# D1 3 D2 2

Agg. Functions: grouping_attr F function_list REL u grouping attributes behoren allen tot REL u functies: –count –minimum –maximum –sum –average u resulterende relatie bevat een tupel voor iedere verschillende waarde van de grouping attributes

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

Voorbeeld complexe queries (I) M_ZOEKENDE(M_NAAM, M_ADRES, M_GJAAR, M_MINJ, M_MAXJ)   NAAM, ADRES, GJAAR, MINJ, MAXJ  GESL=“M” ZOEKENDE V_ZOEKENDE(V_NAAM, V_ADRES, V_GJAAR, V_MINJ, V_MAXJ)   NAAM, ADRES, GJAAR, MINJ, MAXJ  GESL=“V” ZOEKENDE COMBINATIE  M_ZOEKENDE |><| V_MINJ  M_GJAAR  V_MAXJ V_ZOEKENDE AND M_MINJ  V_GJAAR  M_MAXJ PAAR   M_NAAM, M_ADRES, V_NAAM, V_ADRES COMBINATIE

Voorbeeld complexe queries (I) M_ZOEKENDE M_NAAM M_ADRESM_GJAAR M_MINJ M_MAXJ TeunNes WimSingel SjonDamstr V_ZOEKENDE V_NAAM V_ADRES V_GJAARV_MINJ V_MAXJ Truus Amstel Bep Rokin Anita NZVBW

Voorbeeld complexe queries (I) PAAR M_NAAM M_ADRESV_NAAMV_ADRES Teun Nes 30 TruusAmstel 80 Teun Nes 30 BepRokin 42 Wim Singel 23 TruusAmstel 80 Wim Singel 23 BepRokin 42 Sjon Damstr 9 AnitaNZVBW 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 voor iedere supplier s3 p4 8die alles kan leveren wat we nodig hebben z’n totaalprijs”

Voorbeeld complexe queries (II) “Geef voor iedere supplier die alles kan leveren wat we nodig hebben z’n totaalprijs” TOTAL_SUPPLIERS  (  SUPPLIER, PART CAN_SUPPLY)  NEEDED CAN_SUPPLY_RELEVANT  CAN_SUPPLY  TOTAL_SUPPLIERS  NEEDED RESULT  SUPPLIER F SUM PRICE CAN_SUPPLY_RELEVANT

Voorbeeld complexe queries (II) SUPPLIERPART s1 p1 s1 p2 s2 p1 PART s2 p2 p1 SUPPLIER s2 p3  p2 =s2 s3 p1 p3s3 s3 p2 s3 p3 s3 p4

Voorbeeld complexe queries (II) SUPPLIERPRICE PART s1 3 p1 s1 3 p2 s2 2 p1PART s2 3 p2 p1 SUPPLIER PRICE s2 4 p3  p2 = s3 4 p1 p3 s3 3 p2 s3 3 p3 s3 8 p4zo moet het dus niet...

Voorbeeld complexe queries (II) CAN_SUPPLY SUPPLIERPART PRICE s1 p1 3 NEEDED s1 p2 3 PART s2 p1 2 p1 s2 p2 3 p2 s2 p3 4 p3 s3 p1 4 s3 p2 3 s3 p3 3TOTAL_SUPPLIERS s3 p4 8SUPPLIER s2 s3

Voorbeeld complexe queries (II) CAN_SUPPLY_RELEVANT SUPPLIERPART PRICE s2 p1 2 s2 p2 3 RESULT s2 p3 4 SUPPLIER SUM_PRICE s3 p1 4s2 9 s3 p2 3s310 s3 p3 3

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) “Geef de artiesten die gedraaid worden op de stations waar Joost naar luistert”  ARTIEST (  STATION  PERSOON=“Joost” LUISTERT_NAAR  DRAAIT) alternatief:  ARTIEST  PERSOON=“Joost” ( LUISTERT_NAAR  DRAAIT)

Voorbeeld complexe queries (III) “Geef de fans van artiesten die nergens gedraaid worden” GELIEFDE_ART   ARTIEST FAN_VAN GEDRAAIDE_ART   ARTIEST DRAAIT GEMISTE_ART  GELIEFDE_ART  GEDRAAIDE_ART RESULT   PERSOON (FAN_VAN  GEMISTE_ART)

Voorbeeld complexe queries (III) “Geef de personen die tenminste naar ieder radiostation luisteren waar Piet ook naar luistert (eventueel ook nog naar andere stations)” PIET_STATIONS   STATION  PERSOON=“Piet” LUISTERT_NAAR RESULT  LUISTERT_NAAR  PIET_STATIONS

Thuis u nalezen: 7.4 t/m 7.7 u voorbereiden: 9.4 u huiswerk: –opgave 5 –opgave 12 (gewijzigd)