Normaliseren - cs.uu.nl · PDF fileprimary key (pk) – foreign key (fk)) ... Boyce-Codd...

12
Normalisatie DMO 2008 1 1 Normaliseren Datamodellering 2008 2/36 Methodisch modelleren Twee manieren: bottom-up: normaliseren top-down: entity-relationship benadering Deze week: normaliseren gerelateerd aan de theorie van het relationele model maar ook als check bij ER-benadering 3/36 Normaliseren & DBMS-model Normaliseren in de praktijk gekoppeld aan het relationele database model: tabellen Normaliseren vereist enige basiskennis van het relationele model

Transcript of Normaliseren - cs.uu.nl · PDF fileprimary key (pk) – foreign key (fk)) ... Boyce-Codd...

Page 1: Normaliseren - cs.uu.nl · PDF fileprimary key (pk) – foreign key (fk)) ... Boyce-Codd Normal Form (BCNF): elke determinant = een candidate key

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

Page 2: Normaliseren - cs.uu.nl · PDF fileprimary key (pk) – foreign key (fk)) ... Boyce-Codd Normal Form (BCNF): elke determinant = een candidate key

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)

Page 3: Normaliseren - cs.uu.nl · PDF fileprimary key (pk) – foreign key (fk)) ... Boyce-Codd Normal Form (BCNF): elke determinant = een candidate key

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

Page 4: Normaliseren - cs.uu.nl · PDF fileprimary key (pk) – foreign key (fk)) ... Boyce-Codd Normal Form (BCNF): elke determinant = een candidate key

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

Page 5: Normaliseren - cs.uu.nl · PDF fileprimary key (pk) – foreign key (fk)) ... Boyce-Codd Normal Form (BCNF): elke determinant = een candidate key

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#

Page 6: Normaliseren - cs.uu.nl · PDF fileprimary key (pk) – foreign key (fk)) ... Boyce-Codd Normal Form (BCNF): elke determinant = een candidate key

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

Page 7: Normaliseren - cs.uu.nl · PDF fileprimary key (pk) – foreign key (fk)) ... Boyce-Codd Normal Form (BCNF): elke determinant = een candidate key

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!)

Page 8: Normaliseren - cs.uu.nl · PDF fileprimary key (pk) – foreign key (fk)) ... Boyce-Codd Normal Form (BCNF): elke determinant = een candidate 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

Page 9: Normaliseren - cs.uu.nl · PDF fileprimary key (pk) – foreign key (fk)) ... Boyce-Codd Normal Form (BCNF): elke determinant = een candidate key

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

Page 10: Normaliseren - cs.uu.nl · PDF fileprimary key (pk) – foreign key (fk)) ... Boyce-Codd Normal Form (BCNF): elke determinant = een candidate key

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

Page 11: Normaliseren - cs.uu.nl · PDF fileprimary key (pk) – foreign key (fk)) ... Boyce-Codd Normal Form (BCNF): elke determinant = een candidate key

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

Page 12: Normaliseren - cs.uu.nl · PDF fileprimary key (pk) – foreign key (fk)) ... Boyce-Codd Normal Form (BCNF): elke determinant = een candidate key

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