Datamodellering en –verwerking 8C020 college 5. Terugblik college 4 • Zeikenhuis (RM) •...
-
Upload
timo-verstraeten -
Category
Documents
-
view
212 -
download
0
Transcript of Datamodellering en –verwerking 8C020 college 5. Terugblik college 4 • Zeikenhuis (RM) •...
Datamodellering en –verwerking8C020
college 5
Terugblik college 4
• Zeikenhuis (RM)
• Querytalen
• SQL – Inleiding– Data definitie– Data manipulatie– Apsecten van SQL– Oefeningen
Onderwerpen college 5
• Aspecten van SQL – Join – Subqueries
• Oefeningen SQL
• Normalisatie– 1ste, 2de, 3de normaal form
• Oefeningen ER, RM, SQL
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
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
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
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
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
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
Join
voorbeeld
SELECT *
FROM patienten, huisartsen;
voorbeeld
SELECT *
FROM patienten, huisartsen
WHERE patienten.huisarts =
huisartsen.hanr;
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';
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);
Opgave 5.4
wat drukt de volgende query uit?
SELECT pnaam
FROM patienten
WHERE NOT huisarts IN
SELECT hanr
FROM huisartsen
WHERE haplaats = 'Eindhoven';
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?
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';
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;
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;
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 ?
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';
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
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
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
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
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
Normalisatie
• Probleem– WN2 bevat gegevens over twee entiteiten
• Oplossing – Verdeel zo’n relatie in twee relaties: WN1 en WN-CURSUS
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
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)”