1 Docent: Martijn Hengelmolen Email: [email protected] Aanwezig: maandag, dinsdag.

53
1 Docent: Martijn Hengelmolen Email: [email protected] Aanwezig: maandag, dinsdag <Mdl01 hoorcollege 1>

Transcript of 1 Docent: Martijn Hengelmolen Email: [email protected] Aanwezig: maandag, dinsdag.

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

1

Docent: Martijn HengelmolenEmail:

[email protected]: maandag, dinsdag

<Mdl01 hoorcollege 1>

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

2

Inhoud Hoorcollege 1

Waarom modelleren 1 Voorbeeld tekstueel ontwerp Opdracht

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

3

Voorbeeld model

Rechtopstaande holle cilinder

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

4

Voorbeeld model

Rechtopstaande holle cilinder Onderkant is gesloten

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

5

Voorbeeld model

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

ovaal Ovaal is kleiner dan cilinder Kleur is wit

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

6

Voorbeeld model

Een mok, waterkoker? Thermoskan?

Vraag: is dit eenduidig?

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

7

Opdracht Verzin een voorwerp Beschrijf dit voorwerp Geef tekstuele beschrijving aan

mede student.

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

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

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

9

SELECT instructie:definitie

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

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

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

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

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

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

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

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

13

SELECT instructie:FROM component (definitie)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

20

SELECT instructie:WHERE (pseudo-code)

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

if conditie=waar thenWHERE-resultaat :+ ROW;

endfor;

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

21

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

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

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

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

23

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

FROM spelersWHERE spelersnr IN (SELECT spelersnr FROM teams);

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

24

SELECT instructie:WHERE (EXISTS) SELECT naam AS aanvoerder

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

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

25

SELECT instructie:WHERE (ALL) SELECT

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

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

26

SELECT instructie:GROUP BY, HAVING volgend hoorcollege:

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

GROUP BY, HAVING

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

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

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

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

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

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)

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

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

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

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]

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

32

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

BCNF) Opdracht

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

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

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

34

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

E/R (entity-relationship) semantisch object model

controle: normaliseren

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

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)

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

36

Database ontwerp voorbeeld: administratie van uitgeleende boeken (2)

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

?

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

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’

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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)

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

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

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

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

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

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

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

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

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

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

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

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

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

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)