De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Datamodellering en –verwerking 8C020 college 4. Terugblik college 3 Relationeel Model – Extra verhaal: Turing machines, Cellulaire automaten, Game of.

Verwante presentaties


Presentatie over: "Datamodellering en –verwerking 8C020 college 4. Terugblik college 3 Relationeel Model – Extra verhaal: Turing machines, Cellulaire automaten, Game of."— Transcript van de presentatie:

1 Datamodellering en –verwerking 8C020 college 4

2 Terugblik college 3 Relationeel Model – Extra verhaal: Turing machines, Cellulaire automaten, Game of Life Transformatie van ERM naar Relationeel Model Transformatie van entiteiten en relaties Opdracht Oefening: Zeikenhuis (RM)

3 Onderwerpen college 4 Normalisatie Querytalen SQL – Inleiding – Data definitie – Data manipulatie – Apsecten van SQL – Oefeningen

4 Goed gestructureerd bij het ontwerpen van relaties streef je naar – een minimum aan redundantie en – de situatie dat gebruikers rijen kunnen toevoegen, veranderen, of wegnemen zonder dat er fouten ontstaan

5 Een niet goed gestructureerde relatie 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

6 Anomalieën anomalie van toevoegen – nieuwe werknemer toevoegen een waarde voor beide cursus en wind moet er ingevoerd worden – werknemer zonder cursus? anomalie van verwijderen – verwijderen gegevens werknemer als werknemer 140 wordt verwijderd zijn we de informatie kwijt dat er op iemand een cursus heeft afgerond anomalie van wijzigen – veranderen van salaris moet in elk van de rijen voor de weknemer gebeuren – niet efficient

7 Normalisatie Probleem – WN2 bevat gegevens over twee entiteiten Oplossing –Verdeel zo’n relatie in twee relaties: WN1 en WN-CURSUS

8 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

9 Software Life Cycle/Fasering analyseren eisen specificeren ontwerpen coderen testen invoeren onderhouden Omgevings anlyse, ontwikkelingsplan (kosten en tijd) Eisen, planning en begroting, haalbarheidsanalyse Conceptueel model Iplementatiemodel, handleidigen, testmodel Code, onderhoudshandeling tesrapporten Installatie, acceptierapport Correctief, preventief, modificatief

10 Querytaal de wijze van verwerken van gegevens met een database hangt af van – de eigenschappen van de database – de eigenschappen van de taal en het gereedschap voor het verwerken een querytaal (eigenlijk query- en updatetaal) is een taal voor het specificeren van de definitie en manipulatie van data

11 Querytaal als interface een querytaal biedt een interface tussen DBMS en gebruiker sommige querymechanismen zijn intuïtief en eenvoudig – QBE (Query By Example) sommige querytalen zijn uitgebreider en krachtiger en lijken meer op programmeertalen (''wel wat, niet hoe'') – SQL een querytaal heeft een duale rol: – definitie – manipulatie

12 SQL SQL (Structured Query Language) is geintroduceerd door IBM, 1979 – San Jose Research Laboratory – Sequel (voorouder), begin jaren ‘70 SQL is de meest gebruikte querytaal en de de-facto standaard er zijn veel dialecten en varianten van SQL beschikbaar

13 SQL data-definitie – het definiëren van relaties en databases en het veranderen van definities data-manipulatie – formuleren van queries – toevoegen van gegevens – verwijderen van gegevens – wijzigen van gegevens

14 Taal en DBMS een querytaal is nauw verbonden met een DBMS om gegevens te gaan definiëren zijn meestal privileges (autorisatie) nodig SQL (of de SQL-omgeving) biedt faciliteiten voor de toegang tot de gegevens eerst inloggen op het DBMS Interactief gebruik

15 Definiëren van een database Coderen/implementatie fase van de “life cycle” we gebruiken de volgende opdracht om een database aan te maken met de naam ziekenhuis CREATE DATABASE ziekenhuis ANSI-standaard gebruikt schema in plaats van database CREATE SCHEMA ziekenhuis

16 Definiëren van een tabel we beginnen met de volgende uitdrukking als we een tabel willen definiëren met gegevens over patiënten CREATE TABLE patienten het DBMS weet dan dat er een tabel gaat zijn met gegevens over patiënten

17 Attributen en domeinen we gebruiken de volgende uitdrukking om vast te leggen dat we een attribuut hebben voor patiëntennummer met als domein alle rijtjes van 5 karakters en dat bovendien een primaire sleutel is patnr char(5) not null unique – de naam van het attribuut – het domein van het attribuut integer smallint float real date – mag het attribuut null-waarden hebben? – moeten de waarden in verschillende records verschillend zijn?

18 Volledige definitie van een tabel CREATE TABLE patienten (patnr char(5) not null unique, naam char(20), voornaam char(15), huisarts integer not null, gebdatum date );

19 Veranderen van definities verwijderen van een database DROP DATABASE ziekenhuis; verwijderen van een tabel DROP TABLE patienten; veranderen van een tabel ALTER TABLE patienten DROP huisarts; ALTER TABLE patienten ADD aantkind integer;

20 Onderhouden van privileges SQL biedt commando’s voor het onderhouden van de toegangsrechten GRANT SELECT.. GRANT INSERT.. GRANT UPDATE.. GRANT DELETE..

21 View, index view – een imaginaire, niet echt bestaande tabel die door het DBMS wordt afgeleid van bestaande tabellen en net als een gewone tabel is te gebruiken index – een DBMS-mechanisme om snelle toegang te bieden tot gegevens standaard is er bijvoorbeeld een index gebaseerd op de primaire sleutel

