Datamodellering en –verwerking 8C020 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 – 1 ste, 2 de, 3 de normaal form • Oefeningen ER, RM, SQL
Join - voorbeeld Patnrpnaampadrespwoonplhuisartsgeb 12345AppelsBrink 12Son PerenMarkt 1Son StormsLaan 88Oss AppelsLaan 86Oss JanssenWeg 4aAlmere BrandsmaWeg 67Almere hanrhanaamhaadreshaplaats 13B. BrandsmaBrink 89Son 14S. StormsLaan 84Oss 15G. de GrootWeg 17Lelystad 16G. GrotenWeg 19Almere
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 pnaamhanaam AppelsB. Brandsma PerenB. Brandsma StormsS. Storms AppelsS. Storms JanssenG. Groten BrandsmaG. 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 pnaamhanaam AppelsB. Brandsma PerenB. Brandsma StormsS. Storms AppelsS. Storms JanssenG. de Groot BrandsmaG. de Groot geef de namen van patiënten en de namen van hun huisartsen
Join pnaamhanaam AppelsB. Brandsma PerenB. Brandsma StormsS. Storms AppelsS. Storms SELECT pnaam, hanaam FROM patienten, huisartsen WHERE patienten.huisarts = huisartsen.hanr AND 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';
Subqeries behalve 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 WNIDNAAMAFDSALARISCURSUSDATUM 100Anna BruinsmaVerkoop50.000PR Anna BruinsmaVerkoop50.000Word Carla DikAdministratie41.000Belastingen Eef GroenInformatiesystemen49.000C Eef GroenInformatiesystemen49.000Word Henk IsraëlInkoop39.500Logistiek Janny KramerVerkoop45.000PR Janny KramerVerkoop45.000Workflow
Normalisatie •Probleem – WN2 bevat gegevens over twee entiteiten •Oplossing –Verdeel zo’n relatie in twee relaties: WN1 en WN-CURSUS
Normalisatie WN1 WNIDNAAMAFDSALARIS 100Anna BruinsmaVerkoop Carla DikAdministratie Eef GroenInformatiesystemen Henk IsraëlInkoop Janny KramerVerkoop WN-CURSUS WNIDCURSUSDATUM 100PR Word Belastingen C Word Logistiek PR Workflow
Normaalvormen 1 ste normaalvorm: Alle rijen hebben dezelfde lengte 2 de normaalvorm: Elk niet sleutel attribuut is een feit over de hele primaire sleutel (niet alleen over een deel van de sleutel) 3 de 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)”