INFO122 Innføring i databaser Oblig 2 av Frode H. Pedersen, Kjartan B. Michalsen og Kristin Breivik
a)
For at en relasjonsmodell skal være på en viss normalform, må alle relasjoner oppfylle minst denne normalformens kriterier. Normalformene har følgende kriterier: 1NF Ingen multiverdiattributter eller nestede relasjoner. Dette ligger innebygget i relajsonsmodellen. 2NF Når en relasjon er på 1NF og alle biattributter er fullt funksjonelt avhengig av primærnøkkelen. 3NF Når en relasjon er på 2NF og ingen biattributter er avhengig av et annet biattributt. BCNF Når en relasjon er på 3NF og de eneste bestemmende attributter er hovedattributter. Alle relasjonene i relasjonsmodellen oppfyller alle nevnte krav, og dermed må modellen være på Boyce-Codd normalform. b) RELASJONSALGEBRA Finn tittel og ISBN-nummer på bøker som omhandler databaser DBFAGFELT σ Fagfelt= databaser (FAGFELT_FAGSKRIFT) DBBØKER DB_FAGFELT >< FagskriftId=BokFagId (BOK) RES π ISBN, Boktittel (DBBØKER) Finn tittel og ISBN-nummer på bøker som handler om både databaser og programmering DBFAG π FagskriftId (σ Fagfelt= databaser (FAGFELT_FAGSKRIFT)) PRGFAG π FagskriftId (σ Fagfelt= programmering (FAGFELT_FAGSKRIFT)) DB_PRG_FAG DBFAG PRGFAG DB_PRG_BØKER DB_PRG_FAG >< FagskriftId=BokFagId (BOK) RES π ISBN, Boktittel (DB_PRG_BØKER) Finn forlag som har gitt ut bøker om alle fagfelt ULIKEFAGFELT π Fagfelt (FAGFELT_FAGSKRIFT) Finner alle de ulike fagfeltene og setter de opp i en liste BOKFAGFELT (Bok >< BokFagId=FagskriftId FAGFLET_FAGSKRIFT) Kobler fagfelt på de ulike bøkene FORLAGFAG π Forlagsnavn, Fagfelt (BOKFAGFELT)
Skiller ut det vi er interessert i RESULTAT FORLAGSFAG ULIKEFAGFELT Devision på FORLAGSFAG mot de ulike vi fant i ULIKEFAGFELT. Dette gir oss de forlagene som har gitt ut bøker på alle forlagene Finn navn på personen(e) som er med(forfatter) på flest bøker. ANT_BØKER(Forfatter, Antall) ForfatterPNavn F COUNT BokISBN (FORFATTER) FORFATTER(E)_PÅ_FLEST_BØKER Forfatter F MAX Antall (ANT_BØKER) c) Er operatormengden {π,,, >< } komplett? Begrunn svaret. Om en gitt operatormengde er komplett handler rett og slett om operatormengden har uttrykkskraft nok til å kunne uttrykke alt man skal kunne uttrykke innen relasjonsalgebra. Operatormengden {σ, π,,, } er den minimale mengden operatorer en kan ha i relasjonsalgebra der mengden fremdeles har full uttrykkskraft og følgelig er den også komplett. Enhver annen operator vil være overflødig, da kombinasjoner av nevnte operatorer vil kunne gjøre samme jobben (om enn i et mer komplisert uttrykk). Enhver operatormengde som har minst samme uttrykkskraft som nevnte minimale operatormengde sies å være komplett. Operatormengden {π,,, >< } avviker fra den minimale og komplette operatormengde ved at operatorene select og kryssprodukt er blitt erstattet med join. Vi vet at join kan uttrykkes v.hj.a. select og kryssprodukt. Men det samme gjelder ikke om vi ønsker å gå motsatt vei. Select og kryssprodukt kan ikke i alle tilfeller erstattes av en join, og dermed vil ikke operatormengden ha full uttrykkskraft. Så lenge ikke operatorene select og kryssprodukt er med i operatormengden, er mao. mengden ikke komplett. d) Oppg 10.32 CARSALE Car# Salesman# Commission% Date_sold Discount_amt Basert på den gitte primærnøkkelen, vil vi si at relasjonen kun er på 1. normalform. Relasjonen bryter med 3.normalform, da ikkenøkkelattributtet Discount_amt blir bestemt av et annet ikkenøkkelattributt, nemlig Date_sold. Relasjonen bryter også med 2NF pga. at biattributtet Commision% er partielt avhengig av primærnøkkelen. Attributtet Commission% er kun funksjonelt avhengig av attributtet Salesman#, ikke den
sammensatte primærnøkkelen {Car#, Salesman#}. En relasjon er på 1NF dersom den kun har atomiske attributter, og ingen nestede relasjoner. Disse egenskapene ligger allerede innebygget i relasjonsmodellen, og vi har dermed å gjøre med en relasjon på 1.normalform. Normalisering Normalisering til 2.normalform: CAR Car# Date_sold Discount_amt CARSALE Car#* Salesman#* SALESMAN Salesman# Commission% Normalisering til 3.normalform: Vi deler opp relasjonen CAR videre i relasjonenene CAR og DATE_DISCOUNT: CAR Car# Date_sold* DATE_DISCOUNT Date_sold Discount_amt CARSALE Car#* Salesman#* SALESMAN Salesman# Commission% Boyce-Codd Normalform finner vi når en relasjon er i 3NF og de eneste bestemmende attributter er hovedattributter. Dermed er relasjonsmodellen nå også på Boyce-Codd.