1 Docent: Martijn Hengelmolen Email: Hengelmolen@initworks.com Aanwezig: maandag, dinsdag.

Post on 14-Jun-2015

224 views 1 download

Transcript of 1 Docent: Martijn Hengelmolen Email: Hengelmolen@initworks.com Aanwezig: maandag, dinsdag.

1

Docent: Martijn HengelmolenEmail:

Hengelmolen@initworks.comAanwezig: maandag, dinsdag

<Mdl01 hoorcollege 1>

2

Inhoud Hoorcollege 1

Waarom modelleren 1 Voorbeeld tekstueel ontwerp Opdracht

3

Voorbeeld model

Rechtopstaande holle cilinder

4

Voorbeeld model

Rechtopstaande holle cilinder Onderkant is gesloten

5

Voorbeeld model

Rechtopstaande holle cilinder Onderkant is gesloten Aan de zijkant zit een driekwart

ovaal Ovaal is kleiner dan cilinder Kleur is wit

6

Voorbeeld model

Een mok, waterkoker? Thermoskan?

Vraag: is dit eenduidig?

7

Opdracht Verzin een voorwerp Beschrijf dit voorwerp Geef tekstuele beschrijving aan

mede student.

8

SELECT basisbegrippenhoofdstuk 5 [van der Lans] datatypen (num, alfanum, datum/tijd) systeemvariabelen (USER, TODAY) expressies (o.a. CASE) scalaire vs. set functies:

scalaire functies: input is 1 rij set functies: input is verzameling rijen

casting

9

SELECT instructie:definitie

<select-instructie>::=<select-component><from-component>[<where-component>][<group-by-component>][<having-component>][<order-by-component>]

10

SELECT instructie:voorbeeld

SELECT PNAAM, LEEFTIJD [kolom(men)]

FROM PATIENT [tabel(len)]

WHERE LEEFTIJD > 50; [voorwaarde voor rij]

PAT# PNAAM LEEFTIJD GESLACHT ARTS1234 Jansen 21 M Schouten2345 Smit 56 V van Dijk2346 Lopez 35 V Kleine1243 Peters 89 M Oei

11

SELECT instructie:volgorde van uitvoeren (intern)

SELECT [kolommen] [3]

FROM [tabellen] [1]

WHERE [voorwaarde voor rij] [2]

ORDER BY [kolom] [4]

1. FROM 2. WHERE

ab

3. SELECT 4. ORDER BY

12

SELECT instructie:volgorde (voorbeeld)

SELECT ANO, ANAAM

FROM A

WHERE KLEUR=‘Blauw’

ORDER BY ANAAM

1. FROM AANO ANAAM KLEUR GEW PLAATS

A1 Moer Rood 12 LondenA2 Bout Groen 17 ParijsA3 Schroef Blauw 17 RomeA4 Schroef Rood 14 LondenA5 Kamrad Blauw 12 ParijsA6 Nok Rood 19 Londen

2. WHERE KLEUR=‘Blauw’ANO ANAAM KLEUR GEW PLAATS

A3 Schroef Blauw 17 RomeA5 Kamrad Blauw 12 Parijs

3. SELECT ANO, ANAAM ANO ANAAM

A3 SchroefA5 Kamrad

4. ORDER BY ANAAMANO ANAAM

A5 KamradA3 Schroef

13

SELECT instructie:FROM component (definitie)

<from-component> ::=FROM <tabelref> [{,<tabelref>}...]

<tabelref> ::=<tabelspec> [[AS] <alias>]

<tabelspec> ::=[<user>.] tabelnaam

14

SELECT instructie:FROM component (voorbeeld)

SELECT teamnr, naamFROM teams AS t, spelers AS sWHERE t.spelersnr = s.spelersnr

Dit is een voorbeeld van een natural join

15

Natural join in stapjes:1. FROM - input

SELECT .... FROM teams AS t, spelers AS s

teams spelers

TEAMNR SPELERSNR DIVISIE SPELERSNR NAAM

1 12 2 11 Jansen2 14 2 12 Pietersen3 15 3 13 Smit

14 Vlas15 Stolk

16

Natural join in stapjes:2. FROM - resultaat

SELECT ... FROM teams AS t, spelers AS sTEAMNR SPELERSNR DIVISIE SPELERSNR NAAM

