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.

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

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