Document

advertisement
<Mdl01 hoorcollege 1>
Docent: Martijn Hengelmolen
Email:
[email protected]
Aanwezig: maandag, dinsdag
1
Inhoud Hoorcollege 1



Waarom modelleren 1
Voorbeeld tekstueel ontwerp
Opdracht
2
Voorbeeld model

Rechtopstaande holle cilinder
3
Voorbeeld model


Rechtopstaande holle cilinder
Onderkant is gesloten
4
Voorbeeld model





Rechtopstaande holle cilinder
Onderkant is gesloten
Aan de zijkant zit een driekwart ovaal
Ovaal is kleiner dan cilinder
Kleur is wit
5
Voorbeeld model


Een mok, waterkoker? Thermoskan?
Vraag: is dit eenduidig?
6
Opdracht



Verzin een voorwerp
Beschrijf dit voorwerp
Geef tekstuele beschrijving aan mede
student.
7
SELECT basisbegrippen
hoofdstuk 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
8
SELECT instructie:
definitie
<select-instructie>::=
<select-component>
<from-component>
[<where-component>]
[<group-by-component>]
[<having-component>]
[<order-by-component>]
9
SELECT instructie:
voorbeeld
SELECT PNAAM, LEEFTIJD
FROM PATIENT
WHERE LEEFTIJD > 50;
PAT#
1234
2345
2346
1243
PNAAM
Jansen
Smit
Lopez
Peters
LEEFTIJD
21
56
35
89
[kolom(men)]
[tabel(len)]
[voorwaarde voor rij]
GESLACHT
M
V
V
M
ARTS
Schouten
van Dijk
Kleine
Oei
10
SELECT instructie:
volgorde van uitvoeren
(intern)
SELECT [kolommen]
FROM [tabellen]
WHERE [voorwaarde voor rij]
ORDER BY [kolom]
1. FROM
2. WHERE
3. SELECT
[3]
[1]
[2]
[4]
4. ORDER BY
a
b
11
SELECT instructie:
volgorde (voorbeeld)
1. FROM A
SELECT ANO, ANAAM
FROM A
WHERE KLEUR=‘Blauw’
ORDER BY ANAAM
ANO
A1
A2
A3
A4
A5
A6
ANAAM
Moer
Bout
Schroef
Schroef
Kamrad
Nok
KLEUR
Rood
Groen
Blauw
Rood
Blauw
Rood
GEW
12
17
17
14
12
19
PLAATS
Londen
Parijs
Rome
Londen
Parijs
Londen
2. WHERE KLEUR=‘Blauw’
ANO
A3
A5
ANAAM
Schroef
Kamrad
KLEUR
Blauw
Blauw
GEW
17
12
PLAATS
Rome
Parijs
3. SELECT ANO, ANAAM
ANO
A3
A5
ANAAM
Schroef
Kamrad
4. ORDER BY ANAAM
ANO
A5
A3
ANAAM
Kamrad
Schroef
12
SELECT instructie:
FROM component (definitie)
<from-component> ::=
FROM <tabelref> [{,<tabelref>}...]
<tabelref> ::=
<tabelspec> [[AS] <alias>]
<tabelspec> ::=
[<user>.] tabelnaam
13
SELECT instructie:
FROM component (voorbeeld)
SELECT teamnr, naam
FROM teams AS t, spelers AS s
WHERE t.spelersnr = s.spelersnr
Dit is een voorbeeld van een natural join
14
Natural join in stapjes:
1. FROM - input
teams
TEAMNR SPELERSNR DIVISIE
1
12
2
2
14
2
3
15
3
spelers
SPELERSNR
11
12
13
14
15
NAAM
Jansen
Pietersen
Smit
Vlas
Stolk
SELECT ....
FROM teams AS t, spelers AS s
15
Natural join in stapjes:
2. FROM - resultaat
SELECT ... FROM teams AS t, spelers AS s
TEAMNR
1
1
1
1
1
2
2
2
2
2
3
3
3
3
3
SPELERSNR
12
12
12
12
12
14
14
14
14
14
15
15
15
15
15
DIVISIE
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
SPELERSNR
11
12
13
14
15
11
12
13
14
15
11
12
13
14
15
NAAM
Jansen
Pietersen
Smit
Vlas
Stolk
Jansen
Pietersen
Smit
Vlas
Stolk
Jansen
Pietersen
Smit
Vlas
Stolk
16
Natural join in stapjes:
3. WHERE - input
WHERE t.spelersnr = s.spelersnr;
TEAMNR
1
1
1
1
1
2
2
2
2
2
3
3
3
3
3
SPELERSNR
12
12
12
12
12
14
14
14
14
14
15
15
15
15
15
DIVISIE
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
SPELERSNR
11
12
13
14
15
11
12
13
14
15
11
12
13
14
15
NAAM
Jansen
Pietersen
Smit
Vlas
Stolk
Jansen
Pietersen
Smit
Vlas
Stolk
Jansen
Pietersen
Smit
Vlas
Stolk
17
Natural join in stapjes:
4. WHERE - resultaat
SELECT ... FROM teams AS t, spelers AS s
WHERE t.spelersnr = s.spelersnr;
TEAMNR
1
2
3
SPELERSNR
12
14
15
DIVISIE
2
2
3
SPELERSNR
12
14
15
NAAM
Pietersen
Vlas
Stolk
18
Natural join in stapjes:
5. SELECT - resultaat
SELECT teamnr, naam as aanvoerder
FROM teams AS t, spelers AS s
WHERE t.spelersnr = s.spelersnr;
TEAMNR
1
2
3
AANVOERDER
Pietersen
Vlas
Stolk
19
SELECT instructie:
WHERE (pseudo-code)
WHERE-resultaat := [ ];
for each ROW in FROM-resultaat do
if conditie=waar then
WHERE-resultaat :+ ROW;
endfor;
20
SELECT instructie:
WHERE (operatoren etc)







