Normaliseren - cs.uu.nl · PDF fileprimary key (pk) – foreign key (fk)) ... Boyce-Codd...
Transcript of Normaliseren - cs.uu.nl · PDF fileprimary key (pk) – foreign key (fk)) ... Boyce-Codd...
Normalisatie
DMO 2008 1
1
Normaliseren
Datamodellering 2008
2/36
Methodisch modellerenTwee manieren:
bottom-up: normaliserentop-down: entity-relationship benadering
Deze week: normaliserengerelateerd aan de theorie van het relationele modelmaar ook als check bij ER-benadering
3/36
Normaliseren & DBMS-modelNormaliseren in de praktijk gekoppeld aan het relationele database model: tabellenNormaliseren vereist enige basiskennis van het relationele model
Normalisatie
DMO 2008 2
4/36
Historie relationele modelTed Codd
IBM EngelandA Relational Model of Data for Large Shared Data Banks (1970) → basis methodisch modelleren
daarvoor vooral pragmatisch bij bouwen van applicatiesAanvankelijk verzet
RDBMS ↔ IBM’s IMS/DB (hierarchisch DBMS)IBM geeft toe onder druk van klanten → System R (met SEQUEL)
Codd geeft wiskundige basis (publ.: Chris Date), o.a. normaliseren
5/36
Relationele tabel
etc.etc.etc.etc.etc.
EdeZuidwal 3JansenM.A.136
UtrechtVoorstraat 1VerhoogK.135
BredaWestzoom 12PietersJ.A.P.134
PlaatsAdresNaamInitKlantNr
cel (atomaire waarde)
cardinaliteitvan de tabel
graad (degree)
kolom = veldrij = record = tuplerecords: verzameling → volgordeniet relevant voor het model
tabel = relatie
6/36
Relationele databaseRelationele database: verzameling tabellenRelationele tabel
rechthoekig (dus ≠ spreadsheet tabel!)
Relationele operaties → tabelTabellen gekoppeld via sleutels
primary key (pk) – foreign key (fk)
Normalisatie
DMO 2008 3
7/36
Identificering en koppelingEén veld (of een klein mogelijk combinatievan velden) = primary key → identificeert record
Koppeling van records door verwijzing (primary key, foreign key)
EdeZuidwal 3JansenM.A.136
UtrechtVoorstraat 1VerhoogK.135
BredaWestzoom 12PietersJ.A.P134
PlaatsAdresNaamInitKlantNr
P003136
P456134
P23134
ProductKlantNr
primary keyforeign key
composite primary key
8/36
SleutelsCandidate key:
uniekniet-reduceerbare combinatie van attributen (indien composite)fungeert als determinant voor andere attributen in de tuple
Primary key (PK): een candidate key gekozen als identifierForeign key (FK): kruisverwijzing naar primary key
9/36
Referentiële integriteitEen foreign key-waarde moet altijd corresponderen met een bestaande primary key-waarde in de parent table ofvolledig NULL zijn.
Gebrekkige referentiële integriteit
Normalisatie
DMO 2008 4
10/36
Normaliseren: definities“a technique for designing relational database tables to minimize duplication of information and, in so doing, to safeguard the database against certain types of logical or structural problems, namely data anomalies.” [Wikipedia]
“the process of transforming data into well formed or natural groupings such that one fact is in one place and the correct relationshipsbetween facts exist.”[Avison & Fitzgerald]
11/36
RedundantieRedundantie = onnodige dataduplicatieVoorbeeld: Suppliers-and-Parts:wat als een leverancier verhuist?S# City P# Qty S1 London P1 300 S1 London P2 200 S1 London P3 400 S2 Paris P1 100 S2 Paris P2 400 S3 Paris P2 100 S4 London P2 200 S4 London P4 300
12/36
Meer redundantie-problemen
anomalieën bijtoevoegen enverwijderen
Normalisatie
DMO 2008 5
13/36
Samenvattend: normaliserenData organiseren in tabellen, zó dat:
er minimale / geen redundantie isupdate-operaties (toevoegen, wijzigen, verwijderen) eenvoudig zijn uit te voerenrecords in een tabel te identificeren zijn m.b.v. een unieke sleutel (primary key)bij elkaar horende records gerelateerd zijn via primary-foreign key relaties
14/36
Normaliseren als techniekOmvat een aantal stappen (= normaalvormen):
1NF2NF3NFBCNF4NF5NF6NF
Centraal begrip: functionele afhankelijkheid
1NF2NF
3NFBCNF4NF5NF
6NF
2NF veronderstelt, dat de dataset al in1NF is, etc.
meestal voldoende:“relatie is genormaliseerd”
15/36
Functionele afhankelijkheid (1)
S#
P#
City
Qty
S# City P# Qty S1 London P1 300 S1 London P2 200 S1 London P3 400 S2 Paris P1 100 S2 Paris P2 400 S3 Paris P2 100 S4 London P2 200 S4 London P4 300
• S# is de determinant van City• City is functioneel afhankelijk van S#
Normalisatie
DMO 2008 6
16/36
Functionele afhankelijkheid (2)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.
17/36
VooronderstellingenFunctionele afhankelijkheid kan ook te maken hebben met vooronderstellingenJouw interpretatie van de requirements waar nodig expliciteren!
“Aangenomen: elke werknemer heeft niet meer dan één auto van de zaak” (als dit open wordt gelaten in de opgave)
Voor de opdrachten in deze cursus geldt: vermelding van vooronderstellingen = jouw toelichting bij de oplossing
18/36
Niet genormaliseerd
8BasicProgram 1B741
Web infosysB952
15AdvancedInformationB951MaComp AppsB94
Hardware 2B745
11MediumProgram 2B744
Data Proc 1B743
Hardware 1B742
8BasicProgram 1B741BaComp SciB74
CreditsStatusMod-nameModLevelCourse-name
Crse
• Speadsheet format (GEEN relationele tabel)• Repeating groups: 1 Course-name met N Mod-names
Normalisatie
DMO 2008 7
19/36
Eerste normaalvorm (1NF)
8BasicProgram 1B741MaComp AppsB94
15AdvancedWeb infosysB952MaComp AppsB94
15AdvancedInformationB951MaComp AppsB94
11MediumHardware 2B745BaComp SciB74
11MediumProgram 2B744BaComp SciB74
8BasicData Proc 1B743BaComp SciB74
8BasicHardware 1B742BaComp SciB74
8BasicProgram 1B741BaComp SciB74
CreditsStatusMod-nameModLevelCourse-name
Crse
• Relationele tabel, atomaire waarden in elke cel →geen repeating groups
• Primary key: Crse Mod (composite) - candidate keys?
COURSE-DETAIL
20/36
Notatie 1NFCOURSE-DETAIL (Crse, Course-name, Level, Mod, Mod-name, Status, Credits)Onderstreep primary keysTabelnaam: hoofdlettersReeks velden tussen haakjesVeldnaam: kleine letters, evt. hoofdletter aan het begin
21/36
Naar tweede normaalvormProblemen met deze relatie in 1NF:
Redundantie veroorzaakt door de combinatie van Course en Module in één tabel → aparte tabel voor Module2NF:
Relatie is in 1NFAlle niet-sleutel attributen zijn functioneel afhankelijk van de volledige sleutel (composite key!)
Normalisatie
DMO 2008 8
22/36
2NF – eerste stap
B741MaComp AppsB94
B952MaComp AppsB94
B951MaComp AppsB94
B745BaComp SciB74
B744BaComp SciB74
B743BaComp SciB74
B742BaComp SciB74
B741BaComp SciB74
ModLevelCourse-name
Crse
8BasicProgram 1B741
15AdvancedWeb infosysB952
15AdvancedInformationB951
11MediumHardware 2B745
11MediumProgram 2B744
8BasicData Proc 1B743
8BasicHardware 1B742
8BasicProgram 1B741
CreditsStatusMod-nameMod
2NF: “Every non-key column dependent on the entire PK”Is dat zo?
COURSE-MODULE MODULE
23/36
2NF - uitwerkingStap 1:
COURSE-MODULE (Crse, Course-name, Level, Mod)MODULE (Mod, Mod-name, Status, Credits)
Stap 2:COURSE (Crse, Course-name, Level)MODULE (Mod, Mod-name, Status, Credits)COURSE-MODULE (#Crse, #Mod)
Zet # vóór de foreign key!
24/36
2NF: nog steeds redundantie
15AdvancedWeb infosysB952
15AdvancedInformationB951
11MediumHardware 2B745
11MediumProgram 2B744
8BasicData Proc 1B743
8BasicHardware 1B742
8BasicProgram 1B741
CreditsStatusMod-nameMod
MODULEStatus → CreditsRedundantie,daarom naar 3NF
Normalisatie
DMO 2008 9
25/36
Derde normaalvorm (3NF)Relatie is in 2NFGeen functionele afhankelijkheid tussen niet-sleutelattrubuten =geen transitieve afhankelijkheid Credits via Status afhankelijk van Mod:Mod → Status → Credits
26/36
Notatie 3NFIn 2NF:
COURSE (Crse, Course-name, Level)MODULE (Mod, Mod-name, Status, Credits)COURSE-MODULE (#Crse, #Mod)
In 3NF:COURSE (Crse, Course-name, Level)MODULE (Mod, Mod-name, #Status)STATUS (Status, Credits)COURSE-MODULE (#Crse, #Mod)
27/36
Hogere normaalvormenBoyce-Codd Normal Form (BCNF): elke determinant = een candidate key4NF: functionele afhankelijkheid oplossen tussen attributen binnen een composite key die uit 3 of meer velden bestaatVoorbeelden volgen
Normalisatie
DMO 2008 10
28/36
Normaliseren: samenvatting(Informeel) genormaliseerd betekent:
Een tabel bevat data over slechts één thema (anders splitsen)Alle attributen zijn functioneel afhankelijk van de PK en ook alleen daarvanEen PK is minimaalEen FK verwijst naar een bestaande PK
29/36
Oefening 1: FietsclubEen fietsclub gaat elke zaterdag in groepjes van wisselende samenstelling erop uit; elk groepje rijdt een andere route naar keuze. Een groepje heeft een nummer (1 t/m 7; elke week gebruikt); een route een letter en een omschrijving.Niet-genormaliseerde dataverzameling:FIETSER (LidNr, Voornaam, Tussen, Achternaam, Adres, Woonplaats, Telefoon, E-mail, Datum_tocht, GroepsNr, Route_id, Route_omschr)
Opdracht:Breng de verzameling in 3NFVermeld evt. vooronderstellingenVermeld bij elke normalisatiestap de reden
30/36
Oefening 2: VliegreizenEen vliegveld registreert voor vluchten (alfabetisch):
Aandrijving: van het vliegtuig Geb_datum: geboortedatum passagierMaatschappij: vlieguigmaatschappijNaam: passagierPcode: plaatscode bestemmingPlaats: plaatsnaam bestemmingTicketNr: ticketnummerType: type vliegtuigVdatum: datum vluchtVnr: vluchtnummerVtijd: tijd vluchtZitplaatsen: aantal zitplaatsen in vliegtuig
Opdracht:• Zet dit in 3NF• Vermeld vooronderstellingen
Normalisatie
DMO 2008 11
31/36
BCNF (1)BCNF (Boyce-Codd Normal Form):
Alle attributen in een relatie afhankelijk van elke candidate key, en niet alleen van de primary key (ofwel:elke determinant = candidate key)
PetersB742De Vries
AbelsB742Jansen
SmitsB741Jansen
SmitsB741De Vries
DocentModuleStudent Wel in 3NF, maar nietin BCNF: Docent →Module, maar Docent is geen candidate key!
32/36
BCNF (2)Zo wel in BCNF:
PetersDe Vries
AbelsJansen
SmitsJansen
SmitsDe Vries
DocentStudent
PetersB742
AbelsB742
SmitsB741
DocentModule
DOCENT STUDENT-DOCENT
33/36
4NF (1)Deze tabel in in 3NF en BCNF, maar toch redundantieProbleem: multivalued dependencies (onafhankelijk van elkaar):
Module →→ Docent (module heeft een aantal docenten)Module →→ Handboek (module gebruikt een set handboeken)
Smits
Smits
Smits
Jansen
Jansen
Smits
Smits
Docent
Information SystemsB742
System AnalysisB742
Database FundamentalsB742
Introductie DMOB741
Database FundamentalsB741
Introductie DMOB741
Database FundamentalsB741
HandboekModule
Normalisatie
DMO 2008 12
34/36
4NF (2)Zo wel in 4NF:
Smits
Jansen
Smits
Docent
B742
B741
B741
Module
Information SystemsB742
System AnalysisB742
Database FundamentalsB742
Introductie DMOB741
Database FundamentalsB741
HandboekModule
MODULE-DOCENT MODULE-HANDBOEK
35/36
Oefening 3: Pizzarestaurant
ShelbyvilleThin CrustVincenzo's Pizza
SpringfieldThin CrustVincenzo's Pizza
ShelbyvilleThick CrustVincenzo's Pizza
SpringfieldThick CrustVincenzo's Pizza
Capital CityStuffed CrustElite Pizza
Capital CityThin CrustElite Pizza
Capital CityStuffed CrustA1 Pizza
ShelbyvilleStuffed CrustA1 Pizza
SpringfieldStuffed CrustA1 Pizza
Capital CityThick CrustA1 Pizza
ShelbyvilleThick CrustA1 Pizza
SpringfieldThick CrustA1 Pizza
Delivery AreaPizza VarietyRestaurant Opdracht:• Noteer afhankelijkheden• Normaliseerdeze tabel(welke normaal-vorm?)• Verklaar deoorzaak vande redundantie
36/36
Oefening 4: KlantgesprekkenFD:
(1) Staflid, Gesprek_datum, Gesprek_tijd → Klant(2) Kamer, Gesprek_datum, Gesprek_tijd → Klant, Staflid(3) Staflid, Gesprek_datum → Kamer
Welke candidate keys zijn er?Is deze relatie in BCNF? Zo niet, hoe dan wel?
10.30
12.00
12.00
10.30
Gesprek_tijd
A
B
A
A
Staflid
10219-09-200856
10218-09-200874
10118-09-200856
10118-09-200876
KamerGesprek_datumKlant