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)