1 12 2 11 Jansen1 12 2 12 Pietersen1 12 2 13 Smit1 12 2 14 Vlas1 12 2 15 Stolk2 14 2 11 Jansen2 14 2 12 Pietersen2 14 2 13 Smit2 14 2 14 Vlas2 14 2 15 Stolk3 15 3 11 Jansen3 15 3 12 Pietersen3 15 3 13 Smit3 15 3 14 Vlas3 15 3 15 Stolk

17

Natural join in stapjes:3. WHERE - input

WHERE t.spelersnr = s.spelersnr;TEAMNR SPELERSNR DIVISIE SPELERSNR NAAM

1 12 2 11 Jansen1 12 2 12 Pietersen1 12 2 13 Smit1 12 2 14 Vlas1 12 2 15 Stolk2 14 2 11 Jansen2 14 2 12 Pietersen2 14 2 13 Smit2 14 2 14 Vlas2 14 2 15 Stolk3 15 3 11 Jansen3 15 3 12 Pietersen3 15 3 13 Smit3 15 3 14 Vlas3 15 3 15 Stolk

18

Natural join in stapjes:4. WHERE - resultaat

SELECT ... FROM teams AS t, spelers AS s

WHERE t.spelersnr = s.spelersnr;TEAMNR SPELERSNR DIVISIE SPELERSNR NAAM

1 12 2 12 Pietersen2 14 2 14 Vlas3 15 3 15 Stolk

19

Natural join in stapjes:5. SELECT - resultaat

SELECT teamnr, naam as aanvoerder

FROM teams AS t, spelers AS sWHERE t.spelersnr = s.spelersnr;

TEAMNR AANVOERDER

1 Pietersen2 Vlas3 Stolk

20

SELECT instructie:WHERE (pseudo-code)

WHERE-resultaat := [ ];for each ROW in FROM-resultaat do

if conditie=waar thenWHERE-resultaat :+ ROW;

endfor;

21

SELECT instructie:WHERE (operatoren etc) vergelijking: = < > <= >= <> AND, OR, NOT BETWEEN, IN, LIKE, NULL IN met subquery vergelijkingsoperator met subquery ANY, ALL EXISTS

22

SELECT instructie:WHERE (voorbeelden)

WHEREGEB_DATUM > ‘1970-12-31’ ANDNOT NAAM = ‘Haas’;

WHERE GEB_DATUM BETWEEN ‘1960-1-1’ AND ‘1970-1-1’;

WHERE NAAM IN (‘Smit’,’Jansen’,’Zwart’);

23

SELECT instructie:WHERE (IN met subquery) SELECT naam AS aanvoerder

FROM spelersWHERE spelersnr IN (SELECT spelersnr FROM teams);

24

SELECT instructie:WHERE (EXISTS) SELECT naam AS aanvoerder

FROM spelersWHERE EXISTS(SELECT * FROM teams WHERE spelersnr=spelers.spelersnr);

25

SELECT instructie:WHERE (ALL) SELECT

naam+’ is het oudst’ AS oudste, geb_datumFROM spelersWHERE geb_datum <= ALL(SELECT geb_datum FROM spelers);

26

SELECT instructie:GROUP BY, HAVING volgend hoorcollege:

SET functies (COUNT, SUM, MIN, MAX, AVG, STDEV)

GROUP BY, HAVING

27

Referentiele Integriteit spelernsnr in beide tabellen

moeten gesynchroniseerd blijven

teams spelers

TEAMNR SPELERSNR DIVISIE SPELERSNR NAAM

1 12 2 11 Jansen2 14 2 12 Pietersen3 15 3 13 Smit

14 Vlas15 Stolk

primary keyforeign key

28

Referentiele Integriteit :refs aangeven bij CREATE CREATE TABLE teams(

teamnr SMALLINT NOT NULL,spelersnr SMALLINT NOT NULL,divisie CHAR(6) NOT NULL,PRIMARY KEY (teamnr),FOREIGN KEY (spelersnr)

REFERENCES spelers (spelersnr));

29

Referentiele Integriteitrefererende acties default (SOLID):

ON UPDATE RESTRICT ON DELETE RESTRICT

(dwz wijzigen/verwijderen van een spelersnr in de SPELERS tabel wordt tegengehouden als spelersnr in TEAMS voorkomt)

30

Referentiele Integriteitrefererende acties alternatief 1:

ON UPDATE CASCADE ON DELETE CASCADE

(dwz update/delete van een spelersnr in de SPELERS tabel triggert automatischeen update/delete in TEAMS)

