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