Normaliseren Datamodellering 2006 1 Wat is normaliseren? - 1 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 2 Redundantie: voorbeeld Suppliers-and-Parts: wat als een leverancier verhuist? S# City P# Qty S1 S1 S1 S2 S2 S3 S4 S4 London London London Paris Paris Paris London London P1 P2 P3 P1 P2 P2 P2 P4 300 200 400 100 400 100 200 300 3 Wat is normaliseren? - 2 Normaliseren: bottom-up datamodelleringstechniek vgl. ER-methode: top-down Omvat een aantal stappen (= normaalvormen): 1NF 2NF 3NF BCNF 4NF 5NF 6NF 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 Functionele afhankelijkheid - 1 S# City P# Qty S1 S1 S1 S2 S2 S3 S4 S4 London London London Paris Paris Paris London London P1 P2 P3 P1 P2 P2 P2 P4 300 200 400 100 400 100 200 300 S# City P# Qty • S# is de determinant van City • City is functioneel afhankelijk van S# 7 Functionele afhankelijkheid - 2 Given a relation R: attribute Y of R is functionally dependent on attribute X in symbols, R.X R.Y (read: “R.X functionally determines R.Y”) if and only if each X-value in R has associated with it precisely one Y-value in R (at any one time). 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: een candidate key gekozen als identifier Foreign key: kruisverwijzing naar primary key 9 Normaliseren: document Dierenartspraktijk K. van Lieshout Tijgerstraat 5 6814 BA Arnhem Nota De heer P. Blom Zonnebloemstraat 34 6862 AX Oosterbeek Clientnr: 503 Notanr: 2006-340 Datum: 3-9-2006 Dier H24 - Max Verrichting Injectie rabies Ontwormingskuur Bedrag 30,50 27,00 H25 - Hector Bloedonderzoek Röntgenfoto 52,50 32,00 ––––––– 142,00 Totaal: 10 Normaliseren: NFNF NFNF (of: NF²) = Not in First Normal Form NOTA (Naam, Adres, Plaats, Postcode, ClientNr, NotaNr, NotaDatum, {DierId, DierNaam, Verrichting, Bedrag}) 11 Normaliseren: 1NF Geen repeating groups: NOTA (Naam, Adres, Plaats, Postcode, ClientNr, NotaNr, NotaDatum) NOTA_DIER (NotaNr*, DierID, DierNaam, Verrichting, Bedrag) 12 Normaliseren: 2NF Elk niet-sleutel attribuut is volledig afhankelijk van de hele primary key: NOTA (Naam, Adres, Plaats, Postcode, ClientNr, NotaNr, NotaDatum) NOTA_DIER (NotaNr*, DierID*, Verrichting, Bedrag) DIER (DierID, DierNaam) 13 Normaliseren: 3NF Er is geen transitieve afhankelijkheid: als A B en B C, dan A C (transitief) NOTA (ClientNr*, NotaNr, NotaDatum) CLIENT (ClientNr, Naam, Adres, Plaats, Postcode) NOTA_DIER (NotaNr*, DierID*, Verrichting, Bedrag) DIER (DierID, DierNaam) 14 Maar... zó niet goed Verrichting repeteert! - NFNF had moeten zijn: NOTA (Naam, Adres, Plaats, Postcode, ClientNr, NotaNr, NotaDatum, {DierId, DierNaam, {VerID, Verrichting, Bedrag}}) Vraag: zijn bedragen voor elke verrichting standaard? Of uurtarief? Bovendien is het in dit ontwerp bewerkelijk om alle dieren van een client te achterhalen 15 Boyce/Codd Normal Form Verschuift aandacht van primaire sleutels naar kandidaat-sleutels: BCNF: elke determinant is een kandidaat-sleutel In de praktijk zijn de meeste relaties in 3NF ook in BCNF 16 Meer… Rules of Data Normalization [DataModel.org] Database eLearning, ch. 4: http://www.datamodel.org/NormalizationRules.html http://db.grussell.org/ch4.html Normalization [University of Texas]: http://www.utexas.edu/its/windows/database/datam odeling/rm/rm7.html 17