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