Normaliseren versie 1.1 Datamodellering 27 1 Wat is normaliseren? Data organiseren in tabelvorm, zó dat: er minimale redundantie is update operaties (toevoegen, wijzigen, verwijderen) eenvoudig zijn uit te voeren records in een tabel te identificeren zijn m.b.v. een unieke sleutel (primary key) 2 Redundantie: voorbeeld Suppliers and Parts: wat als een leverancier verhuist? S# City P# Qty S1 London P1 S1 London P2 2 S1 London P3 4 S2 Paris P1 S2 Paris P2 4 S3 Paris P2 S4 London P2 2 S4 London P4 3 DMO 27 1
Normaliseren als techniek Normaliseren: bottom up datamodelleringstechniek vgl. ER methode: top down Omvat een aantal stappen (= normaalvormen): 1NF 2NF 3NF BCNF 4NF 5NF 6NF meestal voldoende: relatie is genormaliseerd 1NF 2NF 3NF BCNF 4NF 5NF 6NF 2NF veronderstelt, dat de dataset al in 1NF is, etc. 4 Normaliseren & DBMS model Normaliseren in de praktijk gekoppeld aan het relationele database model: tabellen Normaliseren vereist enige basiskennis van het relationele model 5 Enkele principes RDBMS Relationele database: verzameling tabellen Relationele tabel rechthoekig (dus spreadsheet tabel!) rijen (records = tuples) en kolommen (velden, attributen) cardinaliteit: aantal rijen graad (degree): aantal kolommen geen vaste ordening rijen en kolommen cel: atomaire waarde Relationele operaties tabel Tabellen gekoppeld via sleutels primary key (pk) foreign key (fk) 6 DMO 27 2
Functionele afhankelijkheid (vb) S# City P# Qty S1 London P1 S1 London P2 2 S1 London P3 4 S2 Paris P1 S2 Paris P2 4 S3 Paris P2 S4 London P2 2 S4 London P4 S# P# City Qty S# is de determinant van City City is functioneel afhankelijk van S# 7 Functionele afhankelijkheid (def) Given a relation R: attribute Y of R is functionally dependent on attribute X if and only if each X value in R has associated with it precisely one Y value in R (at any one time). in symbols, R.X R.Y (read: R.X functionally determines R.Y ) Attributes X and Y may be composite. 8 Sleutels Candidate key: unique niet reduceerbare combinatie van attributen (indien composite) fungeert als determinant voor andere attributen in de tuple Primary key (PK): een candidate key gekozen als identifier Foreign key (FK): kruisverwijzing naar primary key 9 DMO 27 3
Vooronderstellingen Jouw interpretatie van de requirements en entiteiten expliciteren van de semantiek, b.v. elke werknemer heeft niet meer dan één auto van de zaak Bij de opdrachten in deze cursus: vooronderstellingen beschouwd als jouw toelichting bij de oplossing (geen standaardlijst) Bedrijf & werknemers Variant(!) op opdracht 2.1 Team Werknemer Project attributen in dit voorbeeld (t = team, p = project; telkosten: aantal eenheden gebeld op een bepaald toestel):, pers#, tbudget, tel#, telkosten, proj#, pbudget Voorbeelden vooronderstellingen: werknemer kan in meer dan 1 team zitten werknemer werkt aan 1 project tegelijk project hoort bij 1 team, 1 team heeft meerdere projecten 11 Bedrijf & werknemers 1NF tbudget 5 5 5 pers# 113 114 115 116 tel# 4589 1267 2385 1467 telkosten 34 12 57 25 proj# 2 NULL pbudget 2 2 NULL 4 4 de alles relatie 1NF: All values are atomic (no repeating groups) BEDRIJF (, tbudget, pers#, tel#, telkosten, proj#, pbudget) 12 DMO 27 4
Bedrijf & werknemers 2NF BEDRIJF (, tbudget, pers#, tel#, telkosten, proj#, pbudget) BEDRIJF heeft een composite PK testen op 2NF: 2NF: Every non key column dependent on the entire PK Dit is niet het geval, dus 1NF 2NF: TEAM (, tbudget) WERKNEMER (pers#, tel#, telkosten, proj#) 13 Bedrijf & werknemers 3NF 3NF: no transitive dependency on PK Er is nu wel transitieve afhankelijkheid er zijn nog andere, directere determinanten, namelijk: proj# pbudget tel# telkosten Dus hiervoor aparte tabellen: 2NF 3NF: TEAM (, tbudget) WERKNEMER (pers#, tel#, proj#) tel# en proj# zijn FK PROJECT (proj#, pbudget, ) is FK TELEFOON (tel#, telkosten) Wat overblijft is de tussentabel voor de veel op veel relatie TEAM WERKNEMER: TAAK (, pers#) en pers# zijn FK 14 Bedrijf & werknemers eind TEAM tbudget 5 pers# 113 114 tel# 4589 1267 proj# 2 tel# 4589 1267 telkosten TELEFOON 34 12 WERKNEMER 115 116 2385 1467 2385 57 1467 25 PROJECT 3 proj# 2 pbudget 2 4 pers# 113 114 TAAK 115 116 15 DMO 27 5
Hogere normaalvormen Wees bedacht op de situaties beschreven door BCNF, 4NF, 5NF Hint opdracht 2.4: maak ook een tabel met waarden zoals hierboven ga niet verder dan 3NF 16 Meer Rules of Data Normalization [DataModel.org] http://www.datamodel.org/normalizationrules.html Database elearning, ch. 4: http://db.grussell.org/ch4.html Normalization [University of Texas]: http://www.utexas.edu/its/windows/database/datam odeling/rm/rm7.html 17 DMO 27 6