Hovedsiden
Innholdsfortegnelse
Åpne ressurser
Trykkfeil


Kort om boka
Brukere av boka
Kurs

Har du spørsmål?

 
 

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:

  1. Hvilke funksjonelle determineringer finnes i tabellen. Det skal bygges på de forutsetninger som er gitt i tabellen og teksten over.
  2. Hva er den høyeste normalform (NF) som oppfylles i tabellen.
  3. 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)