Principes van databases Relationele databases: logisch databaseontwerp Hoofdstuk 5 1 Overzicht • Omzetting van een EER-diagram • Normalisatie • Denormalisatie 2 Overzicht • Omzetting van een EER-diagram • Normalisatie • Denormalisatie 3 Omzetting van een EER-diagram • Overzicht informatievergaring conceptueel ontwerp databasemodelonafhankelijk logisch ontwerp dbmsonafhankelijk fysieke ontwerp • domeinanalyse • functionele analyse • behoefteanalyse • conceptueel model (bijvoorbeeld EER-diagram) • functionele beschrijving • logisch databaseschema (bijvoorbeeld relationeel) • gedragspecificaties • DDL-scripts • implementatie van gedrag 4 Omzetting van een EER-diagram conceptueel relationeel databaseontwerp EER-diagram functionele beschrijvingen reverse engineering logisch relationeel databaseontwerp relationeel databaseschema gedragspecificaties Vb. Functionele beschrijving: Controleren bij invoer leeftijd 5 Omzetting van een EER-diagram • Het omzettingsalgoritme voor relationele databases 9 stappen: 1) Omzetting van reguliere entiteittypes 2) Omzetting van zwakke entiteittypes 3) Omzetting van specialisaties en generalisaties 4) Omzetting van categorieën 5) Omzetting van binaire 1:1 relatietypes 6) Omzetting van binaire 1:N relatietypes 7) Omzetting van binaire M:N relatietypes 8) Omzetting van meerwaardige attributen 9) Omzetting van n-aire relatietypes waarbij n>2 6 Omzetting van een EER-diagram • Het omzettingsalgoritme voor relationele databases Automatiseren m.b.v. CASE-tools • ER-Studio (Embarcado Technologies) • Designer (Oracle) • Enterprise Application Suite (Sybase) 7 Omzetting van een EER-diagram • Aanmaken van gedragspecificatie • CASE-tools bieden ondersteuning • Omzetten van functionele beschrijvingen: gebruik database faciliteiten! • Alternatieve sleutels Afdwingen van uniciteit • Integriteitsrestricties Afdwingen van beperkingen (vb. Sterftejaar >= Geboortejaar) • Stored procedures •Triggers 8 Afdwingen van ‘Businessregels’ = voorwaarden waar de data aan moet voldoen (vb. Heeft de docent alle cijfers ingevoerd?) Overzicht • Omzetting van een EER-diagram • Normalisatie • Denormalisatie 9 Normalisatie • Wat is normaliseren? – Normaalvormen zijn ingevoerd voor diagnose van dB’s = Kwaliteitsnorm – Kwaliteitsnorm van de basisrelatie Hoe hoger de normaalvorm, hoe minder problemen – Verhogen normaalvorm m.b.v. normalisatieproces Basisrelatie opsplitsen en omzetten – Database ontwerp d.m.v. normalisatieproces • Eenvoudige dB: alle attributen samennemen in één basisrelatie • Geen EER-diagram nodig 10 Normalisatie • Probleemstelling bij slecht opgebouwde relaties – Overtollige dataopslag – Update-afwijkingen – Dataverlies 11 Normalisatie Tabel Schilderij S_ID: Titel: char(3) varchar primaire sleutel = {S_ID} Periode: Naam: integer varchar Geboren: integer Gestorven: integer 1840 1926 1834 1917 S01 Vissershuis 1882 S02 De balletles 1872 Monet Degas S03 Mona Lisa 1499 Da Vinci 1452 1519 S05 Na het bad 1883 Degas 1832 1917 Relatie geeft informatie over zowel schilderij als schilder • Overtollige data bv. twee schilderijen van dezelfde schilder • Afwijkingen (anomaliën) bv. update van het geboortejaar • Dataverlies bv. enige schilderij weg, dan ook details schilder weg 12 Normalisatie • Het normalisatieproces Basisrelatie 1NF 2NF 3NF BCNF 4NF 5NF 6NF 13 Voorbeeld Opdracht: Facturatie Tabel Factuur Primary key: {Factuur nr.} | | | | |Factuur nr.|Klant nr.|Naam |Adres |Artikelen |Aantal |Kosten | +-----------+---------+--------+--------+------------------------+------------------+---------------+ | 1000| 10|Arie K |Bosweg 3|Schroef;Bout;Spijker |100/200/300 |5,00/2,00/3,00 | | 1001| 20|Donald D|Bosweg 5|Zaag;Boor |1/1 |30,00/40,00 | | 1002| 30|Joop S |Bosweg 7|Badkuip |20 |2000,00 | +-----------+---------+--------+--------+------------------------+------------------+---------------+ Waarom staat deze relatie niet in 1NF? Zet deze relatie in 1NF, vervolgens in 2NF en tot slot in 3NF. Leg uit wat je doet en waarom! 14 Voorbeeld 1NF Geen atomaire datatypes -> opslitsen Tabel Factuur Primary key: {Factuur nr.} Tabel Items Primary key {Factuur nr.; Item nr.} | | |Factuur nr.| +-----------+ | 1000| | 1001| | 1002| +-----------+ | | | | |Factuur nr.|Item nr.|Klant nr.|Naam |Adres |Artikelen |Aantal |Kosten | +-----------+--------+---------+--------+--------+----------+-------+--------+ | 1000| 1| 10|Arie K |Bosweg 3|Schroef |100 |5,00 | | 1000| 2| 10|Arie K |Bosweg 3|Bout |200 |2,00 | | 1000| 3| 10|Arie K |Bosweg 3|Spijker |300 |3,00 | | 1001| 1| 20|Donald D|Bosweg 5|Zaag |1 |30,00 | | 1001| 2| 20|Donald D|Bosweg 5|Boor |1 |40,00 | | 1002| 1| 30|Joop S |Bosweg 7|Badkuip |20 |2000,00 | +-----------+--------+---------+--------+--------+----------+-------+--------+ 15 Foreign key {Factuur nr.} Voorbeeld 2NF Ieder attribuut moet afhankelijk zijn van de gehele kandidaatsleutel (klantgegevens zijn niet afhankelijk van een item (=primary key) maar van Factuur nr., gevolg: er ontstaat redundante data) oplossing: plaats klantinformatie bij factuur nr. Tabel Factuur Primary key: {Factuur nr.} Tabel Items Primary key {Factuur nr.; Item nr.} | | | |Factuur nr.|Klant nr.|Naam |Adres | +-----------+---------+--------+--------+ | 1000| 10|Arie K |Bosweg 3| | 1001| 20|Donald D|Bosweg 5| | 1002| 30|Joop S |Bosweg 7| +-----------+---------+--------+--------+ | | | | |Factuur nr.|Item nr.|Artikelen |Aantal |Kosten | +-----------+--------+----------+-------+--------+ | 1000| 1|Schroef |100 |5,00 | | 1000| 2|Bout |200 |2,00 | | 1000| 3|Spijker |300 |3,00 | | 1001| 1|Zaag |1 |30,00 | | 1001| 2|Boor |1 |40,00 | | 1002| 1|Badkuip |20 |2000,00 | +-----------+--------+----------+-------+--------+ 16 Foreign key {Factuur nr.} Voorbeeld 3NF Ieder attribuut is alléén direct afhankelijk van een kandidaatsleutel (klant naam en adres zijn afhankelijk van factuur (kandidaatsleutel) nr. èn klant nr. (géén kandidaatsleutel)) oplossing: opsplitsen Tabel Factuur Primary key: Foreign key {Factuur nr.} {Klant nr.} | | | |Factuur nr.|Klant nr.| +-----------+---------+ | 1000| 10| | 1001| 20| | 1002| 30| +-----------+---------+ Tabel Klant Primary key: {Klant nr.} | | |Klant nr.|Naam |Adres | +---------+--------+--------+ | 10|Arie K |Bosweg 3| | 20|Donald D|Bosweg 5| | 30|Joop S |Bosweg 7| +---------+--------+--------+ 17 Tabel Items Primary key Foreign key {Factuur nr.; Item nr.} {Factuur nr.} | | | | |Factuur nr.|Item nr.|Artikelen |Aantal |Kosten | +-----------+--------+----------+-------+--------+ | 1000| 1|Schroef |100 |5,00 | | 1000| 2|Bout |200 |2,00 | | 1000| 3|Spijker |300 |3,00 | | 1001| 1|Zaag |1 |30,00 | | 1001| 2|Boor |1 |40,00 | | 1002| 1|Badkuip |20 |2000,00 | +-----------+--------+----------+-------+--------+ Overzicht • Omzetting van een EER-diagram • Normalisatie • Denormalisatie 18 Denormalisatie • Denormaliseren – Bewust afstappen van een hogere normaalvorm • Voordelen – Minder relaties, dus minder operaties nodig (systeemperformance gaat omhoog) • Nadelen – Kans op redundante data – Hogere ontwikkelingskosten, omdat meer integriteitsrestricties, stored procedures en triggers nodig zijn – Slecht uit te breiden 19