Powerpoint-presentatie bij H1-10

208
Relationele Relationele databases en SQL databases en SQL hoofdstuk 1 t/m 10 hoofdstuk 1 t/m 10

Transcript of Powerpoint-presentatie bij H1-10

Page 1: Powerpoint-presentatie bij H1-10

Relationele databases Relationele databases en SQLen SQL

hoofdstuk 1 t/m 10hoofdstuk 1 t/m 10

Page 2: Powerpoint-presentatie bij H1-10

© Mattic b.v., AlmereAlle rechten voorbehouden. Het is docenten toegestaan deze diaserie te gebruiken in combinatiemet het cursusboek. Hierbij mogen ook handouts worden verspreid.Het ppt-bestand bevat voor de SQL-code een niet-standaardlettertype (Letter Gothic). Wanneer u dit niet op uw computer hebt staan, moet u de bestanden openen met het kenmerkalleen-lezen. Anders wordt het lettertype verwijderd, wat ten koste gaat van de opmaak.Zie ook: Informatie over codelettertype voor Windows- en Mac-gebruikers.doc.

Page 3: Powerpoint-presentatie bij H1-10

Cursusmateriaal

• cursusboek: Relationele databases en SQL• downloaden van www.relsql.nl:

– installatiefile voor de software:• Firebird: databasemanagementsysteem• Boekverkenner: interactieve versie van het boek• IQU (Interactive Query Utility): SQL-tool

– uitwerkingen van opgaven (pdf)– errata

3bij: Relationele databases en SQL ©Mattic b.v.

Installatie van de software:executeer de installatiefile, accepteer alle defaults

Page 4: Powerpoint-presentatie bij H1-10

Inhoud boek (1)

1 Relationele databases: structuur

2 Relationele databases: regels

3 Communiceren met een relationele database

4 Nulls

5 Normalisatie

Deel A: Relationele databases

relationele model ennormalisatie, practisch ...

… en theoretisch

‘applicatie’praat via SQLmet database

4bij: Relationele databases en SQL ©Mattic b.v.

Page 5: Powerpoint-presentatie bij H1-10

Inhoud boek (2)

6 Informatie uit één tabel

7 Informatie uit meerdere tabellen: joins

8 Statistische informatie

9 Subselects en views

10 Wijzigen van een database-inhoud

Deel B: Relationele databases bevragen en wijzigen

subtaal SQL-DML(Data ManipulationLanguage)

5bij: Relationele databases en SQL ©Mattic b.v.

Page 6: Powerpoint-presentatie bij H1-10

Inhoud boek (3)

11 Definitie van gegevensstructuren

12 Autorisatie

13 Query-optimalisatie

Deel C: Relationele databases beheren

rechten voor gebruikers

14 Aanpak van queryproblemen

15 Transacties en concurrency

16 Triggers en stored procedures

17 De datadictionary

Deel D: Verdieping

programmeren van regels

meer gebruikers

het hart van een relationeel systeem

SQL-DDL

bij grote databases

methodisch problemen oplossen

6bij: Relationele databases en SQL ©Mattic b.v.

Page 7: Powerpoint-presentatie bij H1-10

Hoofdstuk 1:Hoofdstuk 1:

Relationele Relationele databases: databases: structuurstructuur

Page 8: Powerpoint-presentatie bij H1-10

In dit hoofdstuk ….

• Een applicatie die gebruikmaakt van een relationele database

• Structuren: van gegevens in de applicatie en van gegevens in de database

• Je moet ongewenste databasestructuren kunnen herkennen en tranformeren:– herhalende groepen– redundantie (overtolligheid van gegevens)

• Standaardisatie• In deze cursus: nog geen databases ontwerpen!

8bij: Relationele databases en SQL ©Mattic b.v.

Page 9: Powerpoint-presentatie bij H1-10

Applicatie: Toetjesboek(applicatie bij Firebird-database)

9bij: Relationele databases en SQL ©Mattic b.v.

Page 10: Powerpoint-presentatie bij H1-10

Toetjesboek (applicatie)

• Functionaliteit = wat ‘doet’ de applicatie?

• Functionaliteit van Toetjesboek:– ‘onderhoud’ van gerechten, hun ingrediënten, producten en

eenheden• invoegen (insert)• verwijderen (delete)• wijzigen (update)• zoeken en bladeren

10bij: Relationele databases en SQL ©Mattic b.v.

Page 11: Powerpoint-presentatie bij H1-10

Receptwindow in applicatie (schematisch)

g e re c h t C o u p e K iw an o

e n e rg ie p e r p e rs o o n (kC a l) 4 3 1

b e re id in g s t ijd (m in u t e n ) 2 0

b e re id in g s w ijze S ch i l d e k iw an o , s n i jd h em in s tu k jes , v o eg d e teq u i la to e en laat d i t m en g s el1 5 m in u ten s taan . N eem p er p ers o o n 3 b o l let j es i j s en v o eg h ier d e k iw an om et t eq u i la aan to e. S erv eer m et g ezo et e, s t i j fg es lag en s lag ro o m .

in g re d ië n t e n p ro d u ct h o ev eelh ei d p er p ers o o n een h eid en erg ie p er een h eid (k C al )

i j sk iw an os lag ro o ms u ik ert eq u i la

0 . 1 50 . 50 . 31 01

l i ters tu k sd eci l i t erg rameet l ep el

1 6 0 04 0

3 3 64

3 0

11bij: Relationele databases en SQL ©Mattic b.v.

Page 12: Powerpoint-presentatie bij H1-10

Hoe de gegevens opslaan in database? (1)

Bezwaren:• ‘redundantie’• structuur is (onnodig) complex: de vijfde kolom heeft een

samengestelde structuur (subtabel in elke rij)

Alle gegevens van alle gerechten in één tabel?

naam energiePPbereidingstijdbereidingswijzeingrediënten

product hoeveelheidPPeenheidenergiePECoupe Kiwano 431 20 Schil ... ijs

kiwanoslagroomsuikertequila

0.150.50.3101

literstuksdecilitergrameetlepel

160040336430

Glace Terrace 403 5 Neem ... ijsaardbeienpernodpeper

0.2502

litergrameetlepel

16000.2535

Mango Plus Plus 131 8 Snijd ... mangoaardbeienzure room

0.5500.4

stuksgramdeciliter

800.25195

Gerecht

12bij: Relationele databases en SQL ©Mattic b.v.

Page 13: Powerpoint-presentatie bij H1-10

Redundantie (1)

Redundantie =reconstrueerbaarheid van gegeven(s) uit de context

Ofwel: ‘uit kunnen gummen’ en weer terug kunnen vinden!

naam energiePPbereidingstijdbereidingswijzeingrediënten

product hoeveelheidPPeenheid energiePECoupe Kiwano 431 20 Schil ... ijs

kiwanoslagroomsuikertequila

0.150.50.3101

literstuksdecilitergrameetlepel

160040336430

Glace Terrace 403 5 Neem ... ijsaardbeienpernodpeper

0.2502

grameetlepel

0.2535

Gerecht

13bij: Relationele databases en SQL ©Mattic b.v.

NB. Je moet wel weten dat er per product maar één eenheid is: beschouw dit als gegeven.

Page 14: Powerpoint-presentatie bij H1-10

Redundantie (2)

Redundantie kan tot inconsistentie leiden:

Inconsistentie =tegenstrijdigheid van gegeven(s)

Beter op één plek verkeerd dan half goed, half fout !

naam energiePPbereidingstijdbereidingswijzeingrediënten

product hoeveelheidPPeenheidenergiePECoupe Kiwano 431 20 Schil ... ijs

kiwanoslagroomsuikertequila

0.150.50.3101

literstuksdecilitergrameetlepel

160040336430

Glace Terrace 403 5 Neem ... ijsaardbeienpernodpeper

0.2502

litergrameetlepel

14500.2535

Gerecht

14bij: Relationele databases en SQL ©Mattic b.v.

Page 15: Powerpoint-presentatie bij H1-10

Herhalende groep

Bezwaren:• ingewikkelder databasebeheer• gebrek aan symmetrie in behandeling van ‘soorten van dingen’

Opslagstructuur hoort ‘neutraal’ te zijn(i.t.t. een applicatie, die taakgericht is)

naam energiePPbereidingstijdbereidingswijzeingrediënten

product hoeveelheidPPeenheidenergiePECoupe Kiwano 491 20 Schil ... ijs

kiwanoslagroomsuikertequilatopaz

0.150.50.31011

literstuksdecilitergrameetlepelstuks

16004033643060

Glace Terrace ... ... ... ... ... ... ...Mango Plus Plus ... ... ... ... ... ... ...Macedoine 175 10 Snijd ... mango

tangarinecherimoya

0.511

stuksstuksstuks

806075

Gerecht

toevoegen rij (met subtabel)in hoofdtabel toevoegen rij in subtabel

15bij: Relationele databases en SQL ©Mattic b.v.

Page 16: Powerpoint-presentatie bij H1-10

‘Omkering’ van herhalende groep

‘gerechten’ als herhalende groep bij producten!

naam eenheid energiePEgerechten

gerecht energiePPbereidingstijdbereidingswijzehoeveelheidPPijs liter 1600 Coupe Kiwano

Glace Terrace431403

205

Schil ...Neem ...

0.150.2

kiwano stuks 40 Coupe Kiwano 431 20 Schil ... 0.5slagroom deciliter 336 Coupe Kiwano 431 20 Schil ... 0.3suiker gram 4 Coupe Kiwano 431 20 Schil ... 10tequila eetlepel 30 Coupe Kiwano 431 20 Schil ... 1aardbeien gram 0.25 Glace Terrace

Mango Plus Plus403131

58

Neem ...Snijd ...

5050

pernod eetlepel 35 Glace Terrace 403 5 Neem ... 2peper Glace Terrace 403 5 Neem ...mango stuks 80 Mango Plus Plus 131 8 Snijd ... 0.5zure room deciliter 195 Mango Plus Plus 131 8 Snijd ... 0.4

Product

16bij: Relationele databases en SQL ©Mattic b.v.

Page 17: Powerpoint-presentatie bij H1-10

17

Eliminerenherhalendegroep

bij: Relationele databases en SQL ©Mattic b.v.

naam energiePPbereidingstijdbereidingswijzeingrediënten

product hoeveelheidPPeenheid energiePECoupe Kiwano 431 20 Schil ... ijs

kiwanoslagroomsuikertequila

0.150.50.3101

literstuksdecilitergrameetlepel

160040336430

Glace Terrace 403 5 Neem ... ijsaardbeienpernodpeper

0.2502

litergrameetlepel

16000.2535

Mango Plus Plus 131 8 Snijd ... mangoaardbeienzure room

0.5500.4

stuksgramdeciliter

800.25195

Gerecht

gerecht product hoeveelheidPPeenheid energiePECoupe KiwanoCoupe KiwanoCoupe KiwanoCoupe KiwanoCoupe KiwanoGlace TerraceGlace TerraceGlace TerraceGlace TerraceMango Plus PlusMango Plus PlusMango Plus Plus

ijskiwanoslagroomsuikertequilaijsaardbeienpernodpepermangoaardbeienzure room

0.150.50.3101

0.2502

0.5500.4

literstuksdecilitergrameetlepellitergrameetlepel

stuksgramdeciliter

160040336430

16000.2535

800.25195

Ingredient

naam energiePPbereidingstijdbereidingswijzeCoupe KiwanoGlace TerraceMango Plus Plus

431403131

2058

Schil ...Neem ...Snijd ...

Gerecht

Page 18: Powerpoint-presentatie bij H1-10

Eliminerenredundantie:‘SPOD’Single PointOf Definition:• alle informatie

op één plaats gedefinieerd

• elk ‘soort vanding’ zijn eigentabel

gerecht product hoeveelheidPPeenheid energiePECoupe KiwanoCoupe KiwanoCoupe KiwanoCoupe KiwanoCoupe KiwanoGlace TerraceGlace TerraceGlace TerraceGlace TerraceMango Plus PlusMango Plus PlusMango Plus Plus

ijskiwanoslagroomsuikertequilaijsaardbeienpernodpepermangoaardbeienzure room

0.150.50.3101

0.2502

0.5500.4

literstuksdecilitergrameetlepellitergrameetlepel

stuksgramdeciliter

160040336430

16000.2535

800.25195

Ingredient

naam energiePPbereidingstijdbereidingswijzeCoupe KiwanoGlace TerraceMango Plus Plus

431403131

2058

Schil ...Neem ...Snijd ...

Gerecht

naam eenheid energiePEijskiwanoslagroomsuikertequilaaardbeienpernodpepermangozure room

literstuksdecilitergrameetlepelgrameetlepel

stuksdeciliter

160040336430

0.2535

80195

Product

gerecht product hoeveelheidPPCoupe KiwanoCoupe KiwanoCoupe KiwanoCoupe KiwanoCoupe KiwanoGlace TerraceGlace TerraceGlace TerraceGlace TerraceMango Plus PlusMango Plus PlusMango Plus Plus

ijskiwanoslagroomsuikertequilaijsaardbeienpernodpepermangoaardbeienzure room

0.150.50.3101

0.2502

0.5500.4

Ingredient

naam energiePPbereidingstijdbereidingswijzeCoupe KiwanoGlace TerraceMango Plus Plus

431403131

2058

Schil ...Neem ...Snijd ...

Gerecht

18bij: Relationele databases en SQL ©Mattic b.v.

Page 19: Powerpoint-presentatie bij H1-10

Standaardisatie

Ook eenheden zijn dingen vanzelfstandig belang: standaardisatiegewenst ! Product

gerecht product hoeveelheidPPCoupe KiwanoCoupe KiwanoCoupe KiwanoCoupe KiwanoCoupe KiwanoGlace TerraceGlace TerraceGlace TerraceGlace TerraceMango Plus PlusMango Plus PlusMango Plus Plus

ijskiwanoslagroomsuikertequilaijsaardbeienpernodpepermangoaardbeienzure room

0.150.50.3101

0.2502

0.5500.4

Ingredient

naam eenheid energiePEijskiwanoslagroomsuikertequilaaardbeienpernodpepermangozure roombanaan

literstuksdecilitergrameetlepelgrameetlepel

stuksdeciliterstuks

160040336430

0.2535

8019540

naam energiePPbereidingstijdbereidingswijzeCoupe KiwanoGlace TerraceMango Plus Plus

431403131

2058

Schil ...Neem ...Snijd ...

Gerecht

naamliterstuksdecilitergramkilogrameetlepeltheelepel

Eenheid

19bij: Relationele databases en SQL ©Mattic b.v.

Page 20: Powerpoint-presentatie bij H1-10

relationele database =database bestaandeuit tabellen

Genormaliseerde relationele database

‘volledig genormaliseerd’: - geen herhalende groepen - geen redundantie

normalisatie garandeert niet altijd standaardisatie ! tabel Eenheid !

Product

gerecht product hoeveelheidPPCoupe KiwanoCoupe KiwanoCoupe KiwanoCoupe KiwanoCoupe KiwanoGlace TerraceGlace TerraceGlace TerraceGlace TerraceMango Plus PlusMango Plus PlusMango Plus Plus

ijskiwanoslagroomsuikertequilaijsaardbeienpernodpepermangoaardbeienzure room

0.150.50.3101

0.2502

0.5500.4

Ingredient

naamliterstuksdecilitergramkilogrameetlepeltheelepel

Eenheid

naam eenheid energiePEijskiwanoslagroomsuikertequilaaardbeienpernodpepermangozure roombanaan

literstuksdecilitergrameetlepelgrameetlepel

stuksdeciliterstuks

160040336430

0.2535

8019540

naam energiePPbereidingstijdbereidingswijzeCoupe KiwanoGlace TerraceMango Plus Plus

431403131

2058

Schil ...Neem ...Snijd ...

Gerecht

20bij: Relationele databases en SQL ©Mattic b.v.

relatie = ‘tabel’

Page 21: Powerpoint-presentatie bij H1-10

Databasestructuur: strokendiagram

Gerecht

Ingredient

Product

Eenheid

