Upload
lotte-smeets
View
225
Download
1
Embed Size (px)
Citation preview
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)