240 likes | 421 Views
Computervaardigheden. Hoofdstuk 5 — Databank (Gevorderden). 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. Survival guide.
E N D
Computervaardigheden Hoofdstuk 5 — Databank (Gevorderden)
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
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)
Uitzonderlijke observaties • Alle observaties per soort waarvoor • gewicht < minimum gewicht • gewicht > maximum gewicht • spanwijdte < minimum spanwijdte • spanwijdte > maximum spanwijdte
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)
VleermuisSoorten Naam MinimumSpanwijdte MaximumSpanwijdte MinimumGewicht MaximumGewicht "1-to-Many" Relaties 1 vleermuissoort ... Observaties Datum Soort Spanwijdte Gewicht 1 * kan vele malen geobserveerd worden
VleermuisSoorten Naam MinimumSpanwijdte MaximumSpanwijdte MinimumGewicht MaximumGewicht Inner Join (Query) VleermuisSoorten x Observaties Naam MinimumSpanwijdte MaximumSpanwijdte MinimumGewicht MaximumGewicht Datum Spanwijdte Gewicht Cartesisch Product waar VleermuisSoorten.Naam = Observaties.Soort Observaties Datum Soort Spanwijdte Gewicht
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) 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 soort min. max. min. max span. span. gew. gew. baardvleermuis 19 22,5 4 8 grootoorvleermuis 24 28,5 4,6 11,3
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"
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"
criterium voor gewicht: >[VleermuisSoorten].[MaximumGewicht] Or <[VleermuisSoorten].[MinimumGewicht] Bewaar als “UitzonderlijkGewicht” Inner Join (extra criteria)
VleermuisSoorten Naam MinimumSpanwijdte MaximumSpanwijdte MinimumGewicht MaximumGewicht Outer Join (Query) VleermuisSoorten x Observaties Naam MinimumSpanwijdte MaximumSpanwijdte MinimumGewicht MaximumGewicht Datum Spanwijdte Gewicht Cartesisch Product waar (VleermuisSoorten.Naam = Observaties.Soort) of (er bestaat geen observatie met VleermuisSoorten.Naam = Observaties.Soort) Observaties Datum Soort Spanwijdte Gewicht
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) 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 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
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" Outer Join (basis)
VleermuisSoort Naam MinimumSpanwijdte MaximumSpanwijdte MinimumGewicht MaximumGewicht ObservatieTrip Datum Observator Locatie "Many-to-Many" Relaties * * Observaties Spanwijdte Gewicht • 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
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" Join (3 tabellen)
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
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 ?
Recursieve Join (2/3) • Criteria • kolom "Haltes.lijn""= Haltes_1.halte" • Datasheet view • Hoeveel records ?
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
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.
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