vergelijking: = < > <= >= <>
AND, OR, NOT
BETWEEN, IN, LIKE, NULL
IN met subquery
vergelijkingsoperator met subquery
ANY, ALL
EXISTS
21
SELECT instructie:
WHERE (voorbeelden)



WHERE
GEB_DATUM > ‘1970-12-31’
AND
NOT NAAM = ‘Haas’;
WHERE
GEB_DATUM BETWEEN ‘1960-1-1’ AND
‘1970-1-1’;
WHERE
NAAM IN (‘Smit’,’Jansen’,’Zwart’);
22
SELECT instructie:
WHERE (IN met subquery)

SELECT naam AS aanvoerder
FROM spelers
WHERE spelersnr IN
(SELECT spelersnr FROM teams);
23
SELECT instructie:
WHERE (EXISTS)

SELECT naam AS aanvoerder
FROM spelers
WHERE EXISTS
(SELECT * FROM teams
WHERE spelersnr=spelers.spelersnr);
24
SELECT instructie:
WHERE (ALL)

SELECT
naam+’ is het oudst’ AS oudste,
geb_datum
FROM spelers
WHERE geb_datum <= ALL
(SELECT geb_datum FROM spelers);
25
SELECT instructie:
GROUP BY, HAVING

volgend hoorcollege:


SET functies
(COUNT, SUM, MIN, MAX, AVG, STDEV)
GROUP BY, HAVING
26
Referentiele Integriteit

spelernsnr in beide tabellen moeten
gesynchroniseerd blijven
foreign key
teams
TEAMNR SPELERSNR
1
12
2
14
3
15
primary key
DIVISIE
2
2
3
spelers
SPELERSNR
11
12
13
14
15
NAAM
Jansen
Pietersen
Smit
Vlas
Stolk
27
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));
28
Referentiele Integriteit
refererende 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)
29
Referentiele Integriteit
refererende acties

alternatief 1:



ON UPDATE CASCADE
ON DELETE CASCADE
(dwz update/delete van een spelersnr
in de SPELERS tabel triggert automatisch
een update/delete in TEAMS)
alternatief 2:


ON UPDATE SET NULL
ON DELETE SET NULL
30
Referentiele Integriteit
vragen

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]
31
Database Ontwerp





Wat is het?
Hoe doe je het?
Voorbeeld
Normaliseren (1NF, 2NF, 3NF, BCNF)
Opdracht
32
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
33
Database ontwerp :
Hoe doe je het?

ontwerpmethoden (zie [Kroenke]):



E/R (entity-relationship)
semantisch object model
controle:

normaliseren
34
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)
35
Database ontwerp voorbeeld:
administratie van uitgeleende boeken (2)

bedenk eerst hoe je het zonder geautomatiseerd systeem zou doen!
?
36
Database ontwerp voorbeeld:
administratie van uitgeleende boeken (3)

bedenk eerst hoe je het zonder geautomatiseerd systeem zou doen!


schrift met 1 regel per uitgeleend boek
(auteur, titel, lener_naam,
lener_telnr, sinds)
vgl. database met 1 tabel:
‘uitgeleende boeken’
37
Database ontwerp voorbeeld:
administratie van uitgeleende boeken (4)
auteur
Damasio
Edelman
Singh
Kaufman
Maddox
Horgan

titel
The Feeling of What Happens
Bright Air, Brilliant Fire
The Code Book
At Home in the Universe
Wat we nog niet weten
The End of Science
lener_telnr
020-6123123
020-6456456
040-8345345
020-6123123
020-6123123
040-8345345
sinds
15-5-2001
15-6-2001
25-5-2001
15-8-2001
22-9-2001
15-2-2001
problemen:



