Datamodellering en –verwerking 8C020 college 5. Terugblik college 4 • Zeikenhuis (RM) •...

27
Datamodellering en –verwerking 8C020 college 5

Transcript of Datamodellering en –verwerking 8C020 college 5. Terugblik college 4 • Zeikenhuis (RM) •...

Page 1: Datamodellering en –verwerking 8C020 college 5. Terugblik college 4 • Zeikenhuis (RM) • Querytalen • SQL – Inleiding – Data definitie – Data manipulatie.

Datamodellering en –verwerking8C020

college 5

Page 2: Datamodellering en –verwerking 8C020 college 5. Terugblik college 4 • Zeikenhuis (RM) • Querytalen • SQL – Inleiding – Data definitie – Data manipulatie.

Terugblik college 4

• Zeikenhuis (RM)

• Querytalen

• SQL – Inleiding– Data definitie– Data manipulatie– Apsecten van SQL– Oefeningen

Page 3: Datamodellering en –verwerking 8C020 college 5. Terugblik college 4 • Zeikenhuis (RM) • Querytalen • SQL – Inleiding – Data definitie – Data manipulatie.

Onderwerpen college 5

• Aspecten van SQL – Join – Subqueries

• Oefeningen SQL

• Normalisatie– 1ste, 2de, 3de normaal form

• Oefeningen ER, RM, SQL

Page 4: Datamodellering en –verwerking 8C020 college 5. Terugblik college 4 • Zeikenhuis (RM) • Querytalen • SQL – Inleiding – Data definitie – Data manipulatie.

Join - voorbeeld

Patnr pnaam padres pwoonpl huisarts geb

12345 Appels Brink 12 Son 13 03-05-68

23456 Peren Markt 1 Son 13 23-06-70

34567 Storms Laan 88 Oss 14 13-06-36

12346 Appels Laan 86 Oss 14 23-12-45

24564 Janssen Weg 4a Almere 15 01-07-39

76543 Brandsma Weg 67 Almere 15 01-11-71

hanr hanaam haadres haplaats

13 B. Brandsma Brink 89 Son

14 S. Storms Laan 84 Oss

15 G. de Groot Weg 17 Lelystad

16 G. Groten Weg 19 Almere

Page 5: Datamodellering en –verwerking 8C020 college 5. Terugblik college 4 • Zeikenhuis (RM) • Querytalen • SQL – Inleiding – Data definitie – Data manipulatie.

Join

het leggen van een verbinding tussen tabellen

kan met behulp van een join-operatie

 

SELECT pnaam, hanaam

FROM patienten, huisartsen

WHERE patienten.pwoonpl =

huisartsen.haplaats;

 

1. beschouw stuk voor stuk de rijen uit de eerste FROM tabel

2. beschouw stuk voor stuk de rijen uit de tweede FROM tabel

3. verifieer of de combinatie voldoet aan de WHERE regel

4. geef voor de goede combinaties de SELECT attributen

Page 6: Datamodellering en –verwerking 8C020 college 5. Terugblik college 4 • Zeikenhuis (RM) • Querytalen • SQL – Inleiding – Data definitie – Data manipulatie.

Join

pnaam hanaam

Appels B. Brandsma

Peren B. Brandsma

Storms S. Storms

Appels S. Storms

Janssen G. Groten

Brandsma G. Groten

geef de namen van patiënten en de namen van huisartsen waarvoor geldt dat de patiënt woont in de plaats waar de huisarts praktijk houdt

Page 7: Datamodellering en –verwerking 8C020 college 5. Terugblik college 4 • Zeikenhuis (RM) • Querytalen • SQL – Inleiding – Data definitie – Data manipulatie.

Join

• in principe krijgen we bij een join combinaties van willekeurige tupels 

• meestal hebben we behoefte aan combinaties van gerelateerde tupels

 

SELECT pnaam, hanaam

FROM patienten, huisartsen

