Institutt for datateknikk og informasjonsvitskap Eksamensoppgåve i TDT4145 Datamodellering og databasesystemer Fagleg kontakt under eksamen: Svein Erik Bratsberg: 73550382 Eksamensdato: 12. august 2013 Eksamenstid (frå-til): 15:00 19:00 Hjelpemiddelkode/Tillatne hjelpemiddel: D Ingen trykte eller handskrivne hjelpemiddel tilletne. Bestemt, enkel kalkulator tillate. Annan informasjon: Målform/språk: Norsk nynorsk Sidetal: 5 Sidetal vedlegg: 0 Kontrollert av: Dato Sign. Merk! Studentane finn sensur i Studentweb. Har du spørsmål om sensuren må du kontakte instituttet ditt. Eksamenskontoret vil ikkje kunne svare på slike spørsmål.
Oppgåve 1 Datamodellar (20 %) Lag ein ER-modell (du kan bruke alle virkemiddel som er med i pensum) for følgjande situasjon: I hopprenn er det to omgangar. Det deltar hopparar som tildelast eit unikt startnummer for dette rennet. I første omgang starter hopparane i startnummer-rekkefølgje. I andre omgang deltar bare dei 30 beste hopparane etter første omgang. Disse hopparane starter i poengrekkefølgje, slik at hopparen som leder etter første omgang, hopper heilt til slutt. For kvar hoppar har vi eit unikt utøvarnummer, fornamn, etternamn, fødselsår og nasjonalitet. Eit hopp får ein poengsum som er summen av lengdepoeng og stilpoeng. Lengdepoenga reknast ut frå hoppets lengd og ein mengde parameter for den aktuelle bakken konstruksjonspunkt og meterverdi. Stilpoenga tildelast av 5 dommarar som kvar gir frå 0 til 20 poeng. Den lågaste og den høgaste poengsummen strykast. Summen av dei tre gjenståande dommarpoenga utgjør hoppets stilpoeng. Resultatlista for eit hopprenn ordnast på samla poengsum etter to hopp, slik at hopparen med høgast samla poengsum vinner. Eit hopprenn har 5 oppnemnte dommarar som har eit unikt dommarnummer, fornamn, etternamn og nasjonalitet. For å kunne gjøre statistiske analysar på dommarprestasjonar, skal alle dommarpoengsummer lagrast. I tillegg til hopplengd og stilpoeng tildelast kvart hopp ein status som kan ta verdiane ståande, fall, DNS (Did Not Start) og DSQ (DiSQualified). Eit hopprenn arrangerast i ein bestemt hoppbakke som har ein unik FIS-bakke-ID, namn, by, land, bakkestørrelse (HS Hill Size), konstruksjonspunkt (K-punkt), meterverdi og bakketype. Den lengste hopplengda som er oppnådd i bakken registrerast som bakkerekord. I samband med bakkerekord registrerast alle hopparar som har oppnådd denne lengda, og dato det skjedde for kvar hoppar. Hoppbakkar delast inn i bakketypar etter bakkestørrelse: Liten bakke (HS under 50 meter) Mellombakke (HS 50-84 meter) Normalbakke (HS 85-109 meter) Stor bakke (HS 110-184 meter) Skiflygingsbakke (HS over 184 meter) Lengdepoenga reknast ut ved at bakkens K-punkt brukast som tabellpunkt. Ei hopplengd tilsvarande K-punktet gir 60 poeng. Forskjellen mellom hoppets målte lengd og K-punkt-lengda multipliserast med bakkens meterverdi og trekkast frå/leggast til dei 60 poenga. Gjør kort greie for eventuelle føresetnader som du finner det nødvendig å gjøre. Side 2 av 5
Oppgåve 2 Relasjonsalgebra og SQL (20 %) Ta utgangspunkt i følgjande relasjonsdatabase (primærnøklar er understreka) for ein enkel bedriftsdatabase: Person(PID, Name, BirthYear, DepartmentID, RoomNo, DeskNo) DepartmentID er framandnøkkel mot Department-tabellen. Attributtet kan ikkje ha NULL-verdi. RoomNo, DeskNo er framandnøkkel mot Desk-tabellen. Begge attributta kan ha NULL-verdi. Department(DID, Name, LeaderID) LeaderID er framandnøkkel mot Person-tabellen. Attributtet kan ikkje ha NULL-verdi. Room(RoomNo, Type, Area, DepartmentID) DepartmentID er framandnøkkel mot Department-tabellen. Attributtet kan ikkje ha NULL-verdi Desk(No, RoomNo, PhoneNo) RoomNo er framandnøkkel mot Room-tabellen. Attributtet kan ikkje ha NULL-verdi. PhoneNo er framandnøkkel mot Phone-tabellen. Attributtet kan ha NULL-verdi. Phone(PhoneNo, RoomNo) RoomNo er framandnøkkel mot Room-tabellen. Attributtet kan ha NULL-verdi. Relasjonsalgebra kan formulerast som tekst eller grafar. Viss du beherskar begge notasjonane liker vi betre at du svarer med grafar, men du blir ikkje trekt for å svare med tekst. a) (4 %) Lag eit ER-diagram som i størst mulig grad samsvarer med relasjonsskjemaet. Gjør greie for eventuelle føresetnader du finner det nødvendig å gjøre. b) (4 %) Lag ei spørjing i relasjonsalgebra som finner PID og Name for alle personer som har arbeidsplass på rom som disponerast av avdelinga (department) som heter Økonomi. c) (4 %) Skriv ei SQL-setning som oppdaterer leiaren for økonomiavdelinga til Ole Hansen som har PID = 100. Du kan føresetje at denne personen finnast i Person-tabellen. d) (4 %) Skriv ei SQL-setning som lager eit view med alle tilsette i økonomiavdelinga. I dette viewet skal du ta med PID, Name og RoomNo. e) (4 %) Lag ei spørjing i SQL som finner alle rom der meir enn 4 personar har sin arbeidsplass. Du skal ta med RoomNo og talet på personar i resultatet. Resultatet skal være sortert etter talet på personar i fallande rekkefølgje. Side 3 av 5
Oppgåve 3 Teori (20 %) a) (5 %) Ta utgangspunkt i tabellen Athlete(ID, Name, BirthYear, Sex, Club, Region, StreetAddress, PostalCode, City) der F = { ID Name, BirthYear, Sex, Club, StreetAddress, PostalCode; Club Region; PostalCode City } er dei funksjonelle avhengigheitene som gjelder. Føresett at tabellen oppfyller krava til første normalform (1NF). Bestem den høgaste normalforma som oppfyllast av tabellen. Du må grunngi svaret. b) (7,5 %) Føresett tabellen Athlete og funksjonelle avhengigheiter som forklara i oppgåve a. Dekomponer denne tabellen slik at du får ein dekomponering med komponent-tabellar på så høg normalform som mulig. Vurder kvaliteten til den dekomponeringa du kommer fram til. c) (7,5 %) Føresett at F = { A B, CD A }. Fyll inn verdiar i alle dei tomme rutene i tabellen under. Dersom ei rute kan ha ein verdi som ikkje er eintydig bestemt, kan du bruke b ij (i = radnummer og j = kolonnenummer) som symbol for denne verdien. Oppgåve 4 Lagring, indeksar, queryutføyring (20 %) Vi har ein tabell for å lagre øvingsgodkjenning: Exercise (studno, exerno, status) For kvar av SQL-setningane nedanfor, foreslå korleis du vil lagre og indeksere tabellen (heapfiler, B+-trær, hashing). Føresett for kvar SQL-setning at denne typen setning er mest brukt. Viss du gjør bruk av ein indeks, fortell kva søkenøkkelen for indeksen er. a) INSERT INTO Exercise VALUES (123456, 5,'OK'); b) SELECT studno FROM Exercise WHERE status='ok'; c) SELECT studno FROM Exercise WHERE exerno=4 AND status='ok'; d) SELECT count(*) FROM Exercise WHERE studno=123456 AND status='ok'; Side 4 av 5
e) SELECT studno FROM Exercise GROUP BY studno HAVING count(*) > (SELECT count(*) FROM Exercise WHERE studno=123456 AND status='ok'); Forklar kvart svar og forklar kva for føresetnadar du evt. gjør. Oppgåve 5 Transaksjonar (10 %) a) Vis to motiverande eksempel for at vi innfører transaksjonar. b) SQL har 4 isolasjonsnivå for transaksjonar. Forklar eigenskapane til dei forskjellige nivåa. Oppgåve 6 Join (10 %) Føresett følgjande to tabellar: Fakultet(faknavn,faknr,dekanus) Student(studno,snavn,faknr) Føresett følgjande SQL query: SELECT snavn FROM Fakultet f, Student s WHERE f.faknr=s.fakr AND f.faknavn='ime'; Føresett Fakultet har 500 postar lagra i 10 diskblokkar og at Student har 80000 postar lagra i 2000 blokkar. Føresett vidare at du har plass til 8 blokkar samstundes i bufferet. Rekn ut talet av I/Oar for queriet ved bruk av følgjande joinmetodar: a) Nested loop join. b) Sort-merge join. Side 5 av 5