Problem: Hotellbestilling
Gitt følgende tabell: Hotellbestilling
hotell_no |
kjede_no |
kunde_no |
fra |
til |
kunde_adresse |
H2 |
HK3 |
K1 |
01.09.00 |
03.09.00 |
TRONDHEIM |
H2 |
HK3 |
K2 |
01.09.00 |
09.09.00 |
OSLO |
H3 |
HK2 |
K1 |
02.08.00 |
07.08.00 |
BERGEN |
Tabellen Hotellbestilling inneholder informasjon om bestillinger gjort
av kunder (identifisert ved kunde_no) som ønsker å overnatte på spesielle
hotell (identifisert ved hotell_no). Hotellene er selvstendige enheter
innenfor hotellkjeder (identifisert ved kjede_no). Også adressen til
kunden (kunde_adresse) blir lagret. Hotellbestillingen gjelder fra en
spesifikk innsjekkingsdato (fra) til en spesifikk utsjekkingsdato (til).
Oppgaver:
- Hvilke funksjonelle determineringer finnes i tabellen. Det skal bygges på
de forutsetninger som er gitt i tabellen og teksten over.
- Hva er den høyeste normalform (NF) som oppfylles i tabellen.
- Hvis tabellen ikke er på Boyce-Codd normalform (BCNF), vis hvordan
tabellen kan normaliseres til BCNF.
Et løsningsforslag til oppgavene
1. Funksjonelle determineringer
Figur 1: determineringer
Ut i fra de aktuelle bestillingene som er lagt inn i tabellen kan vi se at en kombinasjon av verdiene i kolonnene hotell_no, kunde_no og
fra identifiserer entydig hver hotellbestilling. Dermed får tabellen en
sammensatt determinant (primærnøkkel) som består av de ovennevnte kolonnene.
Ellers ser vi av figuren at hotell_no alene determinerer kjede_no.
Kjenner vi hotellets identifikasjon, så kjenner vi også hotellkjeden det
tilhører. Vi ser også av figuren at kunde_no determinerer
kunde_adresse. Kjenner vi kundens identifikasjon så kjenner vi også adressen
til kunden.
2. Høyeste normalform (NF)
Tabellen Hotellbestilling tilfredsstiller kravet til 1. normalform (1NF),
fordi hver kolonne har atomiske verdier (ingen av cellene i tabellen har
repeterende grupper). Denne tabellen har en sammensatt determinant
(primærnøkkel) og dermed kan vi ha partielle determineringer i tabellen (deler
av determinanten determinerer en ikke-determinant). Ut fra determineringene i
figur 1 kan vi se at vi har to partielle
determineringer. Kunde_no determinerer kunde_adresse og
hotell_no determinerer hotell_kjede. Her har vi mao. et brudd på 2.
normalform (2NF) som omhandler en sammensatt determinant og mulige partielle
determineringer. De partielle determineringene må være fjernet hvis tabellen
skal være på 2NF.
3. Boyce-Codd normalform (BCNF)
Når vi fjerner de partielle determineringene får vi følgende:
Figur 2: determineringer
Her ser vi at hotell_no og kunde_no er trukket ut som egne
determinanter i hver sin tabell samtidig som de er bibeholdt som en del av den
sammensatte determinanten i Hotellbestilling. Vi ser nå at alle partielle
determineringer er fjernet fra Hotellbestilling og ingen av de to nye
tabellene har en sammensatt determinant som kunne ha gitt partielle
determineringer. Dermed er tabellene på 2. normalform (2NF). Vi ser videre at
det ikke finnes noen transitive determineringer (en ikke-determinant som
determinerer en annen ikke-determinant), dermed er også 3. normalform (3NF)
oppfylt. Den er også på BCNF fordi ingen ikke-determinant determinerer deler av
determinanten. I Hotellbestilling så blir verdiene i kolonnen til
determinert av hele determinanten og verdiene i til determinerer på ingen
måte noen av verdiene i den sammensatte determinanten.
Ut fra determineringene i figur2
oppretter vi følgende tabeller med entitets- og referanseintegritet:
- KUNDE(kunde_no, kunde_adresse)
- HOTELL(hotell_no, kjede_no)
- HOTELLBESTILLING(hotell_no*,
kunde_no*, fra, til)
|