WHERE patienten.huisarts =

huisartsen.hanr;

 

1. beschouw stuk voor stuk de rijen uit de eerste FROM tabel

2. beschouw stuk voor stuk de rijen uit de tweede FROM tabel

3. verifieer of de combinatie voldoet aan de WHERE regel

4. geef voor de goede combinaties de SELECT attributen

Page 8: Datamodellering en –verwerking 8C020 college 5. Terugblik college 4 • Zeikenhuis (RM) • Querytalen • SQL – Inleiding – Data definitie – Data manipulatie.

Join

pnaam hanaam

Appels B. Brandsma

Peren B. Brandsma

Storms S. Storms

Appels S. Storms

Janssen G. de Groot

Brandsma G. de Groot

geef de namen van patiënten en de namen van hun huisartsen

Page 9: Datamodellering en –verwerking 8C020 college 5. Terugblik college 4 • Zeikenhuis (RM) • Querytalen • SQL – Inleiding – Data definitie – Data manipulatie.

Join

pnaam hanaam

Appels B. Brandsma

Peren B. Brandsma

Storms S. Storms

Appels S. Storms

SELECT pnaam, hanaamFROM patienten, huisartsenWHERE patienten.huisarts = huisartsen.hanrAND patienten.woonpl = huisartsen.haplaats;

geef de namen van patiënten en de namen van hun huisartsen voor die patiënten waarvoor geldt dat zij wonen in de plaats waar hun huisarts praktijk houdt

Page 10: Datamodellering en –verwerking 8C020 college 5. Terugblik college 4 • Zeikenhuis (RM) • Querytalen • SQL – Inleiding – Data definitie – Data manipulatie.

Join

voorbeeld

 

SELECT *

FROM patienten, huisartsen;

 

voorbeeld

 

SELECT *

FROM patienten, huisartsen

WHERE patienten.huisarts =

huisartsen.hanr;

Page 11: Datamodellering en –verwerking 8C020 college 5. Terugblik college 4 • Zeikenhuis (RM) • Querytalen • SQL – Inleiding – Data definitie – Data manipulatie.

Subqueries

binnen queries kunnen weer queries gebruikt worden

SELECT pnaam

FROM patienten

WHERE huisarts =

SELECT hanr

FROM huisartsen

WHERE hanaam = 'Brandsma';

subqueries in een tabel

SELECT pnaam

FROM patienten

WHERE huisarts =

SELECT huisarts

FROM patienten

WHERE patnr = '9912';

Page 12: Datamodellering en –verwerking 8C020 college 5. Terugblik college 4 • Zeikenhuis (RM) • Querytalen • SQL – Inleiding – Data definitie – Data manipulatie.

Subqeriesbehalve de operator = kunnen we ook andere operatoren gebruiken

om queries met elkaar te relateren

SELECT *

FROM patienten

WHERE huisarts IN

SELECT hanr

FROM huisartsen

WHERE haplaats = 'Eindhoven';

SELECT pnaam

FROM patienten

WHERE EXISTS

(SELECT hanr

FROM huisartsen

WHERE patienten.padres =

huisartsen.haadres);

Page 13: Datamodellering en –verwerking 8C020 college 5. Terugblik college 4 • Zeikenhuis (RM) • Querytalen • SQL – Inleiding – Data definitie – Data manipulatie.

Opgave 5.4

wat drukt de volgende query uit?

 

SELECT pnaam

FROM patienten

WHERE NOT huisarts IN

SELECT hanr

FROM huisartsen

WHERE haplaats = 'Eindhoven';

Page 14: Datamodellering en –verwerking 8C020 college 5. Terugblik college 4 • Zeikenhuis (RM) • Querytalen • SQL – Inleiding – Data definitie – Data manipulatie.

Voorbeeld

we hebben een relatie (tabel) ouders met attributen ouder en kind

en een relatie personen met attributen naam en leeftijd

