5 I N F O R M A T I C A B E H E E R Vrij Technisch Instituut - Hasselt Relationele Databases Hst 3 :...
Transcript of 5 I N F O R M A T I C A B E H E E R Vrij Technisch Instituut - Hasselt Relationele Databases Hst 3 :...
Vrij Technisch Instituut -
Hasselt
5
I N
F O
R M
A T
I C
A B
E H
E E
R
Relationele Databases
Hst 3 : Normaliseren
1. Van een ERD naar een relationele DB
PATIËNTnaam
voornaamgewichtlengte
entiteit
attributen
naam voornaam gewicht lengte
Jansen Jos 74 kg 1m72
Timmers Annie 62 kg 1m58
Peeters Filip 85 kg 1m82
1object van de entiteit = 1 record of rij
Kolommen of velden
tblpatiënten tabel
Notatie van een tabel: tblpatiënten (naam, voornaam, gewicht, lengte)
ERD
•Entiteiten
•Attributen
•Relaties
•Tabellen
•Velden
•Relaties
Een relationele DB (bvb. ACCESS)
1. Van een ERD naar een relationele DB
naam voornaam gewicht lengte
Jansen Jos 74 kg 1m72
Timmers Annie 62 kg 1m58
Jansen Jos 74 kg 1m72
Peeters Filip 85 kg 1m82
2. Kan om het even welke tabel in een relationele DB worden opgenomen?
Probleem: 2 identieke rijen
•Gevaar van gegevensinconsistentie
•Onnodig “geheugenverbruik” door gegevensredundantie (zelfde informatie komt op meerdere plaatsen in de tabel voor)
Voorwaarde 1: Geen twee identieke rijen in een relationele DB!
naam voornaam gewicht lengte opmerking
Jansen Jos 74 kg 1m72 12 kg zwaarder dan persoon hieronder
Timmers Annie 62 kg 1m60
Flipkens Jan 78 kg 1m75 15 cm groter dan persoon hierboven
Peeters Filip 85 kg 1m82
Probleem: Gegevensinconsistentie bij bepaalde operaties (bvb. sorteren op naam)
Voorwaarde 2: volgorde van rijen en kolommen is niet belangrijk, d.w.z. dat je zonder gevolgen rijen en kolommen van plaats mag wisselen
2. Kan om het even welke tabel in een relationele DB worden opgenomen?
Voorwaarde 3: gegevens in een kolom mogen geen “opsomming van gegevens” zijn. Elke cel bevat atomaire gegevens
type kleur levertermijn kostprijs
kast zwartwit
bruin
6 weken 24 000 BEF
salontafel beigewit
4 weken2 weken
15 000 BEF
stoel geel 1 week 4 500 BEF
tafel paarsbruinrood
5 weken 10 700 BEF
2. Kan om het even welke tabel in een relationele DB worden opgenomen?
Probleem: Hoeveel geheugen moeten we reserveren voor de kolom “kleur”?
2. Besluit: Voorwaarden waaraan een tabel moet voldoen in een relationele database
1. Geen twee identieke rijen in een relationele DB!
2. Volgorde van rijen en kolommen is niet belangrijk
3. Elke cel bevat atomaire gegevens
Gevaren wanneer deze voorwaarden niet voldaan zijn:
• Risico op inconsistentie
• Gegevensredundantie
Om tot een tabel te komen die aan deze voorwaarden voldoet, moeten enkele stappen ondernomen worden. Het achtereenvolgens uitvoeren van deze stappen nomen we het NORMALISEREN van een DB.
3. HET NORMALISATIEPROCESWAT?herschikking van gegevens waarbij soms nieuwe gegevensgroepen (tabellen) ontstaan door afzondering van gegevens uit bestaande groepen (tabellen)
DOEL?de uiteindelijke databank mag geen redundantie bevatten en de gegevensinconsistentie wordt ingeperkt
De stappen:
0NF
1NF
2NF
3NF
Een “rauwe” gegevensgroep
Gegevensgroep die voldoet aan de eisen van een relationele omgeving: geen redundantie!
• Bepaal een PRIMAIRE SLEUTEL = een kolom of veld dat verschillend is voor elk van de rijen of records
• Dit kan ook combinatie zijn van twee of meer velden = samengestelde sleutel
3. Het normalisatieproces – STAP 0 – 0NF
Bankrekening Naam Voornaam Adres Geboortedatum
063-1112345-45 Pieters Alex Pietelbeek 12/02/1980
063-1234567-89 Buvens Hiron Burchtstraat 18/02/1975
063-5689784-65 Germain Kris Schouwburgstraat
26/03/1966
• Als je geen geschikte sleutel vindt, dan maak je zelf een veld bij, dat dienst doet als primaire sleutel = surrogaatsleutel
KlantIDKlantID NaamNaam VoornaamVoornaam SaldoSaldo
0001 Jan Peters 5 000 BEF
0002 Caroline Peters 4 000 BEF
0003 Jan Kippers 2 500 BEF
0004 Pieter Maes 5 000 BEF
3. Het normalisatieproces – STAP 0 – 0NF
Geef voorbeeld van een unieke sleutel die door volgende organisaties of instellingen wordt gebruikt om de klant, het lid, … te identificeren
Financiële instelling Nummer bankkaart
Jeugdbeweging Lidnummer
Mutualiteit Nummer SIS-kaart
3. Het normalisatieproces – STAP 0 – 0NF – een oefening
3. Het normalisatieproces – STAP1 – 1NF
• Verwijder REPETERENDE GROEPEN (niet atomaire gegevens)
3. Het normalisatieproces – STAP1 – 1NF
tblpersoneel
Tblgesproken_talen
tblpersoneel
Tblgesproken_talen
3. Het normalisatieproces – STAP1 – 1NF
• Relaties worden aangegeven door de primaire sleutel in de ene tabel te herhalen in de andere tabel
• Notatie: Lijn tussen de twee tabellen
Een tussendoortje: Hoe worden relaties aangegeven in een relationele omgeving?
personeelsnummeradresgegevensuurloonprojecten (projectnr, projectnaam)
3. Het normalisatieproces – STAP 1 – een oefening
Breng volgende gegevensgroep in 0NF, daarna in 1NF
LeerlingIDnaamvoornaamadresAfgelegde toetsen (toetsnr, vak, datum)
Breng volgende gegevensgroep in 0NF, daarna in 1NF
1. Maak een aparte tabel van de gegevens uit de repeterende groep
2. Verwijder repeterende groep uit oude groep3. Voeg hieraan de sleutel van de oude groep toe4. Herhaal deze stappen tot er geen repeterende
groep meer is
3. Het normalisatieproces – STAP1 – 1NF
3. Het normalisatieproces – STAP2 – 2NF
LeerlingID ToetsID Naam Voornaam Punten
1 SO1 Ayaz Gürol 8
2 SO1 Bos Joachim 9
1 SO2 Ayaz Gürol 7
2 SO2 Bos Joachim 6
1 SO3 Ayaz Gürol 5
2 SO3 Bos Joachim 5
Leerling ID Naam Voornaam
1 Ayaz Gurol
2 Bos Joachim
Als je de LeerlingID kent, dan ken je meteen ook de naam en voornaam van de lln -> redundantie
LeerlingID ToetsID Punten
1 SO1 8
2 SO1 9
1 SO2 7
2 SO2 6
1 SO3 5
2 SO3 5
• Elk veld moet FUNCTIONEEL AFHANKELIJK zijn van de VOLLEDIGE primaire sleutel
• Vermijd PARTIËLE functionele afhankelijkheid, m.a.w. vermijd dat een veld functioneel afhankelijk is van een deel van de sleutel
3. Het normalisatieproces – STAP2 – 2NF
LeerlingID
ToetsID
Naam leerling
Voornaam leerling
Punten
Gegeven de leerlingID -> je kan in de databank de naam en voornaam opzoeken
LeerlingID
ToetsID
Punten
LeerlingID
Naam leerling
Voornaam leerling
Naam en voornaam zijn functioneel afhankelijk van een deel van de sleutel of partieel functioneel afhankelijk van de sleutel
Lidnummer
Naamkind
SportclubID
Naam Sportclub
Gemeente
3. Het normalisatieproces – STAP 2 – een oefening
Breng volgende gegevensgroep in 2NF
1. Duid de attributen aan die functioneel afhangen van een deel van de primaire sleutel (min. 2 sleutelvelden nodig) (partiële fucntionele afhankelijkheid)
2. Maak nieuwe groep met: deel primaire sleutel waarvan partieel functioneel afhankelijke attributen afhangen
3. Verwijder attributen uit oude groep
3. Het normalisatieproces – STAP2 – 2NF
Boekcode Categoriecode CategorieOms Titel Auteur Verkprijs
BK1276 K36 Kinderen 3-6 jaar Samson op reis 595
VW0058 K03 Kinderen 0-3 jaar Dieren kijken 99
HJ1000 K36 Kinderen 3-6 jaar Samson is ziek 595
… … … … … …
Boekcode Categoriecode Titel Auteur Verkprijs
BK1276 K36 Samson op reis 595
VW0058 K03 Dieren kijken 99
HJ1000 K36 Samson is ziek 595
… … … … …
Categoriecode CategorieOms
K36 Kinderen 3-6 jaar
K03 Kinderen 0-3 jaar
K36 Kinderen 3-6 jaar
… …
3. Het normalisatieproces – STAP3 – 3NF
• Verwijder de TRANSITIEVE FUNCTIONELE AFHANKELIJKHEID: veld is functioneel afhankelijk van een ander veld dat NIET hoort bij de primaire sleutel
1. Duid de attributen aan die functioneel afhangen van een ander attribuut (niet horend tot primaire sleutel)
2. Maak een nieuwe groep met het attribuut waarvan overige attributen afhangen (dit wordt primaire sleutel in nieuwe tabel en de aangeduide attributen)
3. Verwijder attributen uit oude groep
3. Het normalisatieproces – STAP3 – 3NF
Naam
Voornaam
Adresgegevens (Straat, Postcode, Woonplaats)
Datum indiensttreding
Afdeling
Brutoloon
Kinderinfo (naam kind, geboortedatum)
3. Het normalisatieproces – STAP 3 – een oefening
Breng volgende gegevensgroep in 3NF
Je hebt een stal met succesvolle paarden en je wil volgende gegevens plaatsen in een databank.
Naam
Geboortedatum
Jongen (Naam, Geboortedatum)
Wedstrijden (Naam, Plaats, Berijder, Prestatie)
3. Het normalisatieproces – STAP 3 – een extra oefening
Breng volgende gegevensgroep in 3NF
personeelsnummeradresgegevensuurloonprojecten (projectnr, projectnaam, klantnaam, werkduur)
Oefening 1: Breng onderstaande tabel in 2NF
paardnummernaamgeboortedatumjongen (naam, geboortedatum)wedstrijden (naam, plaats, berijder, prestatie)
Oefening 2: Breng onderstaande tabel in 2NF