naam /energiePPbereidingstijdbereidingswijze

naam eenheid°energiePE

gerechtproducthoeveelheidPPvolgnr

naam

21bij: Relationele databases en SQL ©Mattic b.v.

Page 22: Powerpoint-presentatie bij H1-10

‘Tabel’ versus ‘relatie’

‘tabel’ in de zin van ‘relatie’:• volgorde rijen en van kolommen niet van belang• er zijn géén gelijke rijen, ook al noteer je ze meervoudig

naam energiePPbereidingstijdCoupe KiwanoGlace TerraceMango Plus Plus

431403131

2058

GerechtenergiePPbereidingstijd naam

131403431403

85205

Mango Plus PlusGlace TerraceCoupe KiwanoGlace Terrace

Gerecht

=

22bij: Relationele databases en SQL ©Mattic b.v.

Page 23: Powerpoint-presentatie bij H1-10

Informatie als verwoording van gegevens

vier ‘informatie-atomen’: Atomaireinformatie

naam energiePPbereidingstijdbereidingswijzeCoupe Kiwano 431 20 Schil ...

Gerecht

Er bestaat één gerecht met de naam 'Coupe Kiwano'

gerecht Coupe Kiwano heeft energiewaarde 431 kcal per persoon

gerecht Coupe Kiwano heeft bereidingstijd 20 minuten

gerecht Coupe Kiwano heeft bereidingswijze 'Schil ...'

23bij: Relationele databases en SQL ©Mattic b.v.

Page 24: Powerpoint-presentatie bij H1-10

Hoofdstuk 2:Hoofdstuk 2:

Relationele Relationele databases: regelsdatabases: regels

Page 25: Powerpoint-presentatie bij H1-10

In dit hoofdstuk ….

• Optionele kolommen• Uniciteitsregels• Sleutels• De referentiële integriteitsregel• Refererende actieregels• Transacties• Recursieve verwijzingen

25bij: Relationele databases en SQL ©Mattic b.v.

Page 26: Powerpoint-presentatie bij H1-10

Optionelekolommen (1)

Een null: speciaal soortwaarde (indicator datgeen gewone waarde isingevuld)Optionele kolom magnulls bevatten.

Product

gerecht product hoeveelheidPPCoupe KiwanoCoupe KiwanoCoupe KiwanoCoupe KiwanoCoupe KiwanoGlace TerraceGlace TerraceGlace TerraceGlace TerraceMango Plus PlusMango Plus PlusMango Plus Plus

ijskiwanoslagroomsuikertequilaijsaardbeienpernodpepermangoaardbeienzure room

0.150.50.3101

0.2502

0.5500.4

Ingredient

naamliterstuksdecilitergramkilogrameetlepeltheelepel

Eenheid

naam eenheidenergiePEijskiwanoslagroomsuikertequilaaardbeienpernodpepermangozure roombanaan

literstuksdecilitergrameetlepelgrameetlepel

stuksdeciliterstuks

160040336430

0.2535

8019540

naam energiePPbereidingstijdbereidingswijzeCoupe KiwanoGlace TerraceMango Plus Plus

431403131

2058

Schil ...Neem ...Snijd ...

Gerecht

nulls

26bij: Relationele databases en SQL ©Mattic b.v.

Page 27: Powerpoint-presentatie bij H1-10

Optionele kolommen (2)

Optionele kolom in strokendiagram: o

Gerecht

Ingredient

Product

Eenheid

naam /energiePP°bereidingstijdbereidingswijze

naam eenheid°energiePE°

gerechtproducthoeveelheidPP°volgnr

naam

afleidbarekolom

27bij: Relationele databases en SQL ©Mattic b.v.

Page 28: Powerpoint-presentatie bij H1-10

Gerecht

Ingredient

Product

Eenheid

naam /energiePP°bereidingstijdbereidingswijze

naam eenheid°energiePE°

gerechtproducthoeveelheidPP°volgnr

naam

Uniciteitsregels (1)

Onder uniciteitspijl is meervoudig voorkomende waarden(waardencombinatie) niet toegestaan.

Coupe Kiwano .. .. ..Coupe Kiwano .. .. ..… .. .. ..

Coupe Kiwano ijs .. ..Coupe Kiwano ijs .. .. .. .. .. ..

overtredingenvan uniciteits-regel

28bij: Relationele databases en SQL ©Mattic b.v.

Page 29: Powerpoint-presentatie bij H1-10

Uniciteitsregels (2)

Een uniciteitspijl kan nooit ‘binnen’ een bredere uniciteitspijlzitten: alleen de meest strenge regel wordt genoteerd.

Gerechtnaam /energiePP°bereidingstijdbereidingswijze

29bij: Relationele databases en SQL ©Mattic b.v.

Page 30: Powerpoint-presentatie bij H1-10

Illustratieve populatie

Een illustratieve populatie voldoet aan alle regels, maarillustreert ook wat is toegestaan.De populatie hierboven illustreert bv. dat voor de afzonderlijkekolommen gerecht en product géén uniciteitsregel geldt.

Ingredientgerecht product hoeveelheidPP°

Coupe KiwanoCoupe KiwanoGlace Terrace

ijskiwanoijs

0.150.50.2

30bij: Relationele databases en SQL ©Mattic b.v.

Page 31: Powerpoint-presentatie bij H1-10

Sleutels

primaire sleutel = kolom of kolomcombinatie waarvoor geldt: 1. verplicht; 2. met (meest strenge) uniciteitsregel; 3. aangewezen als logisch adres van een rij voor

verwijzingen naar die rij

verwijssleutel =

kolom (of kolomcombinatie)waarvan waarden(of waardencombinaties)verwijzen naar andere rijen(via de primaire sleuteldaarvan)

Gerecht

Ingredient

Product

Eenheid

p

p

p

p

naam /energiePP°bereidingstijdbereidingswijze

naam eenheid°energiePE°

gerechtproducthoeveelheidPP°volgnr

naam

31bij: Relationele databases en SQL ©Mattic b.v.

Page 32: Powerpoint-presentatie bij H1-10

Primaire ‘sloten’ ?

gerecht product hoeveelheidPPCoupe KiwanoCoupe KiwanoCoupe KiwanoCoupe KiwanoCoupe KiwanoGlace TerraceGlace TerraceGlace TerraceGlace TerraceMango Plus PlusMango Plus PlusMango Plus Plus

ijskiwanoslagroomsuikertequilaijsaardbeienpernodpepermangoaardbeienzure room

0.150.50.3101

0.2502

0.5500.4

naam eenheid energiePE ijs kiwano slagroom suiker tequila aardbeien pernod peper mango zure room banaan

literstuksdecilitergrameetlepelgrameetlepel

stuksdeciliterstuks

160040336430

0.2535

8019540

Product

enz.

Ingredient

32bij: Relationele databases en SQL ©Mattic b.v.

Page 33: Powerpoint-presentatie bij H1-10

Referentiële integriteitsregel

Referentiële integriteitsregel:Elke waarde van een verwijzende sleutel moet voorkomen alswaarde van de bijbehorende primaire sleutel.

Dus:Als in kindtabel een verwijzende waarde is ingevuld, moet diewaarde voorkomen in de oudertabel (als waarde van de primairesleutel).

Product

Eenheid

p

p

naam eenheid°energiePE°

naam oudertabel

kindtabel

33bij: Relationele databases en SQL ©Mattic b.v.

Page 34: Powerpoint-presentatie bij H1-10

Cardinaliteitsregels

Je leest de cardinaliteit aan de andere kant van het lijntje !

G e re ch t

I n g re die n t

Pro du ct

Ee n h e id

0 o f 1p r e c ie s 10 o f m e e r

1 o f m e e r

b i j é é n P r o d u c t - r i j h o r e n 0 o f 1 E e n h e id - r i je n

b i j é é n E e n h e id - r i j h o r e n 0 o f m e e r P r o d u c t - r i j e n

34bij: Relationele databases en SQL ©Mattic b.v.

Page 35: Powerpoint-presentatie bij H1-10

(Groot)ouder-(klein)kind

G e re ch t

I n g re die n t

Pro du ct

Ee n h e idouder

kind ouder

kind(kleinkind)

(grootouder)

ouder

kind

35bij: Relationele databases en SQL ©Mattic b.v.

Page 36: Powerpoint-presentatie bij H1-10

Ouder-kind: relatief t.o.v. verwijzing

Tekenconventie: ouder boven, kind onder, indien mogelijk

123

AmsterdamRotterdamHaarlem

130124130

123124128130135

Dolstrade BoerMierBakkerCupido

122

3

p

pnr naam filiaal°

nr plaats regiomanager°

Werknemer

Filiaal

Werknemer

Filiaalis werk-zaam bij

heeft alsregiomanager

ouder

kind

kind

ouder

36bij: Relationele databases en SQL ©Mattic b.v.

Page 37: Powerpoint-presentatie bij H1-10

37

Kunstmatige sleutels

- meestal numeriek (daarmee kun je snel zoeken en sorteren) - vaak alleen in database, niet zichtbaar in eindgebruikersapplicatie.

bij: Relationele databases en SQL ©Mattic b.v.

Ingredient

Product

Eenheidp

p

p

Gerechtpid naam/energiePP°bereidingstijdbereidingswijze

naam

id naam eenheid°energiePE°

gerechtproducthoeveelheidPP°

Kunstmatige sleutels:

Page 38: Powerpoint-presentatie bij H1-10

Alternatieve sleutelsprimaire sleutel

alternatieve sleutel

Ingredient

Product

Eenheid

a

p

p

p

Gerechtapid naam/energiePP°bereidingstijdbereidingswijze

naam

id naam eenheid°energiePE°

gerechtproducthoeveelheidPP°

38bij: Relationele databases en SQL ©Mattic b.v.

Page 39: Powerpoint-presentatie bij H1-10

Kandidaatsleutels en supersleutel

kandidaatsleutel = kolom of kolomcombinatie waarvoor geldt: 1. verplicht 2. met (zo zuinig mogelijke) uniciteitsregel.

Als er meerdere kandidaatsleutels zijn wordt één ervan gekozenals primaire sleutel. De andere is (of zijn) dan per definitie eenalternatieve sleutel.

supersleutel = kandidaatsleutel of omvattende kolomcombinatie

39bij: Relationele databases en SQL ©Mattic b.v.

Page 40: Powerpoint-presentatie bij H1-10

Refererende actieregels

De refererende actieregels moeten zorgen dat de referentiëleintegriteitsregel blijft gelden wanneer je een rij verwijdert, ofwanneer je een primaire-sleutelwaarde wijzigt:

Voor een verwijzing geldt altijd één van de delete-regels:– restricted delete– cascading delete– nullifying delete

… en één van de update-regels:– restricted update– cascading update– nullifying update

40bij: Relationele databases en SQL ©Mattic b.v.

Page 41: Powerpoint-presentatie bij H1-10

Restricted delete

Ingredient

poging tot deletevan ouderrij ...

... mislukt wanneer er nogéén of meer corresponderendekindrijen bestaan.

Productnaam eenheidenergiePE

ijskiwanoslagroomsuikertequilaaardbeienpernodpepermangozure roombanaan

literstuksdecilitergrameetlepelgrameetlepel

stuksdeciliterstuks

160040336430

0.2535

8019540

gerecht product hoeveelheidPPCoupe KiwanoCoupe KiwanoCoupe KiwanoCoupe KiwanoCoupe KiwanoGlace TerraceGlace TerraceGlace TerraceGlace TerraceMango Plus PlusMango Plus PlusMango Plus Plus

ijskiwanoslagroomsuikertequilaijsaardbeienpernodpepermangoaardbeienzure room

0.150.50.3101

0.2502

0.5500.4

rdrestricteddelete

41bij: Relationele databases en SQL ©Mattic b.v.

Page 42: Powerpoint-presentatie bij H1-10

Transacties

Commit: opdracht om opdrachten definitief uit te voeren.Rollback: opdracht om opdrachten ongedaan te maken.Transactie: reeks opdrachten die als geheel worden uitgevoerd (of in hun geheel ongedaan worden gemaakt).

Na een succesvolle transactie is aan alle databaseregels voldaan! Ofwel: de database is dan integer.

v o lto o id e tr an s ac tie

t o es t and na vo rigecom m it m o m en t

t o es t an d n a n ieu wco m m it m o m en t

o n v o lto o id e tr an s ac tie

t o es t an d n a laat s t eco m m it m o m en t= t eru gkeert o es t an d n a ro llb ack

ro llb ac k

vindt vaakautomatisch plaats

42bij: Relationele databases en SQL ©Mattic b.v.

Page 43: Powerpoint-presentatie bij H1-10

Cascading delete

gerecht product hoeveelheidPPCoupe KiwanoCoupe KiwanoCoupe KiwanoCoupe KiwanoCoupe KiwanoGlace TerraceGlace TerraceGlace TerraceGlace TerraceMango Plus PlusMango Plus PlusMango Plus Plus

ijskiwanoslagroomsuikertequilaijsaardbeienpernodpepermangoaardbeienzure room

0.150.50.3101

0.2502

0.5500.4

Ingredient

naam energiePPbereidingstijdbereidingswijzeCoupe KiwanoGlace TerraceMango Plus Plus

431403131

2058

Schil ...Neem ...Snijd ...

Gerecht

poging tot deletevan ouderrij ...

... heeftpoging tot deletevan corresponderendekindrijen tot gevolg.Deze poging slaagt, indit geval.

cd

43bij: Relationele databases en SQL ©Mattic b.v.

Page 44: Powerpoint-presentatie bij H1-10

Cascading update

gerecht product hoeveelheidPPCoupe KiwanoCoupe KiwanoCoupe KiwanoCoupe KiwanoCoupe KiwanoGlace TerraceGlace TerraceGlace TerraceGlace TerraceMango Plus PlusMango Plus PlusMango Plus Plus

ijskiwanoslagroomsuikertequilaijsaardbeienpernodpepermangoaardbeienzure room

0.42

2.5304

0.2502

12001.5

Ingredient

naam energiePPbereidingstijdbereidingswijzeCoupe KiwanoGlace TerraceMango Plus Plus

419403105

2058

Schil ...Neem ...Snijd ...

Gerecht

poging tot updatevan primaire sleutel ...

... heeftpoging tot updatevan verwijzende sleutel-waarden tot gevolg.Deze poging slaagt, in ditgeval.

Coupe Reijnders

Coupe ReijndersCoupe ReijndersCoupe ReijndersCoupe Reijnders

cu

44bij: Relationele databases en SQL ©Mattic b.v.

Page 45: Powerpoint-presentatie bij H1-10

Update- en deleteregels in Toetjesboek-database

Gerecht

Ingredient

Product

Eenheid

p

p

p

p

naam /energiePP°bereidingstijdbereidingswijze

naam eenheid°energiePE°

gerechtproducthoeveelheidPP°

naam

cd, cu

rd, cu

rd, cu

45bij: Relationele databases en SQL ©Mattic b.v.

Page 46: Powerpoint-presentatie bij H1-10

Samengestelde sleutel

a

student cursus datump Inschrijving

p

Tentamenstudent cursus volgnr datum

a b

student cursus datum1111222344

I IDWDBIMI I

DWIMI II IDB

12-jan-2012 19-jan-2012 18-mrt-2012 20-jun-2012 12-jan-2012 12-jan-2012 26-jan-2012 16-jan-2012 20-jan-2012 29-feb-2012

Inschrijving

student cursusvolgnr datum1111224

I IDWDBDBIMIMDB

1112121

17-apr-2012 17-apr-2012 19-apr-2012 15-jun-2012 06-apr-2012 11-jun-2012 26-jun-2012

Tentamen

46bij: Relationele databases en SQL ©Mattic b.v.

Page 47: Powerpoint-presentatie bij H1-10

Recursieve verwijzing

Docentp

DATCODBAC

C.Date E.Codd C.Bachman

COD

DAT

a b

Regel:Een docent mag niet zichzelfvervangen

Docentvervangera

acr naam vervanger°

Vervangeracr naam vervangerDATCODBAC

C.Date E.Codd C.Bachman

