Samenvatting Hoofdstuk 7 Database 7.1 Relationele Database Gegevensgeoriënteerde machines Grote hoeveelheden gegevens beheren Bewerkingen (=toevoegen/veranderen/verwijderen/raadplegen) o Programma= database management system (dbms) Maakt gebruikt van vraagtaal Structured Query Language (SQL) = taal → communicatie in een database o SQL is meest gebruikte vraagtaal o Bijv. MS Access gebruikt SQL maar kan ook andere functie uitvoeren hierom is SQL in MS Access deels aangepast. o Programma + gegevens= database system o Ordenen Vroeger: Hiërarchisch model (vb met personen) Één-op-één relatie= één persoon die hoger in hiërarchie staat één persoon onder zich heeft Één-op-veel relatie= één persoon die hoger in hiërarchie staat meerdere personen onder zich heeft Veel-op-veel relatie= veel personen die hoger in hiërarchie staan die meerdere personen onder zich hebben Voordeel: goed voor simpele databases Nadeel: voor complexere databases wordt het een chaos 1970: Relationeel model Geïntroduceerd → wiskundige E.F. Codd (in dienst bij IBM) o In artikel: ‘A Relational Model of Data for Shared Data’ Relatie tussen verschillende kolommen → hierom naam: “relationeel” Heading= 1e rij v/d tabel. Staan de veldnamen Record= 1 rij Sleutel= rij die door unieke kolomna(a)m(en) kan worden opgezocht Voordeel: Model is gebaseerd op een wiskundige theorie waardoor het heel logisch is. Nadeel: o Redundantie= het meerdere malen opnemen van dezelfde informatie. o inconsistentie= wanneer de gegevens niet meer kloppen in een database. 7.2 Informatiemodellering Ofwel → stappenplan van invoeren informatiesystemen Automatisering begon ’70 grote organisaties en ’80 voor kleinere organisaties (personal computer) Doelgerichte totstandkoming → informatiesysteem (o.l.v. projectteam) 1. 2. 3. 4. Formuleren informatiebehoeften + beschrijving bruikbaarheid → informatie Schetsen v/d functie om zo in informatiebehoeften te kunnen voorzien In praktijk brengen (computer materiaal aangeschaft/geschreven) Evaluatie 7.3 SQL (Structured Query Language) Strokendiagram= tabellen verschijnen als stroken met een veldnaam Een kolom kan verbanden met andere tabellen leggen. Zie onderstaand vb. (wanneer een teamcode, score of boete moet worden geraadpleegd wordt gebruikt gemaakt van het lidnr. in tabel “LEDEN”) 1 SQL zoekopdrachten Opbouw: SELECT FROM ORDER BY WHERE - - Hier selecteer je; wat je wil laten zien (bijv. naam/MIN(geboortedatum)/MAX(gewonnen)/SUM(gewonnen) /etc. Wanneer je alle VELDNAMEN wil laten zien uit één tabel gebruik dan: * Hier geef je weer; waar je deze informatie vandaan wilt halen o Voorbeeld: SELECT DISTINCT naam FROM leden ORDER BY naam DESC; DISTINCT zorgt ervoor dat dubbele rijen worden vermeden 1 Hier geef je aan op welke veldnaam je wil ordenen (standaard doet SQL dit van 1 t/m Z. (ASC= oplopend, DESC= aflopend) Hiermee geef je aan wat je in de kolom wil hebben Sluit AAN HET EIND altijd af met ; Bron: Enigma informatieboek Databases Hoofdstuk 7.3.1. 7.4 Samengestelde voorwaarden Wanneer je bij WHERE meerdere voorwaarden wil ingeven o AND (operator) Dan worden alleen de rijen waarvoor beide zoekresultaten gelden getoond o OR (operator) Dan worden de rijen waarvoor één v/d zoekresultaten telt getoond LET OP! Wanneer je AND en OR in een Query hebt staan geld AND als een wiskundige x en OR als een +. Je voert dus eerst AND uit en daarna pas OR. o IN (operator) Zelfde als OR alleen dan eenvoudiger Wanneer je bij WHERE voorwaarden wilt specificeren o LIKE (operator) Bijv.: SELECT naam FROM leden WHERE naam LIKE ‘J*’; Alle achternamen die met een J beginnen worden nu getoond o NOT (operator) Als je bepaalde veldnamen wilt uitsluiten SELECT woonplaats FROM leden WHERE NOT woonplaats = ‘Den Bosch’; Of SELECT woonplaats FROM leden WHERE woonplaats <> ‘Den Bosch’; o IS NULL (operator) Als je velden wilt tonen waarin niks staat SELECT naam FROM leden WHERE naam IS NULL 7.5 Combineren van tabellen Koppelen van tabellen= join in het Engels Dit gebeurt in de WHERE stap. Hier stel je de veldnaam die in beide tabellen overeenkomt gelijk bijv. het lidnr.: WHERE leden.lidnr = scores.lidnr 7.6 Functies AVG Berekent gemiddelde COUNT Telt aantal waarden/rijen in een kolom/tabel MAX Bepaald grootste waarde MIN Bepaald kleinste waarde SUM Bepaald som van getallen AS (component) De veldnaam wordt standaard na een optelling (bijv.) Expr1000, deze kun je veranderen door AS en daarachter de nieuwe veldnaam toe te voegen Vb.: SELECT SUM(gewonnen) AS totaal_gewonnen GROUP BY betekend dat je de verschillende waarde groepeert wanneer je bijvoorbeeld een hoeveelheid wilt weten van het aantal vrouwen en mannen in een stad. Dan groepeer je dus de categorie mannen en vrouwen. Dan krijg je dus 2 rijen Den Bosch met 1 rij mannen en het aantal en 1 rij vrouwen en het aantal. LET OP! GROUP BY dient uitsluitend kolomnamen uit SELECT te bevatten HAVING of WHERE HAVING gebruik je bij groepen en WHERE bij rijen die op zichzelf staan. Een ander verschil is dat je in HAVING wel een functie mag gebruiken en in WHERE niet 7.8 Subquery Subquery = subselect Vb. SELECT voornaam, naam FROM leden WHERE lidnr IN (SELECT lidnr FROM scores 1: Zo ziet het eruit in Access WHERE gewonnen = (SELECT MAX(gewonnen) FROM scores)); Expressie= uitdrukking. In dit geval een uitdrukking als veldnaam of functie. De Select in een subquery mag maar 1 “expressie” bevatten 7.9 Gegevens toevoegen INSERT INTO leden VALUE - Hier geef je de waarde op volgorde van kolommen. Bijv. (1, ‘Willem’, ‘Hoek’, etc.) VALUE gegevens worden tussen haakjes geschreven !Alle numerieke gegevens worden zonder aanhalingstekens genoteerd! Gegevens verwijderen DELETE FROM leden WHERE lidnr = 1; o LET OP! Wanneer je de regel met WHERE vergeet worden alle rijen gewist o DROP TABLE leden; wordt de gehele tabel leden gewist Gegevens wijzigen UPDATE leden SET adres = ‘hoevenlaan 3’ WHERE lidnr= 1; Unieke index → Door een unieke index te maken voorkom je dubbele waarden en wordt de tabel dus efficiënter gebruikt CREATE UNIQUE INDEX lidnr ON leden (lidnr);