alternatief 2: ON UPDATE SET NULL ON DELETE SET NULL

31

Referentiele Integriteitvragen wat is de beste oplossing voor

SPELERS en TEAMS? ON UPDATE [restrict, cascade, set null] ON DELETE [restrict, cascade, set null]

wat is de beste oplossing voor SPELERS en BOETES? ON UPDATE [restrict, cascade, set null] ON DELETE [restrict, cascade, set null]

32

Database Ontwerp Wat is het? Hoe doe je het? Voorbeeld Normaliseren (1NF, 2NF, 3NF,

BCNF) Opdracht

33

Database ontwerp :Wat is het ? het bepalen van de tabellen en hun

kolommen die nodig zijn om bepaalde gegevens op te slaan (structuur)

logisch ontwerp (niet fysiek) C. J. Date : ‘database design is still

very much of an art, not a science’ gegevens integriteit

34

Database ontwerp : Hoe doe je het? ontwerpmethoden (zie [Kroenke]):

E/R (entity-relationship) semantisch object model

controle: normaliseren

35

Database ontwerp voorbeeld: administratie van uitgeleende boeken (1)

voor wie : de eigenaar van de boeken

functie : het geven van een actueel overzicht

van alle uitgeleende boeken; bovendien per boek:

aan wie (het boek is uitgeleend) sinds wanneer (het boek is uitgeleend)

36

Database ontwerp voorbeeld: administratie van uitgeleende boeken (2)

bedenk eerst hoe je het zonder ge-automatiseerd systeem zou doen!

?

37

Database ontwerp voorbeeld: administratie van uitgeleende boeken (3)

bedenk eerst hoe je het zonder ge-automatiseerd systeem zou doen! schrift met 1 regel per uitgeleend

boek(auteur, titel, lener_naam, lener_telnr, sinds)

vgl. database met 1 tabel:‘uitgeleende boeken’

38

Database ontwerp voorbeeld: administratie van uitgeleende boeken (4)

auteur titel lener_naam lener_telnr sinds

Damasio The Feeling of What Happens Wim 020-6123123 15-5-2001Edelman Bright Air, Brilliant Fire Gijs 020-6456456 15-6-2001Singh The Code Book Tim 040-8345345 25-5-2001Kaufman At Home in the Universe Wim 020-6123123 15-8-2001Maddox Wat we nog niet weten Wim 020-6123123 22-9-2001Horgan The End of Science Tim 040-8345345 15-2-2001

problemen: wijzigen van telnr op meerdere plaatsen bij terugbrengen boek ook telnr weg

hoe komt dit ? afhankelijkheid : lener_naam -> lener_telnr lener_naam is een determinant van lener_telnr

39

Database ontwerp voorbeeld: administratie van uitgeleende boeken (5)

oplossing: 2 tabellen schrift met uitgeleende boeken adresboekje (of GSM telefoon): naam +

telnr

uitgeleende boeken leners

auteur titel lener sinds naam telnr

Damasio The Feeling of What HappensWim 15-5-2001 Tim 040-8345345Edelman Bright Air, Brilliant FireGijs 15-6-2001 Wim 020-6123123Singh The Code Book Tim 25-5-2001 Gijs 020-6456456Kaufman At Home in the UniverseWim 15-8-2001Maddox Wat we nog niet wetenWim 22-9-2001Horgan The End of ScienceTim 15-2-2001

40

Normalisatie: 1NF (first normal form) Definitie 1NF:

Een tabel is in 1NF als voor elke waarde van die tabel elke rij precies 1 waarde voor elke attribuut heeft

voorbeeld: in de tabel leners heeft elke rij 1 naam en 1 telnr

41

Normalisatie: 2NF Definitie 2NF:

(aanname: er is slechts 1 kandidaat sleutel die de primaire sleutel is)

Een tabel is in 2NF als deze in 1NF is, en elk niet-sleutel attribuut (op de een of andere manier) afhankelijk is van de primaire sleutel

42

Normalisatie: 2NF

leverbare artikelen

LNO ANO HOEV STATUS PLAATS

L1 A1 300 20 LondenL1 A2 200 20 LondenL1 A3 400 20 LondenL1 A4 200 20 LondenL1 A5 100 20 LondenL1 A6 100 20 LondenL2 A1 300 10 ParijsL2 A2 400 10 ParijsL3 A2 200 10 ParijsL4 A2 200 20 LondenL4 A4 300 20 LondenL4 A5 400 20 Londen

PK