COD

DAT

Docentacr naam vervangerDATCODBAC

C.Date E.Codd C.Bachman

COD

DAT

zelfde tabel

47bij: Relationele databases en SQL ©Mattic b.v.

Page 48: Powerpoint-presentatie bij H1-10

Veel-veel associatie van tabel met zichzelf

• veel-veel associatie tussen tabel Cursus en zichzelf:“cursus … eist als voorkennis cursus …”

code naam examinatorI I

DWDBIMSW

Inleiding informatica Discrete wiskunde Databases Informatiemodelleren Semantic web

BACDATCODDAT

Cursus

cursusvoorkennisDBDBIMSW

I IDWDBDB

Voorkenniseis

Cursusp

cursus voorkennisp Voorkenniseis

a b

cd

acode naam examinator°

48bij: Relationele databases en SQL ©Mattic b.v.

Page 49: Powerpoint-presentatie bij H1-10

Veel-veel associatie van tabel met andere tabel

• veel-veel associatie tussen tabellen Docent en Cursus:“docent … is begeleider van cursus …”

code naam examinator°Cursusp

acr naamDocentp

docent cursusp Begeleider

cd

49bij: Relationele databases en SQL ©Mattic b.v.

Page 50: Powerpoint-presentatie bij H1-10

Niet-sleutelverwijzing

Student

p Constraints:- beginpostcode <= eindpostcode- disjuncte intervallen

p

Plaatsnaam beginpostcodeeindpostcode

nr ... postcode huisnr

naam beginpostcodeeindpostcodeAmsterdamUtrecht

1000AA3200AA

1199ZZ3800ZZ

Plaats

nr ... postcodehuisnr12345

...

...

...

...

...

1018KL

3345PZ1045AF1079LN

17

1805

868

Student

50bij: Relationele databases en SQL ©Mattic b.v.

Page 51: Powerpoint-presentatie bij H1-10

De OpenSchool-database Vakgroep

Studentnr naam mentor°

student cursusdatum/cijfer° vrijstelling°

Cursus

p

p p

Inschrijving

Docentp

docent cursusp

cursusvoorkennisp

Begeleider Voorkenniseis

p

Tentamen

cd

studentcursusvolgnrdatum cijfer°

cd

acode naamuren creditsexaminator°

aacr naam vervanger°vakgroep

p acode naam

a51bij: Relationele databases en SQL ©Mattic b.v.

Page 52: Powerpoint-presentatie bij H1-10

Hoofdstuk 3:Hoofdstuk 3:

Communiceren met Communiceren met een relationele een relationele databasesdatabases

Page 53: Powerpoint-presentatie bij H1-10

In dit hoofdstuk ….

• applicatie en database: Toetjesboek• SQL select-query’s• select-query’s op meer dan één tabel: joins• tabelinhouden wijzigen: insert-, delete- en update-

query’s• demonstratie Boekverkenner, SQL-tool en applicatie

53bij: Relationele databases en SQL ©Mattic b.v.

Page 54: Powerpoint-presentatie bij H1-10

Nogmaals: Toetjesboek (eindgebruikersapplicatie)

54bij: Relationele databases en SQL ©Mattic b.v.

Page 55: Powerpoint-presentatie bij H1-10

Toetjesboek: vragen

• Welke gegevens zijn berekenbaar uit andere gegevens?• Welke gegevens moeten worden opgeslagen?

– Zijn daar ook gegevens bij die niet zichtbaar zijn in het Gerechten-venster?

• Zijn er gegevens die zeker niet worden opgeslagen?• Voor welke gegevens is keuze mogelijk?

– Wat zijn de consequenties van die keuze?

55bij: Relationele databases en SQL ©Mattic b.v.

Page 56: Powerpoint-presentatie bij H1-10

56

naam /energiePPbereidingstijdbereidingswijzeCoupe KiwanoGlace TerraceMango Plus Plus

431403131

2058

Schil ...Neem ...Snijd ...

Gerecht

gerecht product hoeveelheidPPvolgnrCoupe KiwanoCoupe KiwanoCoupe KiwanoCoupe KiwanoCoupe KiwanoGlace TerraceGlace TerraceGlace TerraceGlace TerraceMango Plus PlusMango Plus PlusMango Plus Plus

ijskiwanoslagroomsuikertequilaijsaardbeienpernodpepermangoaardbeienzure room

0.150.50.3101

0.2502

0.5500.4

123451234123

Ingredient

Productnaam eenheid energiePE

ijskiwanoslagroomsuikertequilaaardbeienpernodpepermangozure roombanaan

literstuksdecilitergrameetlepelgrameetlepel

stuksdeciliterstuks

1600403364

300.2535

8019540

56bij: Relationele databases en SQL ©Mattic b.v.

Page 57: Powerpoint-presentatie bij H1-10

Een SQL-select query

57bij: Relationele databases en SQL ©Mattic b.v.

select naam, energiePP -- 3from Gerecht -- 1where bereidingstijd < 30 -- 2order by energiePP -- 4

1. Ga uit van tabel Gerecht: alle rijen2. Verwijder de rijen die niet aan de conditie voldoen3. Geef voor elke rij die nog over is: gerechtnaam en energiePP4. Orden de rijen op volgorde van energiePP

Page 58: Powerpoint-presentatie bij H1-10

Selectquery op meerdan één tabel: join

(b)

(a)

gerecht product hoeveelheidPPvolgnrCoupe KiwanoCoupe KiwanoCoupe KiwanoCoupe KiwanoCoupe KiwanoGlace TerraceGlace TerraceGlace TerraceGlace TerraceMango Plus PlusMango Plus PlusMango Plus Plus

ijskiwanoslagroomsuikertequilaijsaardbeienpernodpepermangoaardbeienzure room

0.150.50.3101

0.2502

0.5500.4

123451234123

naam eenheidenergiePEijskiwanoslagroomsuikertequilaaardbeienpernodpepermangozure roombanaan

literstuksdecilitergrameetlepelgrameetlepel

stuksdeciliterstuks

160040336430

0.2535

8019540

Product

enz.

en Productjoin van Ingredient

Ingredient

gerecht producthoeveelheidPPvolgnr Product.eenheid

Product.energiePE

Coupe KiwanoCoupe KiwanoCoupe KiwanoCoupe KiwanoCoupe KiwanoGlace TerraceGlace TerraceGlace TerraceGlace TerraceMango Plus PlusMango Plus PlusMango Plus Plus

ijskiwanoslagroomsuikertequilaijsaardbeienpernodpepermangoaardbeienzure room

0.150.50.3101

0.2502

0.5500.4

123451234123

literstuksdecilitergrameetlepellitergrameetlepel

stuksgramdeciliter

160040336430

16000.2535

800.25195

join van Ingredient en Product:verbreding van Ingredientmet de niet-sleutelkolommenvan Product, via de verwijssleutel

58bij: Relationele databases en SQL ©Mattic b.v.

Page 59: Powerpoint-presentatie bij H1-10

De join in SQL

Joinquery in SQL:

select Ingredient.gerecht, Ingredient.product, Ingredient.hoeveelheidPP, Ingredient.volgnr, Product.eenheid, Product.energiePEfrom Ingredient join Product on Ingredient.product = Product.naam

alle rijen van Ingredient gecombineerd met allebijbehorende rijen van Product, via de verwijssleutel

alle kolommen van de combinatie,behalve de primaire sleutel van Product

Korter, met ‘tabelaliassen’:

select I.gerecht, I.product, I.hoeveelheidPP, I.volgnr, P.eenheid, P.energiePEfrom Ingredient I join Product P on I.product = P.naam

59bij: Relationele databases en SQL ©Mattic b.v.

Page 60: Powerpoint-presentatie bij H1-10

Tabelinhouden wijzigen

• Wijzigen van een tabelinhoud:– toevoegen van een rij (insert)– verwijderen van een rij (delete)– wijzigen van een bestaande rij (update)

60bij: Relationele databases en SQL ©Mattic b.v.

Page 61: Powerpoint-presentatie bij H1-10

Insert

Voorbeeld: voeg het product ‘goudrenetten’ toe, gemetenin pond en met een energiewaarde van 330 kcal per pond.

Oplossing:

insert into Eenheid values ('pond');insert into Product values ('goudrenetten', 'pond', 330)

Ga na: zonder de eerste opdracht krijg je een foutmelding(overtreding van de referentiële integriteitsregel)

61bij: Relationele databases en SQL ©Mattic b.v.

Page 62: Powerpoint-presentatie bij H1-10

Delete

Voorbeeld: verwijder het gerecht ‘banaan’.

Oplossing:

delete -- 3from Product -- 1where naam = ‘banaan’ -- 2

62bij: Relationele databases en SQL ©Mattic b.v.

Opgaven• Voorspel wat er gebeurt

bij een poging het product‘mango’ te verwijderen.

• Voorspel wat er gebeurtbij een poging het gerecht‘Mango Plus Plus’ teverwijderen.

Gerecht

Ingredient

Product

Eenheid

p

p

p

p

naam /energiePP°bereidingstijdbereidingswijze

naam eenheid°energiePE°

gerechtproducthoeveelheidPP°

naam

cd, cu

rd, cu

rd, cu

Zie ook de populatie, in boekof de Voorbeeldverkenner

Page 63: Powerpoint-presentatie bij H1-10

Update

Voorbeeld: wijzig de energie per eenheid van goudrenetten in 550.

Oplossing:

update Product -- 1set energiePE = 550 -- 3where naam = 'goudrenetten' -- 2

toekenning

test op gelijkheid (resultaat ‘waar’ of ‘onwaar’)

Opgave• Voorspel wat er gebeurt bij een poging om in tabel Gerecht de naam

‘Coupe Kiwano’ te wijzigen in ‘Coupe Reijnders’.

63bij: Relationele databases en SQL ©Mattic b.v.

Page 64: Powerpoint-presentatie bij H1-10

Triggers en scripts

• Waarden van Gerecht.energiePP worden automatisch berekend via triggers.

• Triggers zijn kleine programma’s die kunnen worden gekoppeld aan een insert, delete of update (of een poging daartoe)

Opgaven• Raadpleeg het create-script van Toetjesboek en zoek de create trigger-

opdrachten.• Probeer het script globaal te begrijpen.• Raadpleeg het insert-script van Toetjesboek en probeer dit globaal te

begrijpen.

Inserts, deletes en updates worden in detail behandeld in hoofdstuk 10.Triggers worden behandeld in hoofdstuk 16.

64bij: Relationele databases en SQL ©Mattic b.v.

Page 65: Powerpoint-presentatie bij H1-10

65

Demonstratie Boekverkenner, SQL-tool en applicatie

bij: Relationele databases en SQL ©Mattic b.v.

• Toetjesboek-applicatie– doet het niet zonder geïnstalleerde Toetjesboek-database!– Toetjesboek-database installeren via Boekverkenner– Toetjesboek-applicatie verkennen– let op SQL-verkeer van en naar de SQL-server!

• Interactive Query Utility (IQU)– SQL-query vanuit IQU

• Boekverkenner– dababases installeren en de-installeren– inloggen op database– navigeren door de boektekst– SQL-query uitvoeren vanuit de boektekst– de Voorbeeldnavigator

Page 66: Powerpoint-presentatie bij H1-10

Hoofdstuk 4:Hoofdstuk 4:

NullsNulls

Page 67: Powerpoint-presentatie bij H1-10

In dit hoofdstuk ….

• de aard van nulls• nulls en de lege string• Codd-relationaliteit• logische algebra: twee- en driewaardige logica

67bij: Relationele databases en SQL ©Mattic b.v.

Page 68: Powerpoint-presentatie bij H1-10

De OpenSchool-database Vakgroep

Studentnr naam mentor°

student cursusdatum/cijfer° vrijstelling°

Cursus

p

p p

Inschrijving

Docentp

docent cursusp

cursusvoorkennisp

Begeleider Voorkenniseis

p

Tentamen

cd

studentcursusvolgnrdatum cijfer°

cd

acode naamuren creditsexaminator°

aacr naam vervanger°vakgroep

p acode naam

a68bij: Relationele databases en SQL ©Mattic b.v.

Page 69: Powerpoint-presentatie bij H1-10

De aard van nulls

• Null: speciale waarde– indicator voor niet-ingevulde ‘echte’ waarde

studentcursus datum cijfer vrijstelling1111222344

I IDWDBIMI I

DWIMI II IDB

12-jan-2012 19-jan-2012 18-mrt-2012 20-jun-2012 12-jan-2012 12-jan-2012 26-jan-2012 16-jan-2012 20-jan-2012 29-feb-2012

758

5

NNNNJJN

JN

Inschrijving

: nulls

betekenis:onbekend ofniet-van-toepassing

69bij: Relationele databases en SQL ©Mattic b.v.

Page 70: Powerpoint-presentatie bij H1-10

Rekenen met null

Optellen met null-operand

select cijfer + 1 from Inschrijving

Resultaat:

ADD============== 8 6 9 <NULL> <NULL> <NULL> 6 <NULL> <NULL> <NULL>

70bij: Relationele databases en SQL ©Mattic b.v.

Page 71: Powerpoint-presentatie bij H1-10

Null en de lege string (1)

• lege string (= string van lengte 0): is dat een null?– blijkt afhankelijk van de database (bv. Oracle of Firebird)

'string' string van lengte6'strin' string van lengte5'stri' string van lengte4'str' string van lengte3'st' string van lengte2's' string van lengte1'' string van lengte 0 of null?

71bij: Relationele databases en SQL ©Mattic b.v.

Page 72: Powerpoint-presentatie bij H1-10

Null en de lege string (2)

• een lege string in Firebird is géén null!• vergelijk gedrag bij concatenatie:

'Inge' || null null

(onbekend!) (onbekend!)

'Inge' || '' 'Inge'

72bij: Relationele databases en SQL ©Mattic b.v.

Page 73: Powerpoint-presentatie bij H1-10

Selecteren op null

Inschrijvingen waarvoor geen cijfer is ingevuld:

select *from Inschrijvingwhere cijfer is null

Inschrijvingen waarvoor wel een cijfer is ingevuld:

select *from Inschrijvingwhere cijfer is not null

73bij: Relationele databases en SQL ©Mattic b.v.

of: not(cijfer is null)

Page 74: Powerpoint-presentatie bij H1-10

Codd-relationaliteit

• In een Codd-relationele database is elke kolom van een primaire sleutel verplicht.

• Voorbeeld niet-Codd-relationele tabel:

naam toonhoogte°docentInstrumentp

pianofluitfluitvioolvioolgitaarsaxofoonsaxofoonsaxofoondrums

alt

alt

alttenorsopraan

Richterde Quantde QuantGrubertBashevde LuciaParkerBakerParkerBennink

74bij: Relationele databases en SQL ©Mattic b.v.

Page 75: Powerpoint-presentatie bij H1-10

Logische algebra

• logische algebra: ‘rekenen’ met logische waarden• logische waarden:

– in tweewaardige logica: true en false– in tweewaardige logica: true, false en unknown

• voorbeelden van logische expressies:– 1+1 = 2 levert true– 1+1 = 1 levert false– 1+null = 1 levert unknown

• NB. where unknown heeft hetzelfde effect als where false!

75bij: Relationele databases en SQL ©Mattic b.v.

Page 76: Powerpoint-presentatie bij H1-10

Opgave

Voorspel het effect van:

a)

b)

c)

select *from Inschrijvingwhere cijfer = nullselect *from Inschrijvingwhere null = null

studentcursus datum cijfer vrijstelling1111222344

I IDWDBIMI I

DWIMI II IDB

12-jan-2012 19-jan-2012 18-mrt-2012 20-jun-2012 12-jan-2012 12-jan-2012 26-jan-2012 16-jan-2012 20-jan-2012 29-feb-2012

758

5

NNNNJJN

JN

Inschrijvingselect *from Inschrijvingwhere cijfer is null

76bij: Relationele databases en SQL ©Mattic b.v.

Page 77: Powerpoint-presentatie bij H1-10

Tweewaardige logica

• operatoren: not, and en or• rekenregels:

