SQL en Datanormalisatie Les 2 April 13, 2019
Agenda Herhaling Afwerken oefeningen Data normalisatie Oefeningen op data normalisatie April 13, 2019
SELECT statement (1) April 13, 2019
SELECT statement (2) SELECT: lijst van kolommen (minstens 1) of * DISTINCT: enkel unieke rijen worden weergegeven ALIAS: geef de kolom een andere naam FROM TABEL: geef de tabel(len) die de kolom(men) bevatten WHERE: beperkt het aantal rijen tot een aantal dat aan de voorwaarde voldoet CONDITIE: voorwaarde ORDER BY: bepaald de sorteervolgorde ASC: van klein naar groot DESC: van groot naar klein April 13, 2019
Opmerking Spaties en linefeeds worden genegeerd Commentaar -- Dit is commentaar /* Dit is commentaar En hier staat ook nog commentaar */ April 13, 2019
Vergelijkingsoperatoren Logische vergelijkingsoperatoren: =; >; <; >=; <= SQL operatoren Between…and … In LIKE IS NULL Logische operatoren AND OR NOT April 13, 2019
Oefeningen April 13, 2019
Data Normalisatie April 13, 2019
Voorbeeld informatiesysteem Dessertenboek Interactief receptenboek Recepten veranderen, toevoegen, verwijderen Aantal gegevens zelf in te geven Aantal berekende waarden Energie waarde Opgeslagen ingrediëntenhoeveelheden per persoon en de opgeslagen energiewaarden per eenheid April 13, 2019
Voorbeeld informatiesysteem April 13, 2019
Hoe deze gegevens opslaan in een tabel? April 13, 2019
Per gerecht één tabel April 13, 2019
Per gerecht één tabel Per recept 5 kenmerken: Naam van het gerecht Energie per persoon (in kcal) Bereidingstijd Bereidingswijze Ingrediënteninformatie subtabel Enkelvoudige gegevens Samengestelde gegevens April 13, 2019
Eén tabel met subtabellen April 13, 2019
Geen geschikte tabelstructuur Bepaalde informatie wordt meer dan één keer opgeslaan (redundantie) Een tabel met subtabellen is zeer complex om te beheren (herhalende groepen) Gegevens over producten worden alléén in de context van gerechten bewaard, terwijl producten een zelfstandig belang hebben April 13, 2019
Redundantie Overtollige gegevens Bepaalde gegevens zijn afleidbaar uit andere gegevens in de database April 13, 2019
Nadelen van redundantie Opslagruimte Inconsistentie van gegevens April 13, 2019
Herhalende groepen Een samengestelde kolom, die per rij een subtabel met ingrediëntengegevens bevat wordt een herhalende groep genoemd. Nadeel: Beheer van de database wordt veel ingewikkelder Gebrek aan symmetrie April 13, 2019
Herhalende groepen (2) Beheer van database Invoegen van records op twee niveaus: Verwijderen wordt ook ingewikkelder SQL zou veel ingewikkelder worden April 13, 2019
Herhalende groepen (3) Gebrek aan symmetrie Producten die in gerechten als ingrediënt worden opgeslaan kunnen alleen in die context gebruikt worden Een neutrale contextvrije benadering van de verschillende soorten dingen is één van de belangrijkste eigenschappen van een RDBMS April 13, 2019
Herhalende groepen (4) Redenering tot nu toe: Een gerecht kan meerdere ingrediënten bevatten Omkeren van herhalende groepen Redenering wordt: Een ingrediënt kan in meerdere gerechten voorkomen April 13, 2019
Herhalende groepen (5) April 13, 2019
Herhalende groepen (6) Omkeren van herhalende groepen Product zonder gerecht kan opgenomen worden April 13, 2019
Verbeterde tabelstructuren Elimineren van herhalende groepen en redundantie April 13, 2019
Elimeneren van de herhalende groep Herhalende groep afknippen April 13, 2019
Elimeneren van de herhalende groep Resultaattabellen bevatten in elke cel één enkelvoudige waarde April 13, 2019
Elimineren van redundantie April 13, 2019
Elimineren van redundantie (2) April 13, 2019
Alternatief Eerst verwijderen van redundantie Vervolgens verwijderen van herhalende groepen Geeft hetzelfde resultaat April 13, 2019
Elke entiteit zijn eigen tabel Entiteit = dingen die vanuit het oogpunt van een informatie behoefte overeenkomstige kenmerken hebben Product Ingrediënt Gerecht Eenheid April 13, 2019
Elke entiteit zijn eigen tabel April 13, 2019
Normaliseren en standaardiseren Het verwijderen van herhalende groepen of redundantie, door tabellen van een grotere tabel af te splitsen. Standaardiseren: Bv eenheid liter April 13, 2019
Oefeningen April 13, 2019
Oefeningen Zie blad April 13, 2019
Oplossing oef 4 (a ii) April 13, 2019
Oplossing oef 4 (a iii) April 13, 2019
Oplossing oef 4 (b i) April 13, 2019
Oplossing oef 4 (b iii) April 13, 2019
Relationele databases - regels Regels die voor goede structuren gelden: Beperkingsregels Regels die dingen verbieden of verplichten Gedragsregels Regels die zorgen dat acties ondernomen worden April 13, 2019
Beperkingsregels Optionele en verplichte kolommen Verplicht Optioneel De kolom moet een waarde hebben Bv gerecht.gerechtnaam Optioneel De kolom mag lege cellen bevatten Bv product.eenheidnaam Bv peper -> geen eenheidnaam en energiePE Aanduiding met op April 13, 2019
Optionele en verplichte kolommen April 13, 2019
Uniciteit Indien de waarden in een bepaalde kolom uniek moeten zijn. Smalle uniciteitsregels: uniciteit over 1 kolom Brede uniciteitsregels: uniciteit over >1 kolom April 13, 2019
Uniciteit (2) April 13, 2019
Uniciteit (3) Enkel de smalste uniciteitsregel wordt aangeduid! April 13, 2019
Illustratieve populatie Een populatie die zo goed mogelijk de werkelijkheid illustreert April 13, 2019
Sleutels De primary key van een tabel is een kolom of kolomcombinatie waarvoor geldt: Verplicht Uniek In het geval van een kolomcombinatie Zo zuinig mogelijk gekozen Zijn waarden zijn aangewezen als logische rij-adressen te gebruiken in verwijzingen April 13, 2019
Sleutels (2) Foreign key Primary key aangeduid met een p Een kolom of kolomcombinatie waarvan de waarden naar rijen in een andere tabel verwijzen, via de primaire sleutel daarvan. Primary key aangeduid met een p Foreign key aangeduid met een verticale pijl naar de primary key April 13, 2019
Oefening Duid de primary keys en foreign keys aan van de tabellen van het dessertenboek. April 13, 2019
Sleutels (3) April 13, 2019
Referentiële integriteit Elke waarde van een foreign key moet voorkomen als de waarde van de bijhorende primaire sleutel Bv: elke waarde in product.eenheidnaam wordt geacht te verwijzen naar precies één rij in de tabel eenheid, via de primaire sleutel van die tabel Verbieden van loze verwijzingen April 13, 2019
Referentiële integriteit (2) Ouder – kind relatie: De tabel met de primary key heet ouder De tabel met de foreign key heet kind April 13, 2019
Referentiële integriteit (3) Bij één rij van de kindtabel hoort ofwel geen enkele rij ofwel precies één rij van de oudertabel Bij één rij van de oudertabel kunnen nul, één of meerdere rijen van kindtabel horen April 13, 2019
Referentiële integriteit (3) Het RDBMS moet zorg dragen voor het bewaren van de ref. Integriteit Bij een poging een rij in de kindtabel toe te voegen Bij een poging een foreign key waarde in de kindtabel te wijzigen Bij een poging een primaire sleutel in de oudertabel te wijzigen Bij een poging tot verwijderen van een ouderrij April 13, 2019
Cardinaliteitsregels Hoeveel rijen van de oudertabel kunnen bij één rij van de kindtabel horen? En andersom? April 13, 2019
Cardinaliteitsregels (2) Bv: Product – eenheid Bij één product-rij horen 0 of één eenheid-rijen Bij één eenheid-rij horen 0 of meer productrijen Ingrediënt – product Bij één ingrediënt-rij hoort precies 1 product-rij Bij één product-rij horen 0 of meer ingrediënt-rijen Ingrediënt – gerecht Bij één ingredient-rij hoort precies 1 gerecht-rij Bij één gerecht-rij horen één of meer ingrediënt-rijen April 13, 2019
Cardinaliteitsregels (3) Cardinaliteiten aflezen ‘aan de andere kant’ van het lijntje April 13, 2019
Oefeningen 1 2 3 4 April 13, 2019
Kunstmatige sleutels De twee foreign keys van gerechtnaam en productnaam in Ingrediënt bevatten vrij lange tekstvelden Numerieke codes als primary keys en foreign keys April 13, 2019
Kunstmatige sleutels (2) April 13, 2019
Gedragsregels RDBMS onderneemt actie in antwoord op een aantal acties Gedragsregels of actieregels April 13, 2019
Reference actieregels Bewaren van de referentiële integriteitsregel In 2 gevallen problemen Verwijderen van een ouderrij Wijzigen van de primary key in een ouderrij Deleteregels Updateregels April 13, 2019
Deleteregels Restricted delete Cascading delete Nullifying delete Nullifying komt in de praktijk weinig voor April 13, 2019
Updateregels Restricted update Cascading update Nullifying update April 13, 2019
Reference actieregels (2) April 13, 2019
Oefening 5 (zie slide 33) April 13, 2019
Meer over uniciteitsregels Uniciteitsregels zijn het meest prominent Hoe bepalen we de juistheid van een voorgestelde uniciteitsregel? Bv: Avondschool Inschrijving (cursistnr, vaknaam, docentnaam) April 13, 2019
Meer over uniciteitsregels (2) 7 mogelijkheden voor een tabel met 3 kolommen April 13, 2019
Meer over uniciteitsregels (3) April 13, 2019
Meer over uniciteitsregels (4) Regels zijn niet onafhankelijk van elkaar Regels hangen af van de business rules van het bedrijf April 13, 2019
Combinaties van uniciteitsregels Uniciteitsregels kunnen gecombineerd worden April 13, 2019
Uniciteitsregels 99 % van de gevallen over 1, 2 of 3 kolommen April 13, 2019
Samengestelde sleutels Een primary key kan samengesteld zijn: Bestaande uit meer dan één kolom April 13, 2019
Recursieve verwijzingen = Verwijzing van een tabel naar zichzelf Bv: Hemellichamen in ons zonnestelsel, die satelliet kunnen zijn van een ander hemellichaam April 13, 2019
Recursieve verwijzingen (2) Structuurdiagram? Cardinaliteitendiagram? April 13, 2019
Recursieve verwijzingen (2) Voorstelling ook mogelijk met een virtuele tabel: April 13, 2019
Oefeningen 8 April 13, 2019
Oplossing 8 April 13, 2019
Oplossing 8 April 13, 2019
Oefening 9 April 13, 2019
Oefening 10 April 13, 2019
Oefening 11 April 13, 2019
Oefening 12 April 13, 2019
Oefening 13 April 13, 2019