22 Data-manipulatie data-manipulatie is niet mogelijk zonder data-definitie in de praktijk zijn deze activiteiten soms gescheiden (bijvoorbeeld bij verschillende gebruikers) de doelstelling van data-manipulatie is om gegevens te – inspecteren wat is de waarde van...? – veranderen vervang de waarde van... door...

23 Voorbeeld patnrnaamvoornaamhuisartsgebdatum 12345AppelsArno PerenPom StormsPim AppelsArno JanssenJeff BrandsmaHein tabel voor patienten

24 SELECT FROM eerst specificeren we welke attributen we willen hebben SELECT patnr, naam dan duiden we aan uit welke tabel de gegevens komen FROM patienten de volledige query ziet er dan als volgt uit SELECT patnr, naam FROM patienten;

25 Voorbeeld patnrnaamvoornaamhuisartsgebdatum 12345AppelsArno PerenPom StormsPim AppelsArno JanssenJeff BrandsmaHein de query SELECT patnr, naam FROM patienten; toegepast op patnrnaam 12345Appels 23456Peren 34567Storms 12346Appels 24564Janssen 76543Brandsma levert op

26 DISTINCT, * de tabellen in SQL bevatten dubbele rijen dus ook de antwoorden op queries bevatten dubbele waarden met DISTINCT worden dubbele waarden uitgesloten SELECT DISTINCT naam FROM patienten; * met * worden alle attributen aangeduid SELECT * FROM patienten;

27 WHERE met behulp van een WHERE -uitdrukking kunnen we een voorwaarde vastleggen voor de selectie van rijen uit een tabel SELECT patnr, naam FROM patienten WHERE huisarts = 13; 1. beschouw stuk voor stuk de rijen uit de tabel van FROM 2. verifieer of de rij voldoet aan de voorwaarde van WHERE 3. geef voor de overgebleven rijen de attributen van SELECT

28 Voorbeeld SELECT patnr, naam FROM patienten WHERE huisarts = 13; patnrnaamvoornaamhuisartsgebdatum 12345AppelsArno PerenPom StormsPim AppelsArno JanssenJeff BrandsmaHein patnrnaam 12345Appels 23456Peren resultaat

29 AND en OR voorwaarden in de WHERE-regel kunnen gecombineerd worden met AND en OR SELECT patnr, naam FROM patienten WHERE huisarts = 3 AND gebdatum = ' '; SELECT patnr, huisarts FROM patienten WHERE gebdatum = ' ' OR gebdatum = ' ';

30 Opgave 5.1 wat drukt de volgende query uit? SELECT patnr, huisarts FROM patienten WHERE gebdatum = ' ' AND gebdatum = ' ';

31 != het symbool != wordt gebruikt voor de ongelijkheid SELECT patnr, naam FROM patienten WHERE naam != 'De Groot';

32 NOT het symbool NOT wordt gebruikt voor de ontkenning SELECT patnr FROM patienten WHERE NOT(gebdatum =' ' OR gebdatum = ' ');

33 LIKE het symbool LIKE wordt gebruikt voor bijna-gelijk SELECT naam FROM patienten WHERE naam LIKE 'J%'; of... WHERE naam LIKE 'J__s';

34 Opgave 5.2 wat drukt de volgende query uit? SELECT naam FROM patienten WHERE voornaam != 'Bas';

35 Voorbeeld we hebben een relatie (tabel) ouders met attributen ouder en kind ouders(ouder,kind) opgave 5.3 wat drukt de volgende query uit? SELECT ouder FROM ouders WHERE kind != 'Bas';

36 BETWEEN het symbool BETWEEN wordt gebruikt voor intervallen SELECT naam FROM patienten WHERE huisarts BETWEEN 7 AND 10;

37 IN het symbool IN wordt gebruikt voor verzamelingen SELECT * FROM patienten WHERE gebdatum IN (%90,%91,%92);

38 UNION het symbool UNION wordt gebruikt voor de vereniging SELECT naam, huisarts FROM patienten WHERE gebdatum IN (%90,%91,%92) UNION SELECT naam, huisarts FROM patienten WHERE voornaam = 'Jan';

39 Veranderen van gegevens je wil niet alleen opgeslagen informatie opvragen maar ook opgeslagen informatie veranderen (onderhoud) SQL biedt commando's voor het verwijderen, toevoegen en wijzigen van gegevens

40 DELETE met het DELETE -command verwijderen we rijen uit een tabel DELETE FROM patienten WHERE patnr = '9399'; DELETE FROM patienten WHERE naam = 'Appels'; DELETE FROM patienten;

41 INSERT met het INSERT -commando voegen we een record toe aan een tabel INSERT INTO patienten VALUES('9401','Dikker','Ruud', 12, );

42 UPDATE met het UPDATE -commando wijzigen we (waarden van) records UPDATE patienten SET huisarts = 25 WHERE huisarts = 20;

43 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

44 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

45 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

46 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

47 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

48 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

49 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

50 Join voorbeeld SELECT * FROM patienten, huisartsen; voorbeeld SELECT * FROM patienten, huisartsen WHERE patienten.huisarts = huisartsen.hanr;

51 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';

52 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);

53 Opgave 5.4 wat drukt de volgende query uit? SELECT pnaam FROM patienten WHERE NOT huisarts IN SELECT hanr FROM huisartsen WHERE haplaats = 'Eindhoven';

54 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?

55 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';

56 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;

57 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;

58 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 ?

59 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';

60 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

61 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

62 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


Download ppt "Datamodellering en –verwerking 8C020 college 4. Terugblik college 3 Relationeel Model – Extra verhaal: Turing machines, Cellulaire automaten, Game of."

Verwante presentaties


Ads door Google