NB: or = ‘en/of’

77bij: Relationele databases en SQL ©Mattic b.v.

Page 78: Powerpoint-presentatie bij H1-10

Prioriteit operatoren

• 1. not 2. and 3. or• Vergelijk:

• en:

select student, cursus, cijfer, vrijstellingfrom Inschrijvingwhere not(vrijstelling = 'J' or cijfer > 5)

select student, cursus, cijfer, vrijstellingfrom Inschrijvingwhere not vrijstelling = 'J' or cijfer > 5

78bij: Relationele databases en SQL ©Mattic b.v.

Page 79: Powerpoint-presentatie bij H1-10

Regels van De Morgan

• Voorbeeld 1e regel:

is equivalent met:

• Vraag: welke haakjes mogen weg?

select student, cursus, cijfer, vrijstellingfrom Inschrijvingwhere not(vrijstelling = 'J' or cijfer > 5)

select student, cursus, cijfer, vrijstellingfrom Inschrijvingwhere not(vrijstelling) = 'J‘) and not(cijfer > 5)

79bij: Relationele databases en SQL ©Mattic b.v.

Page 80: Powerpoint-presentatie bij H1-10

Driewaardige logica

• rekenregels:

• waarom?– zijn deze regels

aannemelijk temaken?

80bij: Relationele databases en SQL ©Mattic b.v.

Page 81: Powerpoint-presentatie bij H1-10

Voorbeeld

• Select-query:

geeft als resultaat alle inschrijvingen met vrijstelling = ‘J’ (ongeacht het cijfer en of dat is ingevuld) en alle inschrijvingen met cijfer > 5 (ongeacht de waarde van vrijstelling en of die is ingevuld)

select student, cursus, cijfer, vrijstellingfrom Inschrijvingwhere vrijstelling = 'J' or not cijfer <= 5

81bij: Relationele databases en SQL ©Mattic b.v.

Page 82: Powerpoint-presentatie bij H1-10

Hoofdstuk 5:Hoofdstuk 5:

NormalisatieNormalisatie

Page 83: Powerpoint-presentatie bij H1-10

In dit hoofdstuk ….

• normaalvormen• herhalende groepen en de eerste normaalvorm (1NV)• functionele afhankelijkheid en de tweede en derde

normaalvormen (2NV en 3NV)• de Boyce-Codd-normaalvorm• nabeschouwing: wat is normaliseren en wat is het niet?

• voor liefhebbers: 4NV en 5NV op relsql.nl

83bij: Relationele databases en SQL ©Mattic b.v.

Page 84: Powerpoint-presentatie bij H1-10

Normaalvormen

• Een normaalvorm is een bepaalde gewenste tabelstructuur, waarin een (door die normaalvorm verboden) situatie niet optreedt.

• eerste normaalvorm (1NV)– verbod op herhalende groepen

• tweede en derde normaalvorm (2NV en 3NV)– verbod op bepaalde vormen van redundantie (overtolligheid van

gegevens)

• Boyce-Codd-normaalvorm– verbiedt nog net wat meer dan 3NV (maar is wat problematisch …)

• Deze normaalvormen worden steeds strenger: er wordt steeds wat meer verboden

84bij: Relationele databases en SQL ©Mattic b.v.

Page 85: Powerpoint-presentatie bij H1-10

Niet-genormaliseerde tabel

• een tabel met drie kolommen:

• derde kolom is gestructureerd (herhalende groep)• de herhalende groep heeft in elke cel een (deel)tabel• 1NV verbiedt herhalende groepen (niet-relationeel!)• niet-genormaliseerd = niet-1NV !

Student

naamgeslacht cursussencursus studiepunten datum inschrijvingstypetarief

Jan m wiskundenatuurkunde

23

25-aug-201225-aug-2012

RR

300300

Eva v wiskunde 2 26-aug-2012 T 150

85bij: Relationele databases en SQL ©Mattic b.v.

(R=regulier; T= tentamenstudent)

Page 86: Powerpoint-presentatie bij H1-10

Van niet-genormaliseerd naar 1NV (1)

Student

naamgeslacht cursussencursus studiepunten datum inschrijvingstypetarief

Jan m wiskundenatuurkunde

23

25-aug-201225-aug-2012

RR

300300

Eva v wiskunde 2 26-aug-2012 T 150

student cursus studiepuntendatum inschrijvingstypetarief

naam geslachtStudentp

p Inschrijving

JanJanEva

wiskundenatuurkundewiskunde

232

25-aug-201225-aug-201226-aug-2012

RRT

300300150

JanEva

mv

‘afsplitsen’ herhalende groep

86bij: Relationele databases en SQL ©Mattic b.v.

Page 87: Powerpoint-presentatie bij H1-10

Functionele afhankelijkheid (FA)

• als je de cursus weet, weet je het aantal studiepunten:

Synoniemen:• cursus determineert studiepunten• studiepunten wordt gedetermineerd door cursus• studiepunten is functioneel afhankelijk van cursus

87bij: Relationele databases en SQL ©Mattic b.v.

student cursus studiepuntendatum inschrijvingstypetarief

naam geslachtStudentp

p Inschrijving

JanJanEva

wiskundenatuurkundewiskunde

232

25-aug-201225-aug-201226-aug-2012

RRT

300300150

JanEva

mv

FA

Page 88: Powerpoint-presentatie bij H1-10

Nog een FA

• tarief is functioneel afhankelijk van inschrijvingstype

• Dit spreekt niet vanzelf: je moet hiervoor weten dat het tarief niet óók afhankelijk is van de cursus!

• Dit moet dus gegeven zijn, een voorbeeldpopulatie is niet voldoende (waarom niet?)

student cursus studiepuntendatum inschrijvingstypetarief

naam geslachtStudentp

p Inschrijving

JanJanEva

wiskundenatuurkundewiskunde

232

25-aug-201225-aug-201226-aug-2012

RRT

300300150

JanEva

mv

FAFA

88bij: Relationele databases en SQL ©Mattic b.v.

Page 89: Powerpoint-presentatie bij H1-10

Triviale FA’s (1)

• Alle kolommen zijn functioneel afhankelijk van de primaire sleutel!

• Waarom?

student cursus studiepuntendatum inschrijvingstypetarief

naam geslachtStudentp

p Inschrijving

FAFA

FAFA

FA

89bij: Relationele databases en SQL ©Mattic b.v.

Page 90: Powerpoint-presentatie bij H1-10

Triviale FA’s (2)

• Elke kolom(combinatie) is functioneel afhankelijk van zichzelf

• Elke combinatie is functioneel afhankelijk van een combinatie waar hij deel van uitmaakt

• Triviale functionele afhankelijkheden zijn niet interessant!

90bij: Relationele databases en SQL ©Mattic b.v.

Page 91: Powerpoint-presentatie bij H1-10

• Niet de FA’s zijn de boosdoener (die zijn ze zoals ze zijn), maar de structuur.

• We transformeren de structuur, zó dat de FA’s triviaal worden.

Redundantie door niet-triviale FA’s

91bij: Relationele databases en SQL ©Mattic b.v.

student cursus studiepuntendatum inschrijvingstypetarief

naam geslachtStudentp

p Inschrijving

JanJanEva

wiskundenatuurkundewiskunde

232

25-aug-201225-aug-201226-aug-2012

RRT

300300150

JanEva

mv

FAFA

Page 92: Powerpoint-presentatie bij H1-10

Overtredingen van 2NV en 3NV

92bij: Relationele databases en SQL ©Mattic b.v.

student cursus studiepuntendatum inschrijvingstypetarief

naam geslachtStudentp

p Inschrijving

FAFA

overtreding van 2NV

partiële sleutelafhankelijkheid:niet-sleutelkolom* diefunctioneel afhankelijkis van een echt deel vaneen kandidaatsleutel* (of kolomcombinatie)

overtreding van 3NV

transitieve sleutelafhankelijkheid:niet -sleutelkolom* diefunctioneel afhankelijk isvan een determinant diegeen kandidaatsleutel isen ook geen deel daarvan

Page 93: Powerpoint-presentatie bij H1-10

Transformatie: van niet-2NV naar 2NV

FA

A B ... C ...

93bij: Relationele databases en SQL ©Mattic b.v.

A B ... ...

B Cp

situatie verboden door2NV (uitgaande van 1NV):

transformatie naar 2NV:‘afsplitsen van FA’

NB. De FA is er nog steeds, maar nu als triviale FA in de (nieuwe) oudertabel.Je zou kunnen zeggen: ‘de FA heeft een eigen tabel gekregen’.

A, B, C, …: kolommenof kolomcombinaties

Page 94: Powerpoint-presentatie bij H1-10

Toegepast op voorbeeld

student cursus studiepuntendatum inschrijvingstypetarief

naam geslachtStudentp

p Inschrijving

FAFA

94bij: Relationele databases en SQL ©Mattic b.v.

1NV /niet-2NV

student cursus datum inschrijvingstypetarief

naam geslachtStudentp

p Inschrijving

FA

naam studiepuntenCursuspna afsplitsen

FA: 2NV

Page 95: Powerpoint-presentatie bij H1-10

Transformatie: van 2NV/niet-3NV naar 3NV

FA

A ... B ... C ...

FA

A ... B1 B2 ... C ...

FA

A B1 B2 ... C ...

B C

A ... B ...

B1 B2 C

A ... B1 B2 ...

B1 B2 C

A B1 B2 ...

95bij: Relationele databases en SQL ©Mattic b.v.

Page 96: Powerpoint-presentatie bij H1-10

Toegepast op voorbeeld

96bij: Relationele databases en SQL ©Mattic b.v.

2NV /niet-3NV

student cursus datum inschrijvingstypetarief

naam geslachtStudentp

p Inschrijving

FA

naam studiepuntenCursusp

Inschrijvingstudent cursus datum inschrijvingstype

p

code tariefp Inschrijvingstype

JanJanEva

wiskundenatuurkundewiskunde

25-aug-201225-aug-201226-aug-2012

EET

naam studiepuntenp Cursus

wiskundenatuurkunde

23

ET

300150

na afsplitsenFA: 3NV

geen redundantiemeer!

Page 97: Powerpoint-presentatie bij H1-10

Wat wordt verboden door BCNV ?

• Verboden situatie (uitgaande van 1NV):

De Boyce-Codd normaalvorm verbiedt alle niet-triviale functionele afhankelijkheden met niet-unieke determinant.

Dit is een generalisatie van de verboden situaties van 2NV en 3NV(en net iets krachtiger: er wordt nog net iets meer verboden).

FA

... A ... B ...

(niet uniek)

97bij: Relationele databases en SQL ©Mattic b.v.

Page 98: Powerpoint-presentatie bij H1-10

Voorbeeld

student cursus docentInschrijving

JanJanMichielMichiel

wiskundenatuurkundewiskundenatuurkunde

De BruinDe BruinDe BruinDe Wit

(1)(2)(3)(4)

p

Nu extra aanname: elke docent geeft maar één cursus.Dit geeft een nieuw type FA:

student cursus docent

FA

Inschrijving

Ga na: voorbeeldpopulatie is in strijd met nieuwe regel!

98bij: Relationele databases en SQL ©Mattic b.v.

Page 99: Powerpoint-presentatie bij H1-10

FA impliceert extra uniciteitsregel

FA

Inschrijving

JanMichielJanAagje

wiskundewiskundenatuurkundewiskunde

De BruinDe BruinDe WitGroen

1student cursus docent

volgt uituniciteitsregel 1en de FA

Ga na dat dit voorbeeld1. voldoet aan 3NV2. niet voldoet aan

BCNV

Dus: kritisch voorbeeldvoor BCNV!

99bij: Relationele databases en SQL ©Mattic b.v.

Page 100: Powerpoint-presentatie bij H1-10

Van 3NV/niet-BCNV naar BCNV

Toepassen ‘recept’ afsplitsen ongewenste FA:

Merk op:• de FA is in de nieuwe structuur triviaal• uniciteitsregel 1 is verdwenen!

naam cursus

student docent

Docent

Inschrijving

p

p

JanMichielJanAagje

De BruinDe BruinDe WitGroen

De BruinDe WitGroen

wiskundenatuurkundewiskunde

FA

100bij: Relationele databases en SQL ©Mattic b.v.

Page 101: Powerpoint-presentatie bij H1-10

Waar is uniciteitsregel 1 gebleven?

Vraag:hoe (on)bevre-digend is dit?

Weer toevoegen uniciteitsregel 1 als ‘join-uniciteitsregel’:

d o c e n tn a a m v a kn a a m

c u rs is t n a a m d o c e n tn a a m

D o ce n t

I n s c h rijv in g

J anM ich ielJ anA ag je

D e B ru in D e B ru in D e W it G ro en

D e B ru inD e W i tG ro en

w isk u n d en atu u rk u n d ew isk u n d e

jo in - u n ic i t e i t s r e g e l

101bij: Relationele databases en SQL ©Mattic b.v.

Page 102: Powerpoint-presentatie bij H1-10

De vierde en de vijfde normaalvorm

• Er zijn nog een vierde (4NV) en een vijfde normaalvorm (5NV)– voor de praktijk minder belangrijk– zie voor een artikel hierover: de boekwebsite relsql.nl

102bij: Relationele databases en SQL ©Mattic b.v.

Page 103: Powerpoint-presentatie bij H1-10

Voorbeeld met geneste herhalende groep

Student

nr naaminschrijvingen

cursuscode cursusnaam creditsexaminatordatum cijfertentamens

volgnr datum cijfer

1

2

34

Berk

Tack

Bos Eik

I IDWDB

IMI IDWIM

I II IDB

Inleiding informaticaDiscrete wiskundeDatabases

InformatiemodellerenInleiding informaticaDiscrete wiskundeInformatiemodelleren

Inleiding informaticaInleiding informaticaDatabases

80120120

15080120150

8080120

BACDATCOD

DATBACDATDAT

BACBACCOD

12-jan-2012 19-jan-2012 18-mrt-2012

20-jun-2012 12-jan-2012 12-jan-2012 26-jan-2012

16-jan-2012 20-jan-2012 29-feb-2012

758

5

1112

12

1

17-apr-2012 17-apr-2012 19-apr-2012 15-jun-2012

06-apr-2012 11-jun-2012

26-jun-2012

7558

45

Gegeven: • elke student heeft uniek nummer• elke cursus heeft unieke code en naam• cijfer inschrijving is (evt. voorlopig) eindcijfer, berekend uit tentamencijfers

103bij: Relationele databases en SQL ©Mattic b.v.

Page 104: Powerpoint-presentatie bij H1-10

Afsplitsen ‘buitenste’ herhalende groep

a

Studentnr naam

studentcursuscodecursusnaamcreditsexaminatordatumcijfertentamens

volgnrdatumcijfer

Inschrijving

p

p

Student

nr naaminschrijvingen

cursuscodecursusnaamcreditsexaminatordatum cijfertentamens

volgnr datum cijfer

p

NB1: sleutels zijn in het boek alleen gedefinieerd voor relationele structuur; géén bezwaar ze ook al toe te passen in een structuur met herhalende groep.NB2: kolom student is verwijssleutel en bevat studentnummers.NB3: (student, cursusnaam) is een alternatieve sleutel. Waarom?

104bij: Relationele databases en SQL ©Mattic b.v.

Page 105: Powerpoint-presentatie bij H1-10

Afsplitsen ‘binnenste’ herhalende groep

a

Studentnr naam

studentcursuscodecursusnaamcreditsexaminator°datumcijfer°p

p

Inschrijving

p

Tentamenstudentcursuscodevolgnrdatum cijfer°

1NV !

Studentnr naam

studentcursuscodecursusnaamcreditsexaminatordatumcijfertentamens

volgnrdatumcijfer

Inschrijving

p

p

105bij: Relationele databases en SQL ©Mattic b.v.

Page 106: Powerpoint-presentatie bij H1-10

Test 2NV: zijn er FA’s met determinant die deel is van een sleutel?

FAFA

FAniet 2NV!

106bij: Relationele databases en SQL ©Mattic b.v.

a

Studentnr naam