43

leveranciers

LNO STATUS PLAATS

L1 20 LondenL2 10 ParijsL3 10 ParijsL4 20 Londen

Normalisatie: 2NF

leverbare artikelen

LNO ANO HOEV

L1 A1 300L1 A2 200L1 A3 400L1 A4 200L1 A5 100L1 A6 100L2 A1 300L2 A2 400L3 A2 200L4 A2 200L4 A4 300L4 A5 400

PK PK

44

Normalisatie: 3NF Definitie 3NF:

(aanname: er is slechts 1 kandidaat sleutel die de primaire sleutel is)

Een tabel is in 3NF als deze in 2NF is, en elk niet-sleutel attribuut niet-transitief afhankelijk is van de primaire sleutel

45

Normalisatie: 3NF

leveranciers

LNO STATUS PLAATS

L1 20 LondenL2 10 ParijsL3 10 ParijsL4 20 Londen

PKleveranciers

LNO PLAATS

L1 LondenL2 ParijsL3 ParijsL4 Londen

plaatsen

PLAATS STATUS

Londen 20Parijs 10

2NF 3NF

46

Normalisatie: BCNF (Boyce/Codd Normal Form) (informele) definitie:

een tabel is in BCNF als de enige determinanten kandidaat-sleutels zijn

(dwz alle afhankelijkheidspijlen beginnen bij kandidaat-sleutels)

47

Normalisatie: BCNF (Boyce/Codd Normal Form)

leverbare artikelen

LNO LNAAM ANO HOEV

L1 Smith A1 300L1 Smith A2 200L1 Smith A3 400L1 Smith A4 200L1 Smith A5 100L1 Smith A6 100L2 Jones A1 300L2 Jones A2 400L3 Blake A2 200L4 Clark A2 200L4 Clark A4 300L4 Clark A5 400

48

Normalisatie: BCNF (Boyce/Codd Normal Form)

leverbare artikelen

LNO ANO HOEV

L1 A1 300L1 A2 200L1 A3 400L1 A4 200L1 A5 100L1 A6 100L2 A1 300L2 A2 400L3 A2 200L4 A2 200L4 A4 300L4 A5 400

leveranciers

LNO LNAAM TELNR

L1 Smith 010-1231233L2 Jones 010-2342345L3 Blake 010-3453456L4 Clark 010-4564567

49

Normalisatie:conclusie Wat zijn we eigenlijk aan het doen? Normalisatie is een kwestie van

gezond verstand! De zojuist besproken methoden zijn

‘geformaliseerd’ gezond verstand! Met wat ervaring weet je intuïtief

wanneer tabellen BCNF zijn

50

Opdracht (5 minuten) Breng in BCNF:

cijfers

SNR SNAAM VAK CIJFER DOCENT D_TELNR

1 Jansen databases 7 Gerritsen 41112 Smit cryptografie 8 de Vlas 41123 Pietersen Java 9 Meima 41131 Jansen Java 6 Meima 41132 Smit databases 7 Gerritsen 4111

3 Pietersen cryptografie 8 de Vlas 4112

3 Pietersen C 9 Meima 4113

51

Opdracht Afhankelijkheden:

cijfers

SNR SNAAM VAK CIJFER DOCENT D_TELNR

1 Jansen databases 7 Gerritsen 41112 Smit cryptografie 8 de Vlas 41123 Pietersen Java 9 Meima 41131 Jansen Java 6 Meima 41132 Smit databases 7 Gerritsen 4111

3 Pietersen cryptografie 8 de Vlas 4112

3 Pietersen C 9 Meima 4113

52

Opdrachtoplossing (BCNF) aannames:

docentnaam is uniek, vaknaam is uniek 1 vak wordt door 1 docent gegeven

cijfers studenten vakken

SNR VAK CIJFER SNR SNAAM VAK DOCENT

1 databases 7 1 Jansen databases Gerritsen2 cryptografie 8 2 Smit cryptografiede Vlas3 Java 9 3 Pietersen Java Meima1 Java 6 C Meima2 databases 7 docenten

3 cryptografie 8 DOCENT D_TELNR

3 C 9 Gerritsen 4111de Vlas 4112Meima 4113

53

Zelfstudie 2 hoofdstuk 1 t/m 9 en 17 uit

[van der Lans] inclusief opgaven (niet allemaal)

doe de opgaven uitgedeeld op het college (zie ook create_art_lev_etc.sql om de tabellen aan te maken)