Professional Documents
Culture Documents
Chapter 9 Continued
Chapter 9 Continued
Normalization
-A few definitions:
Normalization is a formal process o ensure that every attribute is attached to
the entty that ir truly describes
Technique for structuring your data in order to minimize data redendancy and
inconsistency
A technique used to make complex databases more efficient by removing all
undesirable redundancy
Normalization breaks ...
...
-> Voorbeeldrapport
1
Uitgever
Boek Auteursteam
Auteur
Streepjes aan auteur moeten bij auteursteam
Un-Normalized Entity
Bij een boek met meerdere auteurs, moeten we bij elke auteur alles terug noteren
-> ongenormaliseerd
=> herhalende groep: we moeten meerdere auteurs kunnen opnemen, dus de
herhalende groep zijn dan de auteurs
-> 2 soorten gegevens: persoonsgegevens en gegevens van het boek
Many-to-many = een schrijver kan meerdere boeken schrijven of een boek kan
meerdere schrijvers hebben
2
Alle gegevens van de auteurs gaan we overbrengen in een aparte tabel
-> moet een link kunnen leggen naar de tabel met de boekgegevens => dmv het
BoekID ook op te nemen in de tabel met de persoonsgegevens (moet weten wie
welk boek heeft geschreven)
=> in elke tabel mag elk gegeven maar 1 keer worden opgeslagen
Sleutelvelden:
-Boekgegevens: BoekID
-Persoonsgegevens: gecombineerde sleutel -> BoekID en AuteurID
Velden die niet tot de sleutel behoren -> kijken of die afhankelijk zijn van een
sleutelveld (geheel of deels)
3
Een auteur kan maar 1 keer dat bewuste boek beschrijven
Nieuwe koppeling tussen de 2 tabellen, vorige tabel heeft nu nog enkel sleutelvelden
4
Elke uitgever komt nu nog maar 1 keer voor, maar de UitgeverID komt meerdere
keren voor (aangezien een uitgever meerdere boeken uitgeeft)
Bij een normalisatie mag je geen waarden opnemen, maar abstracte beschrijvingen
We gaan niet normaliseren zoals hierboven, maar op een andere manier
5
0NF → 1NF → 2NF → 3NF
Step 1: 0NF
Step 2: 1NF
-> Databank bevindt zich in de eerste normaal vorm, en heeft geen herhalende
groepen meer
Step 3: 2NF
De niet sleutelvelden (zoals titel, jaaruitgave, ...) zijn nu afhankelijk van hun volledige
sleutel
6
Step 4: 3NF
Elk rapport apart normaliseren, anders zie je niet welk de herhalende groepen zijn
Van verschillende normalisaties moet je de niet sleutelvelden verdelen over de
sleutelvelden -> na een aantal normalisaties weet je wat bij wat hoort
Example
Als je gaat normaliseren, duid dan eerst aan welke gegevens je gaat opnemen (in
rood aangeduid)
Aantal: ... -> mag je niet opnemen in de normalisatie (mogen geen berekeningen in)
Deelnemer Deelname
Module
7
-> In normalisatie moeten we deze 3 terugvinden
Un-Normalized Entity
-> flat-table
8
Link kunnen leggen met de oorspronkelijke tabel (CursusID)
Een persoon kan maar 1 keer inschrijven voor een welbepaalde cursus
9
Remove transitive dependency
What if …
1
ERD is fout
-> Entiteiten vinden we terug in de normalisatie maar er is nog 1 sleutelveld meer
Normalization
0NF:
Cursus = (CursusID, Cursus, Datum, {DeelnemerID, Voornaam, Familienaam,
Adres, Postcode, Woonplaats})
1NF:
Cursus = (CursusID, Cursus, Datum)
1
Deelname = (CursusID, DeelnemerID, Voornaam, Familienaam, Adres, Postcode,
Woonplaats)
-> Elke deelnemer een unieke ID geven
-> Combinatie CursusID en DeelnemerID is uniek
2NF:
Cursus = (CursusID, Cursus, Datum)
Deelname = (CursusID, DeelnemerID)
Deelnemer = (DeelnemerID, Voornaam, Familienaam, Adres, Postcode, Woonplaats)
3NF:
Cursus = (CursusID, Cursus, Datum)
Deelname = (CursusID, DeelnemerID)
Deelnemer = (DeelnemerID, Voornaam, Familienaam, Adres, Postcode)
Gemeenten = (Postcode, Woonplaats)
1
De gegevens die je gaat opnemen in je normalisatie (in het rood)
Alles wat je kan berekenen moet je schrappen uit de normalisatie (zoals Extended
Price)
1
Step 1: 0NF
OR
Step 2: 1NF
Step 3: 2NF
1
InvoiceDetails = (OrderID, ProductID, Quantity)
Products = (ProductID, ProductName, UnitPrice)
Step 4: 3NF
Database optimalization
UnitPrice hoort bij het product, je hebt die UnitPrice wel degelijk nodig want elk
product heeft een eenheidsprijs
Bij normalisatie: geen UnitPrice op de OrderDetails -> wel bij ERD want het kan zijn
dat een product op een bepaald tijdstip in het jaar goedkoper of duurder is
Example
1
The normalization process is preformed on a set of abstract data
-> Het kan zijn dat je bij de normaisatie teveel tabellen krijgt (zie step 4)
Step 1: 0NF
Step 2: 1NF
1
Customer = (CustomerID, LastName, FirstName, Address, PostalCode, City,
Phone)
Purchases = (CustomerID, Date)
-> Klant koopt iets op een bepaalde dag, maar de klant meerdere aankopen doen op
1 dag
PurchaserDetails = (CustomerID, Date, ArticleID, Description, Price)
Step 3: 2NF
Step 4: 3NF
… and in Access
...
1
Example
Restrictions:
Each Academic Year, a student can subscribe in only ONE Year of Study
0NF
Student = (StudentID, LastName, FirstName, {AcademicYear, YearOfStudy,
{CourseID, CourseName, Quotation, MaxQuotation}})
1NF
Student = (StudentID, LastName, FirstName)
Contract = (StudentID, AcademicYear, YearOfStudy)
ContractCourses = (StudentID, AcademicYear, CourseID, CourseName, Quotation,
MaxQuotation)
2NF
Student = (StudentID, LastName, FirstName)
Contract = (StudentID, AcademicYear, YearOfStudy)
ContractCourses = (StudentID, AcademicYear, CourseID, Quotation)
Courses = (CourseID, CourseName, MaxQuotation)
3NF
Student = (StudentID, LastName, FirstName)
Contract = (StudentID, AcademicYear, YearOfStudy)
ContractCourses = (StudentID, AcademicYear, CourseID, Quotation)
Courses = (CourseID, CourseName, MaxQuotation)
1
Data dictionary : gaat elk element beschrijven
Data Dictionary
1
Organized listing of all data elements that are
pertinent to the system, with precise, rigorous
definitions so that both user and system analyst
will have a common understanding of inputs,
outputs, components of stores and [even]
intermediate calculations.
(Yourdon, E.N., Modern Structured Analysis, Prentice Hall, 1990)
_ Contains following information
– Name
– Alias
– Where-used/how-used
– Content description
– Supplementary information
2
2