studentcursuscodecursusnaamcreditsexaminator°datumcijfer°p

p

Inschrijving

p

Tentamenstudentcursuscodevolgnrdatum cijfer°

NB: aanpassingkolomnamen aanconventies

Studentnr naam

studentcursusdatumcijfer°

p

Inschrijving

p

Tentamenstudentcursusvolgnrdatumcijfer°

p Cursusacodenaamcreditsexaminator°

p

afsplitsenFA’s: 2NV

Page 107: Powerpoint-presentatie bij H1-10

Test 3NV: zijn er transitieve FA’s?

107bij: Relationele databases en SQL ©Mattic b.v.

Studentnr naam

studentcursusdatumcijfer°p

p

Inschrijving

p

Tentamenstudentcursusvolgnrdatumcijfer°

p Cursusacodenaamcreditsexaminator°

Nee, die zijn er niet: structuur staat dus ook in 3NV !

Page 108: Powerpoint-presentatie bij H1-10

Standaardisatiedocent-acroniemen

Studentnr naam

studentcursusdatumcijfer°p

p

Inschrijving

p

Tentamenstudentcursusvolgnrdatumcijfer°

p Cursusacodenaamcreditsexaminator°

Docentpacr

Studentnr naam

studentcursusdatumcijfer°p

p

Inschrijving

p

Tentamenstudentcursusvolgnrdatumcijfer°

p Cursusacodenaamcreditsexaminator°

Examinator-acroniemenzijn in deze structuur niet-gestandaardiseerd

Standaardisatie:via aparte tabel met één kolom,die we niet Examinator, maarDocent noemen.

NB. ‘examinator’ is een rol dieeen docent speelt binnen eencursus. Tabel Docent staat losvan die context.

NB. We zijn nu aan het modelleren, dit is geennormaliseren meer.

108bij: Relationele databases en SQL ©Mattic b.v.

Page 109: Powerpoint-presentatie bij H1-10

Normalisatie: reikwijdte en beperkingen• Normalisatie is een controlemiddel op gegeven structuren• Normalisatie leidt doorgaans tot een betere structuur

– maar: structuur in 3NV / niet-BCNV (kritisch voorbeeld, in de praktijk overigens zeldzaam) kan beter zijn dan doorgenormaliseerd voorbeeld in BCNV

• Kennis van normalisatie leidt tot goed inzicht in afhankelijkheden tussen gegevens en begrippen als ‘redundantie’ en ‘inconsistentie’

• Normalisatie hoeft niet tot standaardisatie te leiden van bepaalde ‘soorten van dingen’, terwijl dat wel gewenst is

• Normalisatie kijkt alleen naar afzonderlijke tabellen, niet naar de structuur als geheel

• De beginstructuur is allesbepalend; normalisatie kijkt niet naar alternatieven

109bij: Relationele databases en SQL ©Mattic b.v.

Page 110: Powerpoint-presentatie bij H1-10

Wat is normalisatie niet?

• Normalisatie is geen volwaardige databaseontwerp-methode:

– je kunt pas gaan normaliseren vanuit een gegeven structuur, maar hoe die te vinden is een vak apart

– normalisatie stopt zodra (bepaalde typen) redundante structuren zijn geëlimineerd

– normalisatie leidt veelal niet tot standaardisatietabellen voor bepaalde ‘soorten dingen’

• Voor databaseontwerp bestaan andere (en betere) methoden

110bij: Relationele databases en SQL ©Mattic b.v.

Page 111: Powerpoint-presentatie bij H1-10

Hoofdstuk 6:Hoofdstuk 6:

Informatie uit één Informatie uit één tabeltabel

Page 112: Powerpoint-presentatie bij H1-10

In dit hoofdstuk …

• nogmaals: werken met Boekverkenner en IQU• projecties• datatypen• operatoren• functies• selecties• ordening• verzamelingsoperatoren

112bij: Relationele databases en SQL ©Mattic b.v.

Page 113: Powerpoint-presentatie bij H1-10

OpenSchool Vakgroep

Studentnr naam mentor°

student cursusdatum/cijfer° vrijstelling°

Cursus

p

p p

Inschrijving

Docentp

docent cursusp

cursusvoorkennisp

Begeleider Voorkenniseis

p

Tentamen

cdcd

acode naamuren creditsexaminator°

aacr naam vervanger°vakgroep

p acode naam

a

studentcursusvolgnrdatum cijfer°

113bij: Relationele databases en SQL ©Mattic b.v.

Page 114: Powerpoint-presentatie bij H1-10

Projecties: select … from

• Bij projectie (‘select’) wordt tabel rij voor rij afgelopen• Voorbeeld:

114bij: Relationele databases en SQL ©Mattic b.v.

select naam as cursus, uren, credits * 28 as ECTS_urenfrom Cursus

Resultaat:

CURSUS UREN ECTS_UREN===================== ========= =================Inleiding informatica 80 84.0 Discrete wiskunde 120 112.0 Databases 120 112.0 Informatiemodelleren 150 140.0 Semantic web 120 112.0

= (kolom)alias

as mag je weglaten!

Page 115: Powerpoint-presentatie bij H1-10

Projecties: distinct

• Vergelijk:select uren, creditsfrom Cursus

Resultaat:

UREN CREDITS========= ======= 80 3.0 120 4.0 120 4.0 150 5.0 120 4.0

select distinct uren, creditsfrom Cursus

Resultaat:

UREN CREDITS========= ======= 80 3.0 120 4.0 150 5.0

Resultaattabel is niet zuiver relationeel!Een tabel in de zin van relatie is immers een verzameling, dus alle rijen verschillend!Distinct maakt er een verzameling van.

115bij: Relationele databases en SQL ©Mattic b.v.

Page 116: Powerpoint-presentatie bij H1-10

Datatypen

• Gegevens hebben een datatype (vastgelegd in tabeldefinitie)

116bij: Relationele databases en SQL ©Mattic b.v.

datatypeinteger gehele getallennumeric(n,m)numeric(n)

decimale getallen

char(n) tekst vaste lengtevarchar(n) tekst variabele lengtedatetimetimestamp

datumtijddatum + tijd

blob binary large object (bv. plaatje, geluid)

Page 117: Powerpoint-presentatie bij H1-10

Operatoren

• operator: ‘token’ voor een bewerking• voorbeelden:

– numerieke operatoren: + - * /– alfanumerieke operator: | |– datum/tijd-operatoren: -– datum/tijd met numeriek: + -

117bij: Relationele databases en SQL ©Mattic b.v.

aantal dagen optellen bij datum/tijd

datums van elkaar aftrekken

stringconcatenatie

Page 118: Powerpoint-presentatie bij H1-10

Functies

• Functie: voorschrift met een naam om een waarde te berekenen uit andere waarden, de argumenten

• Format is meestal: f(x, y, …)– f is de functienaam– x, y, … zijn de argumenten

• soms wordt de komma vervangen door een ‘betekenisvol’ woord– vb. rekenkundige functie: power (x,y) (x tot de macht y)

– vb. stringfunctie: substring(x from startpos for length)• Er kunnen nul argumenten zijn

– vb.: pi() voor π

118bij: Relationele databases en SQL ©Mattic b.v.

Page 119: Powerpoint-presentatie bij H1-10

Speciale functies (1): case

119bij: Relationele databases en SQL ©Mattic b.v.

select student, cursus, case when cijfer >= 6 then ‘voldoende’ when cijfer < 6 then ‘onvoldoende’ else ‘ingeschreven’ endfrom Tentamen

Resultaat:

STUDENT CURSUS CASE ======= ====== ============ 1 II voldoende 1 DW onvoldoende 1 DB onvoldoende 1 DB voldoende 2 IM onvoldoende 2 IM onvoldoende 4 DB ingeschreven

Page 120: Powerpoint-presentatie bij H1-10

Speciale functies (2): iff

select nr, naam, iif(mentor is null, ‘heeft geen mentor’, ‘heeft mentor’)from Student

Resultaat:

NR NAAM CASE ========= ====== ================= 1 Berk heeft mentor 2 Tack heeft mentor 3 Bos heeft mentor 4 Eik heeft geen mentor

120bij: Relationele databases en SQL ©Mattic b.v.

Page 121: Powerpoint-presentatie bij H1-10

Selecties: where

121bij: Relationele databases en SQL ©Mattic b.v.

select code, naam, credits -- 3: projectiefrom Cursus -- 1: brontabelwhere examinator = ‘DAT’ -- 2: selectie

select code, naam, creditsfrom Cursuswhere examinator = 'DAT'

code naam uren creditsexaminatorII

DWDBIMSW

Inleiding informatica Discrete wiskunde Databases Informatiemodelleren Semantic web

80120120150120

34454

BACDATCODDAT

Cursus

code naam creditsDWIM

Discrete wiskunde Informatiemodelleren

45

Let op: kanverwarrendzijn

Page 122: Powerpoint-presentatie bij H1-10

Ordening: order by

122bij: Relationele databases en SQL ©Mattic b.v.

Alle inschrijvingen vanaf 15 jan 2012:

select * from Inschrijvingorder by cijfer asc

Resultaat:

STUDENT CURSUS DATUM CIJFER VRIJSTELLING========= ====== =========== ====== ============ 4 II 20-jan-2012 <NULL> J 4 DB 29-feb-2012 <NULL> N 1 IM 20-jun-2012 <NULL> N 3 II 16-jan-2012 <NULL> <NULL> 1 DW 19-jan-2012 5 N 2 IM 26-jan-2012 5 N 1 II 12-jan-2012 7 N 1 DB 18-mrt-2012 8 N

• asc (klimmend ordenen) mag worden weggelaten.• nulls voorop! (databasespecifiek)• dalend ordenen: desc

Page 123: Powerpoint-presentatie bij H1-10

Verzamelingsoperatoren

• Wiskundige verzamelingsfuncties op twee (rij)verzamelingen A en B:

123bij: Relationele databases en SQL ©Mattic b.v.

A

A

A

B

B

B

B

A union B

A intersectB A except B

A

Page 124: Powerpoint-presentatie bij H1-10

Verzamelingsfuncties in SQL: de union

124bij: Relationele databases en SQL ©Mattic b.v.

select student, cursus, volgnr, cijferfrom Tentamenwhere volgnr >= 2unionselect student, cursus, volgnr, cijferfrom Tentamenwhere cijfer <= 5

Resultaat:

STUDENT CURSUS VOLGNR CIJFER======= ====== ====== ====== 1 DB 1 5 1 DB 2 8 1 DW 1 5 2 IM 1 4 2 IM 2 5

Vraag: hoe kan dit veel simpeler?

rijverzameling A

A

rijverzameling B

BA union B (‘vereniging’)

Page 125: Powerpoint-presentatie bij H1-10

Zinvol voorbeeld union

-- eerste pogingenselect student, cursus, datum, ‘eerste poging’ pogingfrom Tentamenwhere volgnr = 1union-- herkansingenselect student, cursus, datum, ‘herkansing’from Tentamenwhere volgnr >= 2

Tentamens met voldoende en tekst ‘eerste poging’ of ‘herkansing’:

Resultaat:

STUDENT CURSUS DATUM POGING ======= ====== =========== ============= 1 DB 19-apr-2012 eerste poging 1 DB 26-jun-2012 herkansing 1 DW 17-apr-2012 eerste poging 1 II 17-apr-2012 eerste poging 2 IM 06-apr-2012 eerste poging 2 IM 11-jun-2012 herkansing 4 DB 26-jun-2012 eerste poging

125bij: Relationele databases en SQL ©Mattic b.v.

Page 126: Powerpoint-presentatie bij H1-10

Nogmaals: demonstratie Boekverkenner / IQU

• Voorbeelddatabase: OpenSchool– databasediagrammen– scripts

• Installatie van voorbeelddatabase / in- en uitloggen• Uitvoeren van query’s vanuit de tekst• Werken met de Interactive Query Utility

126bij: Relationele databases en SQL ©Mattic b.v.

Page 127: Powerpoint-presentatie bij H1-10

Hoofdstuk 7:Hoofdstuk 7:

Informatie uit Informatie uit meerdere tabellen: meerdere tabellen: joinsjoins

Page 128: Powerpoint-presentatie bij H1-10

In dit hoofdstuk …

• Inner joins• Outer joins• Joinoperatoren• Joins over een brede sleutel• Samengestelde joins• Joins van tabel met zichzelf (autojoins)• Joins over niet-sleutelverwijzing• Navigatiepaden

128bij: Relationele databases en SQL ©Mattic b.v.

Page 129: Powerpoint-presentatie bij H1-10

OpenSchool Vakgroep

Studentnr naam mentor°

student cursusdatum/cijfer° vrijstelling°

Cursus

p

p p

Inschrijving

Docentp

docent cursusp

cursusvoorkennisp

Begeleider Voorkenniseis

p

Tentamen

cdcd

acode naamuren creditsexaminator°

aacr naam vervanger°vakgroep

p acode naam

a

studentcursusvolgnrdatum cijfer°

129bij: Relationele databases en SQL ©Mattic b.v.

Page 130: Powerpoint-presentatie bij H1-10

Inner join vanStudent enDocent

130bij: Relationele databases en SQL ©Mattic b.v.

join = verbrede tabel(via verwijzing)

nr naammentor1234

Berk Tack Bos Eik

DATDATCOD

Docentacr naam vervangervakgroepDATCODBAC

C.Date E.Codd C.Bachman

COD

DAT

ISISST

Student

Student, verbreed metDocent (D): inner join

nr naammentorD.naamD.vervangerD.vakgroep123

Berk Tack Bos

DATDATCOD

C.Date C.Date E.Codd

CODCOD

ISISST

Page 131: Powerpoint-presentatie bij H1-10

Joinen als denormaliseren

nr naammentor1234

Berk Tack Bos Eik

DATDATCOD

Docentacr naam vervangervakgroep

DATCODBAC

C.Date E.Codd C.Bachman

COD

DAT

ISISST

Student

FA

Student, verbreed metDocent (D): inner join

nr naammentorD.naamD.vervangerD.vakgroep123

Berk Tack Bos

DATDATCOD

C.Date C.Date E.Codd

CODCOD

ISISST

FAFA

Jointabel bevat functionele afhankelijkheden met niet-unieke determinant:voldoet dus niet aan 3NV. (In database zou dat redundantie geven.)

131bij: Relationele databases en SQL ©Mattic b.v.

Page 132: Powerpoint-presentatie bij H1-10

Join-navigatiepad

nr naammentor1234

Berk Tack Bos Eik

DATDATCOD

Docentacr naam vervangervakgroep

DATCODBAC

C.Date E.Codd C.Bachman

COD

DAT

ISISST

Student

Studentnr naam mentor°p

Docentp aacr naam vervanger°vakgroep

navigatievan kindnaar ouder

Navigatiepad loopt (in dit geval!) vanaf Student (startpunt)via de verwijzende sleutel naar Docent.

132bij: Relationele databases en SQL ©Mattic b.v.

Page 133: Powerpoint-presentatie bij H1-10

De inner join in SQL

Stap 1 :producttabel

133bij: Relationele databases en SQL ©Mattic b.v.

Studentnr naam mentor°p

Docentp aacr naam vervanger°vakgroep

select *from Student, Docent

Resultaat:

NR NAAM MENTOR ACR NAAM VERVANGER VAKGROEP========= ====== ====== ====== ========= ========= ======== 1 Berk DAT DAT C.Date COD IS 2 Tack DAT DAT C.Date COD IS 3 Bos COD DAT C.Date COD IS 4 Eik <NULL> DAT C.Date COD IS 1 Berk DAT COD E.Codd <NULL> IS 2 Tack DAT COD E.Codd <NULL> IS 3 Bos COD COD E.Codd <NULL> IS 4 Eik <NULL> COD E.Codd <NULL> IS 1 Berk DAT BAC C.Bachman DAT ST 2 Tack DAT BAC C.Bachman DAT ST 3 Bos COD BAC C.Bachman DAT ST 4 Eik <NULL> BAC C.Bachman DAT ST

producttabel: alle rijenvan Student gecombineerdmet alle rijen van Docent

