IN2090-ukesoppgaver: Uke 4
ER-modellering og realisering
Modellering
Løs oppgavene under ved å modellere ER-diagrammer i henhold til de
kravene som er oppgitt. Husk at det finnes flere typer attributter! Bruk
Dia (se semestersiden), apps.diagrams.net
, eller tegn for
hånd.
Oppgave 1 - Filmer
Vi vil lage oss en liten filmdatabase. Alle filmene har navn, men ettersom flere filmer kan ha samme navn, gir vi også unike ID-er til filmene. For hver film ønsker vi å lagre en eller flere sjangre. Til slutt ønsker vi også info om hvilken skuespiller (eller skuespillere?) som spilte hovedrollen og hvilken regissør (regissører?) som regisserte filmen. For disse kan vi anta at alle har unike navn. Prøv å unngå overflødige entiteter og/eller attributter.
Løsningsforslag:
Oppgaven er litt tvetydig, siden det ikke er helt klart hva vi kan modellere med samme entitetstype og ikke. Men om modellen kun skal inneholde attributtene som er beskrevet i oppgaven vil både regissør og skuespiller kunne representeres med samme entiet, f.eks.PERSON
, og vi vil da få følgende modell:
![](enkel_film.png)
Det er også mulig å greie seg med kun FILM
som entitet,
og så la både Skuespiller
og Regissør
være
flerverdi-attributter.
Oppgave 2 - Sertifikater
Vi skal modellere at personer har sertifikat og hvilke kjøretøy man har sertifikat for. En person kan ha sertifikat for flere kjøretøy, og hvert sertifikat er gyldig fra en startdato til en sluttdato.
Modeller en ternær relasjon mellom Person, Sertifikat og Kjøretøy. Sett passende attributter til hver entitet, og husk at alle entiteter skal ha en primærnøkkel (som kan bestå av ett eller flere attributter). Modellen skal utrykke følgende: Gitt en person og et sertifikat kan det være flere kjøretøy; gitt en person og et kjøretøy kan det kun være ett sertifikat; og gitt et sertifikat og et kjøretøy kan det være mange personer. Videre må hvert sertifikat være tatt av minst en person på et kjøretøy.
Løsningsforslag:
Det er litt uklart fra oppgaveteksten om dato skal gjelde for
kombinasjonen av person, sertifikat og kjøretøy, eller om det gjelder
for sertifikatet selv (siden order “sertifikat” kan enten brukes om
entieten Sertifikat, eller om relasjonen mellom de tre entietene). I
første tilfelle må dato settes på relasjonen, slik som i modellen under,
mens i sistnevnte tilfelle må datoen settes på SERTIFIKAT
.
Begge antalgelsene gir mening, så begge er riktige under hver sin
antagelse.
Merk at dette har noe å si, ettersom mange personer kan ha samme
sertifikat (altså én entitet av entitets-typen SERTIFIKAT
),
så om man setter dato på relasjonen vil datoen kunne være forskjellig
fra person til person selvom sertifikatet er det samme, mens dersom
datoen settes på SERTIFIKAT
vil alle som har samme
sertifikat også ha samme dato.
![](sertifikat.png)
Realisering
Følg stegene i kapittel 9.1 (side 320-326) for å lage en relasjonell modell/et relasjons databaseskjema fra ER-diagrammene/modellen som er oppgitt.
Oppgave 3 - Varer og ingredienser
Forrige uke lagde du en modell for et offentlig organ som skal holde styr på varer og hvem som må kontaktes ved funn av farlige ingredienser i en vare. Det er nå på tide å lage et relasjonsskjema som realiserer denne modellen. Altså, realiser følgende modell:
![](firma.png)
Løsningsforslag:
Vi starter med å realisere (de ikke-svake) entitetene, men dropper utledbare attributter og utsetter flerverdi-attributter:
Firma(regnr, navn, postkode, gateadresse)
Vare(strekkode, navn)
Ansatt(id, telefon, navn, tittel)
Her er {regnr}
eneste kandidatnøkkel for
Firma
og dermed også dens primærnøkkel. Tilsvarende blir
{strekkode}
kandidatnøkkel og primærnøkkel for
Vare
. Ansatt
har derimot to kandidatnøkler,
{id}
og {telefon}
og vi velger da
{id}
som primærnøkkel.
Videre realiserer vi den svake entiteten AVDELING
:
Avdeling(navn, firma)
hvor {navn, firma}
er kandidat- og primærnøkkel. Videre
er Avdeling(firma)
en fremmenøkkel som refererer til
Firma(regnr)
.
Vi fortsetter å realisere relasjonene og starter med 1-1-relasjonen.
Ettersom alle avdelinger må ha minst én leder gir det mest mening å
legge denne relasjonen inn som attributt i Avdeling
. Altså
utvider vi Avdeling
til å bli:
Avdeling(navn, firma, leder)
hvor Avdeling(leder)
refererer til
Ansatt(id)
. Merk at {leder}
her blir en
kandidatnøkkel, siden den er unik (en ansatt kan kun være leder for én
avdeling) og den er aldri NULL
(hver avdeling må ha minst
én leder).
Vi fortsetter med 1-N-relasjoner, og realiserer HAR
som
attributt i relasjonen Ansatt
fremfor å lage helt ny
relasjon, ettersom alle ansatte må være på en avdeling:
Ansatt(id, telefon, navn, tittel, avdelingsnavn, firma, periode)
hvor Ansatt(avdeling, firma)
refererer til
Avdeling(navn, firma)
. Vi realiserer så N-M-relasjoner, som
alle må realiseres som egne relasjoner:
Ansvarlig_for(avdeling, firma, vare)
Selger(firma, vare, pris)
hvor Asvarlig_for(avdeling, firma)
refererer til
Avdeling(navn, firma)
, Ansvarlig_for(vare)
refererer til Vare(strekkode)
, Selger(firma)
refererer til Firma(regnr)
og Selger(vare)
refererer til Vare(strekkode)
. I Ansvarlig_for
er mengden av alle attributter kandidatnøklene, mens i
Selger
er det (firma, vare)
som utgjør
kandidatnøkkelen.
Det gjenstår å realiserer fler-verdi attributtene, og her har vi kun
Ingredienser
i VARE
:
Ingrediens(vare, ingrediens)
hvor Ingrediens(vare)
refererer til
Vare(strekkode)
og {vare, ingrediens}
er
kandidat- og primærnøkkelen.
Det endelige skjemaet blir altså:
Firma(regnr, navn, postkode, gateadresse)
Vare(strekkode, navn)
Avdeling(navn, firma, leder)
Ansatt(id, telefon, navn, tittel, avdelingsnavn, firma, periode)
Ansvarlig_for(avdeling, firma, vare)
Selger(firma, vare, pris)
Ingrediens(vare, ingrediens)
med nøkler som beskrevet over.
Oppgave 4 - Lån
Modeller først en ternær relasjon for å uttrykke at en person kan låne en bok fra et bibliotek i ER. Et lån har en startdato og en sluttdato. Sett passende attributter til hver entitet, og husk at alle entiteter skal ha en primærnøkkel (som kan bestå av ett eller flere attributter). Modellen skal i tillegg inneholde følgende informasjon: En person kan låne mange bøker fra ett bibliotek; en person kan låne en bok fra mange bibliotek; og et bibliotek kan låne en bok til mange personer. Realiser deretter denne modellen.
Løsningsforslag:
![](lan.png)
og realiseres til følgende skjema:
Person(persnr, navn)
Bibliotek(navn)
Bok(isbn, tittel)
Lån(person, bibliotek, bok, gyldigfra, gyldigtil)
med følgende kandidat-/primærnøkler:
Person(persnr)
Bibliotek(navn)
Bok(isbn)
Lån(person, bibliotek, bok)
og fremmednøkler:
Lån(person) -> Person(persnr)
Lån(bibliotek) -> Bibliotek(navn)
Lån(bok) -> Bok(isbn)
Oppgave 5 - Ekstraoppgave
Realiser modellene du laget i oppgave 1 og 2 over.
Løsningsforslag:
Oppgave 1 realisering
Film(id, navn)
Person(navn)
Skuespiller(film, person)
Regissør(film, person)
Sjanger(film, sjanger)
hvor vi har følgende kandidat-/primærnøkler:
Film(id)
Person(navn)
Skuespiller(film, person)
Regissør(film, person)
Sjanger(film, sjanger)
og følgende fremmednøkler:
Skuespiller(film) -> Film(id)
Skuespiller(person) -> Person(navn)
Regissør(film) -> Film(id)
Regissør(person) -> Person(navn)
Sjanger(film) -> Film(id)
Oppgave 2 realisering
Person(personid)
Sertifikat(sertifikatid)
Kjøretøy(kode)
Tok_sertifikat(person, sertifikat, kjøretøy, start, slutt)
med føldende kandidat-/primærnøkler:
Person(personid)
Sertifikat(sertifikatid)
Kjøretøy(kode)
Tok_sertifikat(person, kjøretøy)
og følgende fremmednøkler:
Tok_sertifikat(person) -> Person(personid)
Tok_sertifikat(sertifikat) -> Sertifikat(sertifikatid)
Tok_sertifikat(kjøretøy) -> Kjøretøy(kode)