ouders(ouder,kind)

personen(naam,leeftijd)

 opgave 5.5

wat drukt de volgende query uit?

SELECT ouder

FROM ouders

WHERE NOT kind IN

SELECT naam

FROM personen

WHERE leeftijd = '6';

en wat als er NOT in de laatste regel staat?

Page 15: Datamodellering en –verwerking 8C020 college 5. Terugblik college 4 • Zeikenhuis (RM) • Querytalen • SQL – Inleiding – Data definitie – Data manipulatie.

Opgave5.6

wat drukt de volgende query uit?

 

SELECT pnaam

FROM patienten

WHERE huisarts IN

SELECT hanr

FROM huisartsen

WHERE NOT hanaam IN

SELECT hanaam

FROM huisartsen

WHERE haplaats = 'Eindhoven';

Page 16: Datamodellering en –verwerking 8C020 college 5. Terugblik college 4 • Zeikenhuis (RM) • Querytalen • SQL – Inleiding – Data definitie – Data manipulatie.

Notatie

• als we in een query meerdere keren dezelfde relatie gebruiken moeten we aangeven welke attributen bij welke relaties horen

 

SELECT x.pnaam, y.pnaam

FROM patienten x, patienten y

WHERE x.huisarts = y.huisarts;

Page 17: Datamodellering en –verwerking 8C020 college 5. Terugblik college 4 • Zeikenhuis (RM) • Querytalen • SQL – Inleiding – Data definitie – Data manipulatie.

Voorbeeld

we hebben een relatie (tabel) ouders met attributen ouder en kind

ouders(ouder,kind)

 

opgave 5.7.a

wat drukt de volgende query uit?

 

SELECT x.ouder, y.kind

FROM ouders x, ouders y

WHERE x.kind = y.ouder; 

 

opgave 5.7.b

wat drukt de volgende query uit?

 

SELECT x.ouder, y.kind

FROM ouders x, ouders y;

 

Page 18: Datamodellering en –verwerking 8C020 college 5. Terugblik college 4 • Zeikenhuis (RM) • Querytalen • SQL – Inleiding – Data definitie – Data manipulatie.

Opgave 5.8

wat drukt de volgende query uit?

 

SELECT ouder

FROM ouders

WHERE kind IN

SELECT ouder

FROM ouders;

 

 

 

en wat met WHERE NOT kind IN ?

Page 19: Datamodellering en –verwerking 8C020 college 5. Terugblik college 4 • Zeikenhuis (RM) • Querytalen • SQL – Inleiding – Data definitie – Data manipulatie.

Opgave 5.9

wat drukt de volgende query uit?

 

SELECT ouder

FROM ouders

WHERE NOT ouder IN

SELECT ouder

FROM ouders

WHERE kind IN

SELECT naam

FROM personen

WHERE leeftijd = '3';

Page 20: Datamodellering en –verwerking 8C020 college 5. Terugblik college 4 • Zeikenhuis (RM) • Querytalen • SQL – Inleiding – Data definitie – Data manipulatie.

Opgave 5.10

druk in SQL uit:

 geef van alle ouders de leeftijden

 

druk in SQL uit:

 geef van alle ouders en grootouders de leeftijden

 

druk in SQL uit:

 geef alle personen die ouder zijn dan Bas en Anna

Page 21: Datamodellering en –verwerking 8C020 college 5. Terugblik college 4 • Zeikenhuis (RM) • Querytalen • SQL – Inleiding – Data definitie – Data manipulatie.

Functies

het is mogelijk met functies acties uit te voeren op groepen van gegevens

 

AVG(..)

SUM(..)

MAX(..)

MIN(..)

COUNT(*)

 

SELECT MAX(leeftijd)

FROM personen

WHERE naam = 'Anna';

 

SELECT MIN(leeftijd)

FROM personen, ouders

WHERE personen.naam = ouders.kind