incl. zinloze combinaties!

Page 134: Powerpoint-presentatie bij H1-10

134bij: Relationele databases en SQL ©Mattic b.v.

select *from Student S, Docent Dproducttabel

Stap 2 :selectie van producttabel

NR NAAM MENTOR ACR NAAM VERVANGER VAKGROEP========= ====== ====== ====== ========= ========= ======== 1 Berk DAT DAT C.Date COD IS 2 Tack DAT DAT C.Date COD IS 3 Bos COD DAT C.Date COD IS 4 Eik <NULL> DAT C.Date COD IS 1 Berk DAT COD E.Codd <NULL> IS 2 Tack DAT COD E.Codd <NULL> IS 3 Bos COD COD E.Codd <NULL> IS 4 Eik <NULL> COD E.Codd <NULL> IS 1 Berk DAT BAC C.Bachman DAT ST 2 Tack DAT BAC C.Bachman DAT ST 3 Bos COD BAC C.Bachman DAT ST 4 Eik <NULL> BAC C.Bachman DAT ST

where S.mentor = D.acrselectie:alleen de zinvolle rijen

uit Student uit Docent

Resultaattabel

Page 135: Powerpoint-presentatie bij H1-10

135bij: Relationele databases en SQL ©Mattic b.v.

select S.nr, S.naam, S.mentor, D.naam, D.vervanger, D.vakgroepfrom Student S, Docent Dwhere S.mentor = D.acr

Resultaat:

NR NAAM MENTOR NAAM VERVANGER VAKGROEP========= ====== ====== ====== ========= ======== 1 Berk DAT C.Date COD IS 2 Tack DAT C.Date COD IS 3 Bos COD E.Codd <NULL> IS

inner join!

Studentnr naam mentor°p

Docentp aacr naam vervanger°vakgroep

Stap 3 : projectie(schrap primairesleutel vanoudertabel

Page 136: Powerpoint-presentatie bij H1-10

Inner join met extra conditie

Geef van elke cursus die een examinator heeft en die 4 ofminder credits hebben, de cursusnaam en het acroniem ende naam van de examinator.

select C.naam, C.examinator, D.naamfrom Cursus C, Docent Dwhere C.examinator = D.acr and C.credits <= 4

joinconditieaanvullende conditie

Zet de joinconditie voorop: kwestie van goede programmeerstijl

136bij: Relationele databases en SQL ©Mattic b.v.

Page 137: Powerpoint-presentatie bij H1-10

Inner join-operator

137bij: Relationele databases en SQL ©Mattic b.v.

select C.naam, C.examinator, D.naamfrom Cursus C, Docent Dwhere C.examinator = D.acr and C.credits <= 4

Equivalent, met inner join-operator:

select C.naam, C.examinator, D.naamfrom Cursus C inner join Docent D on C.examinator = D.acrwhere C.credits <= 4

kortweg: join

Page 138: Powerpoint-presentatie bij H1-10

Left outer joinvan Studenten Docent

138bij: Relationele databases en SQL ©Mattic b.v.

nr naammentor1234

Berk Tack Bos Eik

DATDATCOD

Docentacr naam vervangervakgroepDATCODBAC

C.Date E.Codd C.Bachman

COD

DAT

ISISST

Student

Student, verbreed metDocent (D):left outer join

nr naammentorD.naamD.vervangerD.vakgroep123

Berk Tack Bos

DATDATCOD

C.Date C.Date E.Codd

CODCOD

ISISST

4 Eik

tabelverbreding opde outer join-manier:elke rij wordt verbreed

Page 139: Powerpoint-presentatie bij H1-10

De left outer join in SQL

139bij: Relationele databases en SQL ©Mattic b.v.

Gewenst resultaat: NR NAAM MENTOR NAAM VERVANGER VAKGROEP========= ====== ====== ====== ========= ======== 1 Berk DAT C.Date COD IS 2 Tack DAT C.Date COD IS 3 Bos COD E.Codd <NULL> IS 4 Eik <NULL> <NULL> <NULL> <NULL>

We maken deze ‘left outer join’ als een inner join met een union:

select S.nr, S.naam, S.mentor, D.naam, D.vervanger, D.vakgroepfrom Student S, Docent Dwhere S.mentor = D.acrunionselect nr, naam, mentor, null, null, nullfrom Studentwhere mentor is null

de extra rij (studentzonder mentor)

‘left’: van linker tabel komen alle rijen in het resultaat

Page 140: Powerpoint-presentatie bij H1-10

De left outer join-operator

Left outer join, via union:

select S.nr, S.naam, S.mentor, D.naam, D.vervanger, D.vakgroepfrom Student S, Docent Dwhere S.mentor = D.acrunionselect nr, naam, mentor, null, null, nullfrom Studentwhere mentor is null

Equivalent en simpeler, met de left outer join-operator:

select S.nr, S.naam, S.mentor, D.naam, D.vervanger, D.vakgroepfrom Student S left outer join Docent D on S.mentor = D.acr

left: linker tabeloperand wordt verbreed

140bij: Relationele databases en SQL ©Mattic b.v.

Page 141: Powerpoint-presentatie bij H1-10

Left outer join met oudertabel voorop (1)

Geef alle docenten, met hun acroniem en naam en, voor zover ze er zijn,het nummer en de naam van de studenten waarvan zij mentor zijn.

Kan niet in SQL!

Merk op: overzicht met herhalende groep gevraagd!

Namelijk:

141bij: Relationele databases en SQL ©Mattic b.v.

ACR NAAM ---STUDENTEN--- (NR NAAM )------ --------- -------- ------DAT C.Date 1 Berk 2 TackCOD E.Codd 3 BosBAC C.Bachman <NULL> <NULL>

Page 142: Powerpoint-presentatie bij H1-10

Left outer join met oudertabel voorop (2)

Meest in de buurt komt de volgende oplossing:

select D.acr, D.naam, S.nr, S.naamfrom Docent D left outer join Student S on D.acr = S.mentor

Resultaattabel:

ACR NAAM NR NAAM ====== ========= ========= ======DAT C.Date 1 Berk DAT C.Date 2 Tack COD E.Codd 3 Bos BAC C.Bachman <NULL> <NULL>

genormaliseerde versievan gevraagd overzicht

142bij: Relationele databases en SQL ©Mattic b.v.

ACR NAAM ---STUDENTEN--- (NR NAAM )------ --------- -------- ------DAT C.Date 1 Berk 2 TackCOD E.Codd 3 BosBAC C.Bachman <NULL> <NULL>

Page 143: Powerpoint-presentatie bij H1-10

De right en full outer join

De left outer join volstaat!

Aanname daarbij:a) alleen ‘homogene’ overzichten, d.w.z. van één soort

van ding, bepaald door één starttabelb) navigatie starten in de juiste (start)tabelc) volgorden in SQL-statement aanpassen aan het

navigatiepad

(zie voorbeelden in cursusboek)

143bij: Relationele databases en SQL ©Mattic b.v.

Page 144: Powerpoint-presentatie bij H1-10

Joins over een brede sleutel

Gevraagd: voor elk tentamen het aantal dagen dat is verstreken sinds de cursusinschrijving. De benodigde tabellen zijn weergegeven in figuur 7.7

student cursus datum /cijfer° vrijstelling°p Inschrijving

p

Tentamenstudent cursus volgnrdatum cijfer°

SQL: stap voor stap (zie Boek / Boekverkenner). Uiteindelijk:

select T.student, T.cursus, T.volgnr, T.datum - I.datum aantal_dagen_na_inschrijvingfrom Tentamen T join Inschrijving I on T.student = I.student and T.cursus = I.cursus

144bij: Relationele databases en SQL ©Mattic b.v.

Page 145: Powerpoint-presentatie bij H1-10

Samengestelde joins (1)

Geef een overzicht van alle herkansingstentamens, waarbij naast hetstudentnummer de naam van de student wordt vermeld. Verder moetin plaats van de cursuscode de naam van de cursus worden vermeld.

Deze vinden we terug inde SQL-oplossing!

Tentamen

Inschrijving

CursusStudent

De starttabel en het navigatiepad volgen uit de vraagstelling:

145bij: Relationele databases en SQL ©Mattic b.v.

Page 146: Powerpoint-presentatie bij H1-10

Samengestelde joins (2)

SQL:

select T.student, C.naam, T.volgnr, T.datum, T.cijferfrom Tentamen T join Inschrijving I on T.student = I.student and T.cursus = I.cursus join Student S on I.student = S.nr join Cursus C on I.cursus = C.codewhere T.volgnr >= 2

Tentamen

Inschrijving

CursusStudent

146bij: Relationele databases en SQL ©Mattic b.v.

Page 147: Powerpoint-presentatie bij H1-10

Gemengd gebruik van inner en outer joins

Geef van elke inschrijving waarvoor een vrijstelling is verleendhet studentnummer, de cursuscode, de datum en – voor zover vantoepassing – de naam van de examinator.

Inschrijving

Cursus

Docent(Examinator)

Starttabel en navigatiepad:SQL:

select I.student, I.cursus, I.datum, D.naam examinatorfrom Inschrijving I join Cursus C on I.cursus = C.code left outer join Docent D on C.examinator = D.acrwhere I.vrijstelling = 'J'

NB. Verwijzing van Inschrijving naar Cursus isverplicht, dus geen verschil inner en outer join.

147bij: Relationele databases en SQL ©Mattic b.v.

Page 148: Powerpoint-presentatie bij H1-10

Autojoins

148bij: Relationele databases en SQL ©Mattic b.v.

Docentp aacr naam vervanger°vakgroep

Vraagstelling:Geef van alle docenten die een vervanger hebben, het acroniemen de naam en ook het acroniem en de naam van de vervanger.

Aanpak:Tabel Docent (starttabel) doorlopen en via de verwijzing in dezelfde tabel de vervanger opzoeken.

Truc: ga - conceptueel - uit van twee exemplaren van Docent,één in de rol van docenten waarvoor het overzicht gemaaktwordt, en één in de rol van mogelijke vervangers.

Page 149: Powerpoint-presentatie bij H1-10

Autojoin: joinen met ander exemplaar van dezelfde tabel

Vat een recursieve verwijzing op als een virtuele exemplarenvan de ene tabel Docent, met elk een eigen naam(alias), waarvan de één naar de ander verwijst:

Recursieve verwijzing:opvatten als gewoneverwijzing! Welge-kozen aliassen gevende rollen weer van detabelexemplaren inhet probleem.

Docent (V)p aacr naam vervanger°vakgroep

Docent (D)p aacr naam vervanger°vakgroep

SQL:

select D.acr, D.naam, V.acr, V.naamfrom Docent D join Docent V on D.vervanger = V.acr

Docent (D)

Docent (V)

Navigatiepad:

149bij: Relationele databases en SQL ©Mattic b.v.

Page 150: Powerpoint-presentatie bij H1-10

Met populatie:

Elk virtueel tabelexemplaar is de volledige tabel(gebruikt in een zekere rol)

150bij: Relationele databases en SQL ©Mattic b.v.

Docent (V)acr naam vervangerDATCODBAC

C.Date E.Codd C.Bachman

COD

DAT

Docent (D)acr naam vervangerDATCODBAC

C.Date E.Codd C.Bachman

COD

DAT

Virtueel tabelexemplaar is volledige tabel!

Page 151: Powerpoint-presentatie bij H1-10

Een left outer autojoin in SQL

select D.acr, D.naam, V.acr, V.naamfrom Docent D left outer join Docent V on D.vervanger = V.acr

Geef van alle docenten het acroniem en de naam en als ze eenvervanger hebben ook het acroniem en de naam van de vervanger.

ACR NAAM ACR NAAM ====== ========= ====== ======DAT C.Date COD E.Codd COD E.Codd <NULL> <NULL> BAC C.Bachman DAT C.Date

Resultaat:

151bij: Relationele databases en SQL ©Mattic b.v.

Docent (V)acr naam vervangerDATCODBAC

C.Date E.Codd C.Bachman

COD

DAT

Docent (D)acr naam vervangerDATCODBAC

C.Date E.Codd C.Bachman

COD

DAT

Page 152: Powerpoint-presentatie bij H1-10

Ouders zonder kind (1)

Probleem: geef alle cursussen (code en naam) waarvoor geenenkele inschrijving bestaat.

Algemeen: geef alle ouderrijen waar geen kindrij bij hoort.

student cursusdatum/cijfer° vrijstelling°

Cursus

p

p

Inschrijving

acode naamuren creditsexaminator°

We lossen dit probleem op met een outer join. Later doen we het eenvoudiger, met een subselect. Maar deze manier is leerzaam en kan ook erg snel zijn (bij grote databases)!

Merk op: er wordt precies gevraagd naar de ouderrijen dieverdwijnen bij de inner join (en behouden blijven bij de left outerjoin) van Cursus en Inschrijving.

Hoe herkennen we die rijen in de left outer join?152bij: Relationele databases en SQL ©Mattic b.v.

Page 153: Powerpoint-presentatie bij H1-10

Ouders zonder kind (2)

select *from Cursus C left outer join Inschrijving I on C.code = I.cursus

zit niet in inner join:ouder zonder kind!

CODE NAAM UREN CREDITS EXAMINATOR STUDENT CURSUS DATUM CIJFER VRIJSTELLING====== ===================== ========= ======= ========== ========= ====== =========== ====== ============II Inleiding informatica 80 3.0 BAC 1 II 12-jan-2012 7 N II Inleiding informatica 80 3.0 BAC 2 II 12-jan-2012 <NULL> J II Inleiding informatica 80 3.0 BAC 3 II 16-jan-2012 <NULL> <NULL> II Inleiding informatica 80 3.0 BAC 4 II 20-jan-2012 <NULL> J DW Discrete wiskunde 120 4.0 DAT 1 DW 19-jan-2012 5 N DW Discrete wiskunde 120 4.0 DAT 2 DW 12-jan-2012 <NULL> J DB Databases 120 4.0 COD 1 DB 18-mrt-2012 8 N DB Databases 120 4.0 COD 4 DB 29-feb-2012 <NULL> N IM Informatiemodelleren 150 5.0 DAT 1 IM 20-jun-2012 <NULL> N IM Informatiemodelleren 150 5.0 DAT 2 IM 26-jan-2012 5 N SW Semantic web 120 4.0 <NULL> <NULL> <NULL> <NULL> <NULL> <NULL>

student cursusdatum/cijfer° vrijstelling°

Cursus

p

p

Inschrijving

acode naamuren creditsexaminator°

Eerst volledige left outer join:

(of andere verplichte kolom van kindtabel)

select C.code, C.naamfrom Cursus C left outer join Inschrijving I on C.code = I.cursuswhere I.student is null

Dan conditie toevoegen:

153bij: Relationele databases en SQL ©Mattic b.v.

Page 154: Powerpoint-presentatie bij H1-10

Hoofdstuk 8:Hoofdstuk 8:

Statistische Statistische informatieinformatie

Page 155: Powerpoint-presentatie bij H1-10

In dit hoofdstuk …

• Statistische functies• Scheve query’s• Groeperen• Voorwaarden aan groepen: having• Groeperen is denormaliseren• Statistische joinquery’s• Het conceptuele algoritme

155bij: Relationele databases en SQL ©Mattic b.v.

Page 156: Powerpoint-presentatie bij H1-10

OpenSchool Vakgroep

Studentnr naam mentor°

student cursusdatum/cijfer° vrijstelling°

Cursus

p

p p

Inschrijving

Docentp

docent cursusp

cursusvoorkennisp

Begeleider Voorkenniseis

p

Tentamen

cdcd

acode naamuren creditsexaminator°

aacr naam vervanger°vakgroep

p acode naam

a

studentcursusvolgnrdatum cijfer°

156bij: Relationele databases en SQL ©Mattic b.v.

Page 157: Powerpoint-presentatie bij H1-10

Statistische functies

count aantal rijen, of aantal waarden in kolom sum / avg totaal / gemiddelde van waarden in kolom max / min grootste / kleinste waarde in kolom

