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