Page 22: Datamodellering en –verwerking 8C020 college 5. Terugblik college 4 • Zeikenhuis (RM) • Querytalen • SQL – Inleiding – Data definitie – Data manipulatie.

Queryoptimalisatie

de formulering van queries kan (bijvoorbeeld met joins en subqueries) tot lastige uitdrukkingen leiden

 

query-optimalisatie betekent dat de DBMS-implementatie zorgt voor de vertaling naar een equivalente uitdrukking die sneller en efficiënter verwerkt kan worden

 

waarschuwing

 

• in de theorie is sprake van verzamelingen dus geen dubbele rijen en waarden

• in een SQL implementatie is sprake van tabellen met dubbele rijen

Page 23: Datamodellering en –verwerking 8C020 college 5. Terugblik college 4 • Zeikenhuis (RM) • Querytalen • SQL – Inleiding – Data definitie – Data manipulatie.

SQL en andere programmeertalen

• Embedded SQL

• Dynamic SQL– ODBC (Open Data Base Connectivity) – JDBC (Java Data Base Connectivity)

• Web technologien, “Data driven sites”– MySQL & php, Java scripts

Page 24: Datamodellering en –verwerking 8C020 college 5. Terugblik college 4 • Zeikenhuis (RM) • Querytalen • SQL – Inleiding – Data definitie – Data manipulatie.

Normalisatie

WN2

WNID NAAM AFD SALARIS CURSUS DATUM

100 Anna Bruinsma Verkoop 50.000 PR 6-6-94

100 Anna Bruinsma Verkoop 50.000 Word 1-12-94

140 Carla Dik Administratie 41.000 Belastingen 25-8-94

110 Eef Groen Informatiesystemen 49.000 C++ 13-11-94

110 Eef Groen Informatiesystemen 49.000 Word 1-12-94

190 Henk Israël Inkoop 39.500 Logistiek 8-3-94

150 Janny Kramer Verkoop 45.000 PR 6-6-94

150 Janny Kramer Verkoop 45.000 Workflow 11-12-94

Page 25: Datamodellering en –verwerking 8C020 college 5. Terugblik college 4 • Zeikenhuis (RM) • Querytalen • SQL – Inleiding – Data definitie – Data manipulatie.

Normalisatie

• Probleem– WN2 bevat gegevens over twee entiteiten

• Oplossing – Verdeel zo’n relatie in twee relaties: WN1 en WN-CURSUS

Page 26: Datamodellering en –verwerking 8C020 college 5. Terugblik college 4 • Zeikenhuis (RM) • Querytalen • SQL – Inleiding – Data definitie – Data manipulatie.

Normalisatie

WN1WNID NAAM AFD SALARIS100 Anna Bruinsma Verkoop 50.000140 Carla Dik Administratie 41.000110 Eef Groen Informatiesystemen 49.000

190 Henk Israël Inkoop 39.500150 Janny Kramer Verkoop 45.000

 WN-CURSUS

WNID CURSUS DATUM 

100 PR 6-6-94 

100 Word 1-12-94 

140 Belastingen 25-8-94  

110 C++ 13-11-94 

110 Word 1-12-94 

190 Logistiek 8-3-94 

150 PR 6-6-94 

150 Workflow 11-12-94 

Page 27: Datamodellering en –verwerking 8C020 college 5. Terugblik college 4 • Zeikenhuis (RM) • Querytalen • SQL – Inleiding – Data definitie – Data manipulatie.

Normaalvormen

1ste normaalvorm:

Alle rijen hebben dezelfde lengte

2de normaalvorm:

Elk niet sleutel attribuut is een feit over de hele primaire sleutel (niet alleen over een deel van de sleutel)

3de normaalvorm:

Elk niet sleutel attribuut is geen feit over een ander attribuut dat geen primaire sleutel is

Elk niet sleutel attribuut is een feit over

“the key, the whole key, and nothing but the key, (so help me Codd)”