Hoeveel inschrijvingen zijn er voor de cursus met code II?

select count(*) aantal -- 3from Inschrijving -- 1where cursus = 'II' -- 2

één statistischewaarde overhele tabel(één groep)

157bij: Relationele databases en SQL ©Mattic b.v.

Resultaat:

AANTAL========= 4

Page 158: Powerpoint-presentatie bij H1-10

‘Scheve’ query’s

select code, count(*)from Cursus

één waarde per rij

één waarde voor hele tabel

Wat deugt hierniet aan?

foutieve ´scheve´ query!

158bij: Relationele databases en SQL ©Mattic b.v.

Page 159: Powerpoint-presentatie bij H1-10

Groeperen

Aantal inschrijvingenper cursus:

select cursus, count(*) aantal -- 3from Inschrijving -- 1group by cursus -- 2 tabel Inschrijving

wordt opgedeeldin groepen van rijen:- per cursus één groep;- één statistische waardeper groep (= per cursus)

Resultaat:

CURSUS AANTAL====== =========DB 2 DW 2 II 4 IM 2

studentcursus datum cijfer vrijstelling1111222344

I IDWDBIMI I

DWIMI II IDB

12-jan-2012 19-jan-2012 18-mrt-2012 20-jun-2012 12-jan-2012 12-jan-2012 26-jan-2012 16-jan-2012 20-jan-2012 29-feb-2012

758

5

NNNNJJN

JN

Inschrijving

159bij: Relationele databases en SQL ©Mattic b.v.

Page 160: Powerpoint-presentatie bij H1-10

Verfijnd groeperen

Aantallen tentamens per inschrijving(= per combinatie student/cursus):

select student, cursus, count(*)from Tentamengroup by student, cursus

Resultaat:

STUDENT CURSUS COUNT======= ====== ========= 1 DB 2 1 DW 1 1 II 1 2 IM 2 4 DB 1

student cursus volgnr datum cijfer1111224

I IDWDBDBIMIMDB

1112121

17-apr-2012 17-apr-2012 19-apr-2012 15-jun-2012 06-apr-2012 11-jun-2012 26-jun-2012

755845

Tentamen

Groeperen over twee of meerkolommen geeft een verfijnderegroepenindeling.

Voorbeeld:

160bij: Relationele databases en SQL ©Mattic b.v.

Page 161: Powerpoint-presentatie bij H1-10

Voorwaarden aan groepen: having

studentcursus datum cijfer vrijstelling1111222344

I IDWDBIMI I

DWIMI II IDB

12-jan-2012 19-jan-2012 18-mrt-2012 20-jun-2012 12-jan-2012 12-jan-2012 26-jan-2012 16-jan-2012 20-jan-2012 29-feb-2012

758

5

NNNNJJN

JN

Inschrijving

Per cursus aantal inschrijvingenzonder vrijstelling.Beperken tot cursussen waar-voor dat aantal tenminste 2 is:

select cursus, count(*) aantal -- 5from Inschrijving -- 1where vrijstelling = 'N' -- 2group by cursus -- 3having count(*) >= 2 -- 4

Resultaat:

CURSUS AANTAL====== =========DB 2 IM 2

161bij: Relationele databases en SQL ©Mattic b.v.

Page 162: Powerpoint-presentatie bij H1-10

Groeperen als denormaliseren (1)

Geef voor elke cursus met vrijstelling = ‘ N’:cursuscode, aantal inschrijvingen en gemiddelde cijfer.

Oplossing:

select cursus, -- 4 count(*) aantal, -- avg(cijfer) gemiddelde_cijfer --from Inschrijving -- 1where vrijstelling = ‘N’ -- 2group by cursus -- 3

Eindresultaat (na stap 4):CURSUS AANTAL GEMIDDELDE_CIJFER====== ========= =================DB 2 8 DW 1 5 II 1 7 IM 2 5

162bij: Relationele databases en SQL ©Mattic b.v.

Page 163: Powerpoint-presentatie bij H1-10

Groeperen als denormaliseren (2)

select …from Inschrijving -- 1where vrijstelling = ‘N’ -- 2

is het tussenresultaat:

Na stap 2:

STUDENT CURSUS DATUM CIJFER VRIJSTELLING========= ====== =========== ====== ============ 1 II 12-jan-2012 7 N 1 DW 19-jan-2012 5 N 1 DB 18-mrt-2012 8 N 1 IM 20-jun-2012 <NULL> N 2 IM 26-jan-2012 5 N 4 DB 29-feb-2012 <NULL> N

In stap 3 gaan wedit groeperenop kolom cursus

163bij: Relationele databases en SQL ©Mattic b.v.

Page 164: Powerpoint-presentatie bij H1-10

Groeperen als denormaliseren (3)

Bij stap 3 – het groeperen op cursus – wordt een herhalende groep gemaakt:

select …from Inschrijving -- 1where vrijstelling = ‘N’ -- 2group by cursus -- 3

Dit is tabel met vier rijenen twee kolommen,waarvan één eenherhalende groep!

164bij: Relationele databases en SQL ©Mattic b.v.

STUDENT CURSUS DATUM CIJFER VRIJSTELLING========= ====== =========== ====== ============ 1 DB 18-mrt-2012 8 N 4 29-feb-2012 <NULL> N ------------------------------------------------ 1 DW 19-jan-2012 5 N ------------------------------------------------ 1 II 12-jan-2012 7 N ------------------------------------------------ 1 IM 20-jun-2012 <NULL> N 2 26-jan-2012 5 N

Page 165: Powerpoint-presentatie bij H1-10

Groeperen als denormaliseren (4)

Nog duidelijker wanneer we kolom cursus voorop zetten:

Zo ontstaat het eindresultaat:CURSUS AANTAL GEMIDDELDE_CIJFER====== ========= =================DB 2 8 DW 1 5 II 1 7 IM 2 5

165bij: Relationele databases en SQL ©Mattic b.v.

CURSUS STUDENT DATUM CIJFER VRIJSTELLING====== ========= =========== ====== ============DB 1 18-mrt-2012 8 N 4 29-feb-2012 <NULL> N ------------------------------------------------DW 1 19-jan-2012 5 N ------------------------------------------------II 1 12-jan-2012 7 N ------------------------------------------------ IM 1 20-jun-2012 <NULL> N 2 26-jan-2012 5 N

voor elke groep:

count(*),avg(cijfer),…

Page 166: Powerpoint-presentatie bij H1-10

Statistische joinquery’s

166bij: Relationele databases en SQL ©Mattic b.v.

code naam ..II

DWDBIMSW

Inleiding informatica Discrete wiskunde Databases Informatiemodelleren Semantic web

..

..

..

..

..

studentcursus datum ..1111222344

I IDWDBIMI I

DWIMI II IDB

12-jan-2012 19-jan-2012 18-mrt-2012 20-jun-2012 12-jan-2012 12-jan-2012 26-jan-2012 16-jan-2012 20-jan-2012 29-feb-2012

..

..

..

..

..

..

..

..

..

..

Cursus

Inschrijving

Gevraagd: cursussen met hunhun aantallen inschrijvingen

Cursus, verbreed metstatistische gegevens vanInschrijving: de 'inner' manier

code naam .. aantal_inschrijvingenII

DWDBIM

Inleiding informatica Discrete wiskunde Databases Informatiemodelleren

..

..

..

..

4222

Merk op:- tabelverbreding op de inner join manier: we missen cursus SW- starttabel is Cursus: navigatie is ouder richting kind, tegen de richting van de verwijzing in

Page 167: Powerpoint-presentatie bij H1-10

Starttabel en navigatierichting bij statistische query

cursist cursus datum ...

code naam ...Cursusp

Inschrijvingp

code naam ... aantalInschrijvingen

Cursus, verbreed met statistischegegevens van Inschrijvingp

starttabel

navigatierichting

167bij: Relationele databases en SQL ©Mattic b.v.

Page 168: Powerpoint-presentatie bij H1-10

Statistische joinquery in SQL

(Gevraagd: cursussen met hun aantallen inschrijvingen)

Poging:

select C.code, C.naam, count(*) aantal_inschrijvingenfrom Cursus C join Inschrijving I on C.code = I.cursusgroup by C.code

cursist cursus datum ...

code naam ...Cursusp

Inschrijvingp

code naam ... aantalInschrijvingen

Cursus, verbreed metstatistische gegevensvan Inschrijvingp

Conceptueel is dit goed: we moeten immers groepen hebbenmet gelijke cursuscode. Die hebben dan vanzelf ook dezelfdecursusnaam (waarom?)

168bij: Relationele databases en SQL ©Mattic b.v.

Page 169: Powerpoint-presentatie bij H1-10

Onverwacht verfijnd groeperen

De juiste oplossing:

169bij: Relationele databases en SQL ©Mattic b.v.

verplicht verfijnd groeperen,ondanks de functionele afhankelijkheid

select C.code, C.naam, count(*) aantal_inschrijvingenfrom Cursus C join Inschrijving I on C.code = I.cursusgroup by C.code, C.naam

FA

Page 170: Powerpoint-presentatie bij H1-10

Statistische outer joinquery’s

170bij: Relationele databases en SQL ©Mattic b.v.

code naam ..II

DWDBIMSW

Inleiding informatica Discrete wiskunde Databases Informatiemodelleren Semantic web

..

..

..

..

..

studentcursus datum ..1111222344

I IDWDBIMI I

DWIMI II IDB

12-jan-2012 19-jan-2012 18-mrt-2012 20-jun-2012 12-jan-2012 12-jan-2012 26-jan-2012 16-jan-2012 20-jan-2012 29-feb-2012

..

..

..

..

..

..

..

..

..

..

Cursus

Inschrijving

Gevraagd: alle cursussen methun aantallen inschrijvingen

Merk op:- nu ook cursus SW (aangevuld met null)

Cursus, verbreed metstatistische gegevens vanInschrijving: de 'outer' manier

code naam .. aantal_inschrijvingenII

DWDBIMSW

Inleiding informatica Discrete wiskunde Databases Informatiemodelleren Semantic web

..

..

..

..

..

4222

Page 171: Powerpoint-presentatie bij H1-10

Statistische outer joinquery in SQL

(alle cursussen met hunaantallen inschrijvingen)

Poging:select C.code, C.naam, count(*) aantal_inschrijvingenfrom Cursus C left outer join Inschrijving I on C.code = I.cursusgroup by C.code, C.naam

Resultaat van poging:

CODE NAAM AANTAL_INSCHRIJVINGEN====== ===================== =====================DB Databases 2 DW Discrete wiskunde 2 II Inleiding informatica 4 IM Informatiemodelleren 2 SW Semantic web 1 Waarom een 1?

Hoe op te lossen?

Juiste oplossing:

count(I.cursus)

171bij: Relationele databases en SQL ©Mattic b.v.

Page 172: Powerpoint-presentatie bij H1-10

Genest groeperen (vb: ‘minimax’-probleem)

select count(*)from Inschrijvinggroup by cursus

Aantallen inschrijvingenper cursus:

Resultaat:

COUNT========= 2 2 4 2

Resultaat:

AVG(COUNT(*))------------- 3.6666667

genest groeperen = groeperen van groeperingsresultaat statistische waarde van statistische waarden

172bij: Relationele databases en SQL ©Mattic b.v.

select avg(count(*))from Inschrijvinggroup by cursus

Gemiddeld aantal inschrijvingenper cursus :

(in Firebirdmoet dit anders)

Page 173: Powerpoint-presentatie bij H1-10

Nogmaals een ‘scheve’ query

Poging:

select cursus, max(count(*))from Inschrijvinggroup by cursus

173bij: Relationele databases en SQL ©Mattic b.v.

Gevraagd:

de cursus (of cursussen)met het grootste aantalinschrijvingen

Waarom is dit een ‘scheve’ query en dus fout?

cursist cursus datum ...

code naam ...Cursusp

Inschrijvingp

Page 174: Powerpoint-presentatie bij H1-10

De conceptuele verwerkingsvolgorde (1)

174bij: Relationele databases en SQL ©Mattic b.v.

Gevraagd: overzicht van inschrijvingendie met een voldoende zijn afgesloten enwaarvan aantal tentamens 2 is of hoger.Orden op dat aantal, van hoog naar laag. Oplossen: vanuit ‘bekende’ conceptueleverwerkingsvolgorde’:

studentcursusdatum/cijfer° vrijstelling°p Inschrijving

p

Tentamen

a

studentcursusvolgnrdatum cijfer°

met opzet hier zonder joinoperator!

select I.student, I.cursus, count(*)from

5. projectie op I.student, I.cursus, met extra statistische kolom

Inschrijving I, Tentamen T 1. brontabel (cartesisch product)

where I.student = T.student and I.cursus = T.cursus and I.cijfer >= 6

2. rijselectie van brontabel

group by I.student, I.cursus 3. groeperen (geeft één rij per inschrijving, met herhalende groep)

having count(*) >= 2 4. rijselectie van gegroepeerde tabel

order by count(*) 6. ordening op aantal (count(*))

Page 175: Powerpoint-presentatie bij H1-10

De conceptuele verwerkingsvolgorde (2)

De werkelijke volgorde kan anders zijn!

175bij: Relationele databases en SQL ©Mattic b.v.

brontabel

where

group by

having

select … from

order by

Page 176: Powerpoint-presentatie bij H1-10

Hoofdstuk 9:Hoofdstuk 9:

Subselects en Subselects en viewsviews

Page 177: Powerpoint-presentatie bij H1-10

In dit hoofdstuk …

• subselects als oplossing van deelproblemen– subselect in:

… where-clausule… select-clausule… from-clausule… having-clausule (zie boek)

• gecorreleerde en niet-gecorreleerde subselects• subselects en joins: navigatie via subselect(s)• gecorreleerde subselects

– … met (not) exists• geneste subselects• views als oplossing van deelproblemen

177bij: Relationele databases en SQL ©Mattic b.v.

Page 178: Powerpoint-presentatie bij H1-10

OpenSchool Vakgroep

Studentnr naam mentor°

student cursusdatum/cijfer° vrijstelling°

Cursus

p

p p

Inschrijving

Docentp

docent cursusp

cursusvoorkennisp

Begeleider Voorkenniseis

p

Tentamen

cdcd

acode naamuren creditsexaminator°

aacr naam vervanger°vakgroep

p acode naam

a

studentcursusvolgnrdatum cijfer°

178bij: Relationele databases en SQL ©Mattic b.v.

Page 179: Powerpoint-presentatie bij H1-10

Waar een subselect?

179bij: Relationele databases en SQL ©Mattic b.v.

In principe (conceptueel):overal waar een relationele expressie(tabel) of atomaire waarde betekenisvol is.

select ... from ... where ... group by ... having ...

(select ... ...)

Page 180: Powerpoint-presentatie bij H1-10

Subselect in where-clausule

Gevraagd: geef de oudste inschrijving (of inschrijvingen).Vermeld studentnummer, cursuscode en datum.

180bij: Relationele databases en SQL ©Mattic b.v.

student cursusdatum/cijfer° vrijstelling°p Inschrijving

Stapsgewijs oplossen:

select student, cursus, datumfrom Inschrijvingwhere datum = -- de vroegste inschrijvingsdatum

stap 1( select min(datum) from Inschrijving)

stap 2

Deze subselect is niet-gecorreleerd: kan a.h.w. wordenuitgeknipt en zelfstandig worden uitgevoerd.

Page 181: Powerpoint-presentatie bij H1-10

Subselect in select-clausule (1)

Gevraagd: van elke cursus de cursuscode, de cursusnaamen het aantal inschrijvingen.

code naam uren ...II

DWDBIMSW

Inleiding informatica Discrete wiskunde Databases Informatiemodelleren Semantic web

80120120150120

Cursuscursistcursus datum ...

1111222344

IIDWDBIMII

DWIMIII IDB

12-jan-2012 19-jan-2012 18-mrt-2012 20-jun-2012 12-jan-2012 12-jan-2012 26-jan-2012 16-jan-2012 20-jan-2012 29-feb-2012

Inschrijving

Stapsgewijs oplossen:

select code, naam, -- aantal inschrijvingen

from Cursus

deelprobleem ( select count(*) from Inschrijving where cursus = C.code)C

met oplossing

subselect is gecorreleerd: voor elke cursus van de hoofdselect andere subselect181bij: Relationele databases en SQL ©Mattic b.v.

Page 182: Powerpoint-presentatie bij H1-10

Subselect in select-clausule (2)

select code, naam, (-- aantal inschrijvingen select count(*) from Inschrijving where cursus = C.code)from Cursus C

De oplossing:

kunnen we nog als volgt herschrijven met een kolomalias:

select code, naam, (select count(*) from Inschrijving where cursus = C.code) aantal_inschrijvingenfrom Cursus C

De kolomnaam (alias) vervangt nu het commentaar.

182bij: Relationele databases en SQL ©Mattic b.v.

Page 183: Powerpoint-presentatie bij H1-10

Subselect in from-clausule

Gevraagd: maximum van de aantallen inschrijvingen per cursus.

(minimax-probleem!)

(select count(*) aantal_inschrijvingen from Cursus C join Inschrijving I on C.code = I.cursus group by C.code)

student cursusdatum/cijfer° vrijstelling°

Cursus

p

p

Inschrijving

acode naamuren creditsexaminator°

Stapsgewijs oplossen:

select max(aantal_inschrijvingen)from

deelprobleemgevraagd: tabel met eenkolom aantal_inschrijvingen(per cursus)

183bij: Relationele databases en SQL ©Mattic b.v.

Page 184: Powerpoint-presentatie bij H1-10

Subselectnavigatie en joinnavigatie

cursist cursus datum ...

code naam ...Cursusp

Inschrijvingp

(gevraagd: van elke cursus: code, naamen aantal inschrijvingen)

Bij beide stap je over van Cursus naar Inschrijving: navigatie tegen richting verwijzende sleutel in (‘van één naar veel’).

184bij: Relationele databases en SQL ©Mattic b.v.

met subselectnavigatie:

select code, naam, (select count(*) from Inschrijving where cursus = C.code) aantal_inschrijvingenfrom Cursus C

met joinnavigatie:

select C.code, C.naam, count(I.cursus)from Cursus C left outer join Inschrijving I on C.code = I.cursusgroup by C.code, C.naam

Page 185: Powerpoint-presentatie bij H1-10

Subselect met verzamelingenoperator ‘in’

Gevraagd: alle cursussen (code en naam) die cursus DW als voorkennis eisen

185bij: Relationele databases en SQL ©Mattic b.v.

Cursusp

cursusvoorkennisp Voorkenniseis

acode naamuren creditsexaminator°

stap 1select code, naamfrom Cursuswhere code in -- verzameling codes van cursussen met voorkennis DWstap 2 (

select cursus from Voorkenniseis where voorkennis = 'DW')

Page 186: Powerpoint-presentatie bij H1-10

Navigatie over brede sleutel

Gevraagd: inschrijvingen (studentnummer,cursuscode en datum) waarvoor twee maalof vaker tentamen is gedaan.

186bij: Relationele databases en SQL ©Mattic b.v.

student cursus datum ...p Inschrijving

p

Tentamenstudent cursus volgnr ...

select student, cursus, datumfrom Inschrijvingwhere (student, cursus) in -- verzameling combinaties (student, cursus) uit Tentamen die daarin minstens twee keer voorkomen

stap 1

(

select student, cursus from Tentamen group by student, cursus having count(*) >= 2)

stap 2

(kan niet in Firebird: zie boek voor trucje)

Page 187: Powerpoint-presentatie bij H1-10

niet zelfstandig uit tevoeren (gecorreleerd)

Ongecorreleerde en gecorreleerde subselects

1. Gevraagd: de vroegste inschrijvingen:

select student, cursus, datumfrom Inschrijvingwhere datum = (-- de vroegste inschrijvingsdatum select min(datum) from Inschrijving)

2. Gevraagd: de vroegste inschrijvingen per cursus:

select student, cursus, datumfrom Inschrijving Iwhere datum = (-- de vroegste inschrijvingsdatum bij -- de cursus van ‘deze’ inschrijving select min(datum) from Inschrijving where cursus = I.cursus)

twee exemplarenvan Inschrijving!

187bij: Relationele databases en SQL ©Mattic b.v.

zelfstandig uit te voeren(ongecorreleerd)

Page 188: Powerpoint-presentatie bij H1-10

Gecorreleerde subselectmet exists

student cursusdatum/cijfer° vrijstelling°

Cursus

p

p

Inschrijving

acode naamuren creditsexaminator°

188bij: Relationele databases en SQL ©Mattic b.v.

Gevraagd: cursussen waarvoor één of meer vrijstellingen zijn verleend.

Oplossing 1:ongecorreleerde subselect met in

select code, naamfrom Cursuswhere code in (select cursus from Inschrijving where vrijstelling = 'J')

Oplossing 2:gecorreleerde subselect met exists

select code, naamfrom Cursus Cwhere exists (select * from Inschrijving where cursus = C.code and vrijstelling = 'J')

geeft true alsverzamelingniet leeg verzameling

Page 189: Powerpoint-presentatie bij H1-10

Nogmaals:ouders zonder kind

Probleem: geef alle cursussen (code en naam) waarvoor geenenkele inschrijving bestaat.

student cursusdatum/cijfer° vrijstelling°

Cursus

p

p

Inschrijving

acode naamuren creditsexaminator°

Subselect met ‘not in’:

select code, naamfrom Cursuswhere code not in (select cursus from Inschrijving)

Subselect met ‘not exists’:

select code, naamfrom Cursus Cwhere not exists (select * from Inschrijving where cursus = C.code)

189bij: Relationele databases en SQL ©Mattic b.v.

Page 190: Powerpoint-presentatie bij H1-10

Geneste subselects

student cursusdatum/cijfer° vrijstelling°

Cursus

p

p

Inschrijving

Docentp

docentcursuspBegeleider

acode naamuren creditsexaminator°

aacr naam vervanger°vakgroep

Probleem: welke docenten (acroniem) zijn begeleider van decursus met de meeste inschrijvingen?

Navigatiepad volgt al uit de vraagstelling:

1

2 3

190bij: Relationele databases en SQL ©Mattic b.v.

Page 191: Powerpoint-presentatie bij H1-10

Oplossing in stappen volgt navigatiepad

select acr, naamfrom Docentwhere acr in (-- de verzameling acroniemen van docenten die begeleider zijn -- zijn van de cursus(sen) met de meeste inschrijvingen

stap 1

select docentfrom Begeleiderwhere cursus in (-- verzameling codes van cursussen met de meeste inschrijvingen

stap 2

select cursusfrom Inschrijvinggroup by cursushaving count (*) = (-- maximum aantal inschrijvingen per cursusstap 3

select max(aantal_inschrijvingen)from (select count(*) aantal_inschrijvingen from Inschrijving group by cursus))))stap 4

Navigatiepad omvat zelfs twee exemplaren van Inschrijving!

191bij: Relationele databases en SQL ©Mattic b.v.

Page 192: Powerpoint-presentatie bij H1-10

Views

• Een view is een ‘ named query’: een select-query die we kunnen bewaren en gebruiken als een databasetabel

• Een view kan als alternatief dienen voor een subselect• Views kunnen we (dus) net als subselects gebruiken om

een probleem op te delen in deelproblemen

192bij: Relationele databases en SQL ©Mattic b.v.

Page 193: Powerpoint-presentatie bij H1-10

Voorbeeld van een view (1)

Gevraagd: code, naam en aantal inschrijvingen van de cursus(sen)met de meeste inschrijvingen.

Oplossing 1: met subselect

select C.code, C.naam, count(*)from Cursus C join Inschrijving I on C.code = I.cursusgroup by C.code, C.naamhaving count(*) = (--maximum aantal inschrijvingen per cursus select max(aantal_inschrijvingen) from (select count(*) aantal_inschrijvingen from Inschrijving group by cursus))

- complexe hoofdquery met complexe (geneste) subselect- ter vereenvoudiging maken we een view voor het volgende deelprobleem: het aantal inschrijvingen per cursus

193bij: Relationele databases en SQL ©Mattic b.v.

Page 194: Powerpoint-presentatie bij H1-10

Voorbeeld van een view (2)

Oplossing 2: met een view en een (simpeler) subselect:

- Definitie van de view (genaamd vCursus)

create view vCursus (code, naam, aantal_inschrijvingen)as select C.code, C.naam, count(*) from Cursus C join Inschrijving I on C.code = I.cursus group by C.code, C.naam

- Oplossing van het volledige probleem is nu eenvoudig:

select code, naam, aantal_inschrijvingenfrom vCursuswhere aantal_inschrijvingen = (select max(aantal_inschrijvingen) from vCursus)

Hiermee is een deelprobleem opgelost.

194bij: Relationele databases en SQL ©Mattic b.v.

Page 195: Powerpoint-presentatie bij H1-10

Hoofdstuk 10:Hoofdstuk 10:

Wijzigen van een Wijzigen van een database-inhouddatabase-inhoud

Page 196: Powerpoint-presentatie bij H1-10

In dit hoofdstuk …

• Transacties• Het insert-statement• Het delete-statement• Het update-statement• Integriteitsregels

196bij: Relationele databases en SQL ©Mattic b.v.

Page 197: Powerpoint-presentatie bij H1-10

OpenSchool Vakgroep

Studentnr naam mentor°

student cursusdatum/cijfer° vrijstelling°

Cursus

p

p p

Inschrijving

Docentp

docent cursusp

cursusvoorkennisp

Begeleider Voorkenniseis

p

Tentamen

cdcd

acode naamuren creditsexaminator°

aacr naam vervanger°vakgroep

p acode naam

a

studentcursusvolgnrdatum cijfer°

Page 198: Powerpoint-presentatie bij H1-10

Transacties

• transactie = reeks SQL-statements die ofwel in hun geheel, ofwel in het geheel niet worden uitgevoerd.

• commitmoment = moment waarop de transactie definitief wordt– tevens einde van de transactie– expliciet via commit-statement– impliciet via DDL-statement

• DDL = subtaal voor structuurverandering, bv. create table

• rollback: terugdraaien van transactie– statement: rollback

198bij: Relationele databases en SQL ©Mattic b.v.

Page 199: Powerpoint-presentatie bij H1-10

Soorten databases m.b.t. transacties

Aard en frequentie van transacties bepalen hoe een database ‘leeft’. Verschillende ‘levenswijzen’:

• OnLine Transational Processing (OLTP)– database online gestuurd via programmatuur en (frequent)

gevuld vanuit automaten of bv. internet• Transactionele bedrijfssystemen

– bijhouden van dagelijkse veranderingen van de bedrijfswerkelijkheid (klanten, bestellingen, …)

• Datawarehouses– verzamelen historiegegevens en transformeren tot

waardevolle informatie

Page 200: Powerpoint-presentatie bij H1-10

Transactie afsluiten met commit(moment) of rollback

nieuwcommit-moment

start van transactie

toestand na laatstecommitmoment

rollback

start van transactie

toestand na laatstecommitmoment= terugkeertoestandna rollback

transactie afgeslotenmet commitmoment:

transactie afgeslotenmet rollback:

200bij: Relationele databases en SQL ©Mattic b.v.

Page 201: Powerpoint-presentatie bij H1-10

Transactiemodellen

• Impliciete transactiemodel: na elk commitmoment of rollback start nieuwe transactie

• Expliciete transactiemodel: start transactie pas nastart transaction-statement; tot die tijd is elk statement een transactie op zichzelf

• Meer hierover in hoofdstuk 15 ‘Transacties en concurrency’– … met name over hoe transacties van verschillende

gebruikers elkaar in de weg kunnen zitten en oplossingen daarvoor

201bij: Relationele databases en SQL ©Mattic b.v.

Page 202: Powerpoint-presentatie bij H1-10

Het insert-statement: poging tot invoegen

Voorbeeld enkelvoudige insert:

insert into Studentvalues (5, 'Stam', null)

Alternatief met kolommenlijst (en weglating null-waarde):

insert into Student (nr, naam)values (5, 'Stam', null)

Studentnr naam mentor°p

202bij: Relationele databases en SQL ©Mattic b.v.

Page 203: Powerpoint-presentatie bij H1-10

Meervoudige insert

Voorbeeld: nieuwe tabel DWCursus maakt deel uit vandatawarehouse met statistische informatie.Kolom begeleidJN moet waarde ‘J’ of ‘N’ krijgen al naargelang een cursus één of meer begeleiders heeft.

Cursusp

docent cursusp Begeleider

acode naam uren creditsexaminator°

gevulde tabellen uit OpenSchool-database:

IIDWDBIMSW

Inleiding informatica Discrete wiskunde Databases Informatiemodelleren Semantic web

80120120150120

34454

BACDATCODDAT

DATDATDATBACBAC

DBDWIMII

DB

insert into DWCursus select code, naam, iif(exists (select * from Begeleider where cursus = C.code), 'J', 'N') from Cursus C

203bij: Relationele databases en SQL ©Mattic b.v.

code naam begeleidJN°DWCursusp

nieuwe, lege tabel:

Page 204: Powerpoint-presentatie bij H1-10

Het delete-statement: poging tot verwijderen

IIDWDBIMSW

Inleiding informatica Discrete wiskunde Databases InformatiemodellerenSemantic web

80120120150120

34454

BACDATCODDAT

DBDBIMSW

I IDWDBDB

Cursusp

cursusvoorkennisp Voorkenniseis

cd

acode naam uren creditsexaminator°

1111222344

I IDWDBIMI IDWIMI II IDB

12-jan-2012 19-jan-2012 18-mrt-2012 20-jun-2012 12-jan-2012 12-jan-2012 26-jan-2012 16-jan-2012 20-jan-2012 29-feb-2012

758

5

NNNNJJN

JN

DATDATDATBACBAC

DBDWIMIIDB

student cursus datum /cijfer° vrijstelling°p Inschrijving

docent cursuspBegeleider

cd

Verschil tussen:

delete from Cursuswhere code = ‘II‘en

delete from Cursuswhere code = ‘SW‘

denk aan:- referentiële integriteitsregel- cascading deletes

204bij: Relationele databases en SQL ©Mattic b.v.

Page 205: Powerpoint-presentatie bij H1-10

Het update-statement: poging tot wijzigen

Voorbeeld eenvoudige update:

update Cursus -- 1set uren = 140, credits = 5 -- 3where code = 'DW' -- 2

Let op de(conceptuele)volgorde!

205bij: Relationele databases en SQL ©Mattic b.v.

update Cursusset uren = 140, credits = 5where code = 'DW'

toekenning (‘maak gelijk aan’)

gelijkheid (‘is gelijk aan’)

Page 206: Powerpoint-presentatie bij H1-10

Update van elke rij

Update van elke rij:

update Cursusset uren = uren * 1.1

nieuwewaardevan uren

oudewaardevan uren

206bij: Relationele databases en SQL ©Mattic b.v.

Page 207: Powerpoint-presentatie bij H1-10

Update met subselect

Maak elk urenaantal gelijk aan het gemiddelde aantal uren.

Poging:

update Cursusset uren = (select avg(uren) from Cursus)

Inspectie van tabel Cursus geeft:

CODE NAAM UREN====== ===================== =========II Inleiding informatica 118 DW Discrete wiskunde 125 DB Databases 126 IM Informatiemodelleren 127 SW Semantic web 123

(ongecorreleerdeupdate)

verklaring?

207bij: Relationele databases en SQL ©Mattic b.v.

Page 208: Powerpoint-presentatie bij H1-10

Update met gecorreleerde subselect

Extra kolom tabel Cursus:

Cursus

Inschrijvingp

pcode naam ... /aantal_inschrijvingen°

studentcursus ...

alter table Cursusadd aantal_inschrijvingen integer

Vullen: update Cursus Cset aantal_inschrijvingen = (-- aantal inschrijvingen voor ‘deze’ cursus select count(*) from Inschrijving where cursus = C.code)

208bij: Relationele databases en SQL ©Mattic b.v.