Computervaardigheden en Programmatie 1rste BAC Toegepaste Biologische Wetenschappen
Computervaardigheden
description
Transcript of Computervaardigheden
ComputervaardighedenHoofdstuk 5 — Databank (Gevorderden)
2
Inhoud
• Terminologie- redundantie normalisatie
• Relaties- "1-to-Many" (1-N)
• Join- Inner Join; Outer (Left/Right) Join
• Relaties (vervolg)- "Many-to-Many" (N-M)
• Join (vervolg)- Recursive Join
• Oefeningen
3
Survival guide
• Essentieel:- "one-to-many" relatie definiëren- Join-query over een "one-to-many" relatie
• Belangrijk:- Outer join-query (links of rechts)
• Nuttig:- Recursieve join (een tabel met zichzelf joinen)
4
Uitzonderlijke observaties
• Alle observaties per soort waarvoor- gewicht < minimum gewicht- gewicht > maximum gewicht- spanwijdte < minimum spanwijdte- spanwijdte > maximum spanwijdte
5
datum soort span- gew- min. max. min. max
wijdte icht span. span. gew. gew.
11/11/1992 baardvleermuis 19 4 19 22,5 4 8
11/11/1992 grootoorvleermuis 24 5 24 28,5 4,6 11,3
11/11/1992 grootoorvleermuis 28 12 24 28,5 4,6 11,3
02/11/1993 baardvleermuis 19,5 5 19 22.5 4 8
02/11/1993 grootoorvleermuis 25 7 24 28,5 4,6 11,3
Naïeve tabelindeling
redundante informatie• Redundante Informatie- verkwisting van plaats- gevaar op inconsistenties
• verander 1 record alle gelijkaardige records• symptoom van slecht databankontwerp !
- Oplossing ? Normalisatie (opsplitsen in meerdere tabellen)
6
"1-to-Many" Relaties
VleermuisSoortenNaamMinimumSpanwijdteMaximumSpanwijdteMinimumGewichtMaximumGewicht
ObservatiesDatumSoortSpanwijdteGewicht
*
1
1 vleermuissoort ...
kan vele malen geobserveerd worden
7
Inner Join (Query)
VleermuisSoortenNaamMinimumSpanwijdteMaximumSpanwijdteMinimumGewichtMaximumGewicht
Observaties
DatumSoortSpanwijdteGewicht
VleermuisSoortenx Observaties
NaamMinimumSpanwijdteMaximumSpanwijdteMinimumGewichtMaximumGewichtDatumSpanwijdteGewicht
Cartesisch Productwaar
VleermuisSoorten.Naam= Observaties.Soort
8
datum soort span- gew-
wijdte icht
11/11/1992 baardvleermuis 19 4
11/11/1992 grootoorvleermuis 24 5
11/11/1992 grootoorvleermuis 28 12
02/11/1993 baardvleermuis 19,5 5
02/11/1993 grootoorvleermuis 25 7
datum soort span- gew- min. max. min. max
wijdte icht span. span. gew. gew.
11/11/1992 baardvleermuis 19 4 19 22,5 4 8
11/11/1992 grootoorvleermuis 24 5 24 28,5 4,6 11,3
11/11/1992 grootoorvleermuis 28 12 24 28,5 4,6 11,3
02/11/1993 baardvleermuis 19,5 5 19 22.5 4 8
02/11/1993 grootoorvleermuis 25 7 24 28,5 4,6 11,3
Inner Join (Resultaat)soort min. max. min. max
span. span. gew. gew.
baardvleermuis 19 22,5 4 8
grootoorvleermuis 24 28,5 4,6 11,3
9
Voorbereidingen• Importeer
- "Observaties1.txt"• tabel "Observaties"
- "VleermuisSoorten.txt"• 1-N relatie
- Menu: Tools/Relationships- Selecteer tabellen
"Observaties" & "VleermuisSoorten"
- Sleep "Observaties.soort" op "VleermuisSoorten.Naam"
- Bevestig via "Create"- Resultaat in "Relationships"- Sluit "Relationships"
10
Inner Join (basis)
• Nieuwe query (design view)• Show Table: "Observaties" &
"VleermuisSoorten"- Automatisch relatie
• sleep uit Observaties- datum, soort, gewicht
• uit VleermuisSoorten- MinimumGewicht &
MaximumGewicht• Bekijk in datasheet view• Bekijk in SQL-view
- "inner join"
11
Inner Join (extra criteria)• criterium voor gewicht:
>[VleermuisSoorten].[MaximumGewicht]
Or <[VleermuisSoorten].[MinimumGewicht]
• Bewaar als “UitzonderlijkGewicht”
12
Outer Join (Query)
VleermuisSoortenNaamMinimumSpanwijdteMaximumSpanwijdteMinimumGewichtMaximumGewicht
Observaties
DatumSoortSpanwijdteGewicht
VleermuisSoortenx Observaties
NaamMinimumSpanwijdteMaximumSpanwijdteMinimumGewichtMaximumGewichtDatumSpanwijdteGewicht
Cartesisch Productwaar
(VleermuisSoorten.Naam= Observaties.Soort)
of(er bestaat geen observatie
metVleermuisSoorten.Naam
= Observaties.Soort)
13
datum soort span- gew-
wijdte icht
11/11/1992 baardvleermuis 19 4
11/11/1992 grootoorvleermuis 24 5
11/11/1992 grootoorvleermuis 28 12
02/11/1993 baardvleermuis 19,5 5
02/11/1993 grootoorvleermuis 25 7
datum soort span- gew- min. max. min. max
wijdte icht span. span. gew. gew.
11/11/1992 baardvleermuis 19 4 19 22,5 4 8
11/11/1992 grootoorvleermuis 24 5 24 28,5 4,6 11,3
11/11/1992 grootoorvleermuis 28 12 24 28,5 4,6 11,3
02/11/1993 baardvleermuis 19,5 5 19 22.5 4 8
02/11/1993 grootoorvleermuis 25 7 24 28,5 4,6 11,3
bosvleermuis 26 32 13 20
dwergvleermuis 18 24 3,5 8
Outer Join (Resultaat)soort min. max. min. max
span. span. gew. gew.
baardvleermuis 19 22,5 4 8
grootoorvleermuis 24 28,5 4,6 11,3
bosvleermuis 26 32 13 20
dwergvleermuis 18 24 3,5 8
niet geobserveerde soorten
14
Outer Join (basis)• Nieuwe query (design view)• Show Table: "Observaties" &
"VleermuisSoorten"• Dubbelklik relatie
- Include all ... VleermuisSoorten ... only from ...: Observaties
- OK
• relatie krijgt een pijltje !!• sleep uit VleermuisSoorten,
Observaties *• Bekijk in datasheet view• Bekijk in SQL-view
- "left join" of "right join"
15
"Many-to-Many" Relaties
VleermuisSoortNaamMinimumSpanwijdteMaximumSpanwijdteMinimumGewichtMaximumGewicht
ObservatieTrip
Datum Observator Locatie
Observaties
SpanwijdteGewicht
**
• Tijdens een observatietrip observeren we nul of meerdere vleermuissoorten
• Een vleermuissoort kan tijdens nul of meerdere observatietrips geobserveerd worden
• Bij elke observatie noteren we de spanwijdte en het gewicht
16
Join (3 tabellen)
• Importeer- ObservatieTrips.txt- in tabel ObservatieTrips
• Relaties- Menu: Tools/RelationShips- Rechtermuisklik: Show
Table...- Voeg tabel Observatietrips
toe- Sleep "datum" van
"Observaties" naar "ObservatieTrips"
• Maak nieuwe query- ObservatieTripRapport- Voeg tabellen
"Observaties", "Observatietrips", "VleermuisSoorten" toe
• Voor elke tabel- sleep "*" op design grid
• Criteria- Alleen de observatietrips
met observator "Serge Demeyer"
17
Oefeningen (vleermuizen)
• maak queries voor- Alle observaties waarvan de spanwijdte groter of
kleiner is dan de minima/maxima voor de soort- alle soorten die niet werden geobserveerd- tel alle soorten die niet werden geobserveerd- alle observaties in de ijskelder- alle observaties in de ijskelder gemaakt na 2000
18
Antwerpse Metro (overzicht)
19
Recursieve Join (1/3)
• Importeer- Haltes.txt & Lijnen.txt- Bekijk inhoud tabellen
• Maak nieuw query- design view- naam: 1overstap- voeg tabel "Haltes" 2 x toe
Haltes & Haltes_1
- relatie: "Haltes.volgende" "Haltes_1.halte"
- Sleep "Lijn" en "Halte" uit "Halte" en "Halte_1" op grid
• Resultaat in Datasheet view ?
20
Recursieve Join (2/3)
• Criteria- kolom "Haltes.lijn"
"= Haltes_1.halte"• Datasheet view
- Hoeveel records ?
21
Recursieve Join (3/3)
• Maak een "left outer join"- Include ALL ... from
"Haltes" ... and only ... "Haltes_1" ...
• Datasheet view- Hoeveel records ?
• Criterium- 2de lijn (Or:)
Haltes_1.Lijn Is Null
• Datasheet view- Hoeveel records ?- Verklaar het verschil
22
Oefeningen (antwerpse metro)
• maak queries voor- Welke stations liggen op precies drie stappen van
station "Meir" ? Geef de tussenhaltes.- Welke stations liggen op precies drie stappen van
station "Meir", zonder van lijn te veranderen ? Geef de tussenhaltes.
23
Conclusie
• Terminologie- redundantie normalisatie
• Relaties- "1-to-Many" (1-N)
• Join- Inner Join; Outer (Left/Right) Join
• Relaties (vervolg)- "Many-to-Many" (N-M)
• Join (vervolg)- Recursive Join
• Oefeningen