lener_naam
Wim
Gijs
Tim
Wim
Wim
Tim
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
38
Database ontwerp voorbeeld:
administratie van uitgeleende boeken (5)
uitgeleende boeken
auteur
titel
lener
sinds
Damasio The Feeling of WhatWim
Happens 15-5-2001
Edelman Bright Air, Brilliant Fire
Gijs
15-6-2001
Singh
The Code Book
Tim
25-5-2001
Kaufman At Home in the Universe
Wim
15-8-2001
Maddox Wat we nog niet weten
Wim
22-9-2001
Horgan
The End of ScienceTim
15-2-2001

leners
naam
Tim
Wim
Gijs
telnr
040-8345345
020-6123123
020-6456456
oplossing: 2 tabellen


schrift met uitgeleende boeken
adresboekje (of GSM telefoon): naam + telnr
39
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
40
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
41
Normalisatie: 2NF
PK
leverbare artikelen
LNO
ANO
L1
A1
L1
A2
L1
A3
L1
A4
L1
A5
L1
A6
L2
A1
L2
A2
L3
A2
L4
A2
L4
A4
L4
A5
HOEV
STATUS
300
20
200
20
400
20
200
20
100
20
100
20
300
10
400
10
200
10
200
20
300
20
400
20
PLAATS
Londen
Londen
Londen
Londen
Londen
Londen
Parijs
Parijs
Parijs
Londen
Londen
Londen
42
Normalisatie: 2NF
PK
PK
leverbare artikelen
LNO
ANO
L1
A1
L1
A2
L1
A3
L1
A4
L1
A5
L1
A6
L2
A1
L2
A2
L3
A2
L4
A2
L4
A4
L4
A5
leveranciers
LNO
STATUS
L1
20
L2
10
L3
10
L4
20
HOEV
300
200
400
200
100
100
300
400
200
200
300
400
PLAATS
Londen
Parijs
Parijs
Londen
43
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 niettransitief afhankelijk is van de primaire
sleutel
44
Normalisatie: 3NF
PK
leveranciers
LNO
STATUS
L1
20
L2
10
L3
10
L4
20
PLAATS
Londen
Parijs
Parijs
Londen
2NF
leveranciers
LNO
PLAATS
L1
Londen
L2
Parijs
L3
Parijs
L4
Londen
plaatsen
PLAATS
Londen
Parijs
STATUS
20
10
3NF
45
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)
46
Normalisatie: BCNF
(Boyce/Codd Normal Form)
leverbare artikelen
LNO
LNAAM
L1
Smith
L1
Smith
L1
Smith
L1
Smith
L1
Smith
L1
Smith
L2
Jones
L2
Jones
L3
Blake
L4
Clark
L4
Clark
L4
Clark
ANO
A1
A2
A3
A4
A5
A6
A1
A2
A2
A2
A4
A5
HOEV
300
200
400
200
100
100
300
400
200
200
300
400
47
Normalisatie: BCNF
(Boyce/Codd Normal Form)
leverbare artikelen
LNO
ANO
L1
A1
L1
A2
L1
A3
L1
A4
L1
A5
L1
A6
L2
A1
L2
A2
L3
A2
L4
A2
L4
A4
L4
A5
HOEV
300
200
400
200
100
100
300
400
200
200
300
400
leveranciers
LNO
LNAAM
L1
Smith
L2
Jones
L3
Blake
L4
Clark
TELNR
010-1231233
010-2342345
010-3453456
010-4564567
48
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
49
Opdracht (5 minuten)

Breng in BCNF:
cijfers
SNR
1
2
3
1
2
3
3
SNAAM
Jansen
Smit
Pietersen
Jansen
Smit
Pietersen
Pietersen
VAK
CIJFER
databases
cryptografie
Java
Java
databases
cryptografie
C
7
8
9
6
7
8
9
DOCENT D_TELNR
Gerritsen
4111
de Vlas
4112
Meima
4113
Meima
4113
Gerritsen
4111
de Vlas
4112
Meima
4113
50
Opdracht

Afhankelijkheden:
cijfers
SNR
1
2
3
1
2
3
3
SNAAM
Jansen
Smit
Pietersen
Jansen
Smit
Pietersen
Pietersen
VAK
CIJFER
databases
cryptografie
Java
Java
databases
cryptografie
C
7
8
9
6
7
8
9
DOCENT D_TELNR
Gerritsen
4111
de Vlas
4112
Meima
4113
Meima
4113
Gerritsen
4111
de Vlas
4112
Meima
4113
51
Opdracht
oplossing (BCNF)

aannames:


cijfers
SNR
1
2
3
1
2
3
3
docentnaam is uniek, vaknaam is uniek
1 vak wordt door 1 docent gegeven
VAK
CIJFER
databases
cryptografie
Java
Java
databases
cryptografie
C
7
8
9
6
7
8
9
studenten
SNR
1
2
3
SNAAM
Jansen
Smit
Pietersen
docenten
DOCENT D_TELNR
Gerritsen
4111
de Vlas
4112
Meima
4113
vakken
VAK
DOCENT
databases Gerritsen
cryptografiede Vlas
Java
Meima
C
Meima
52
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)
53
Download