Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet. Løsningsforslag

Like dokumenter
Høgskolen i Telemark EKSAMEN 6102 DATABASER Tid: Hjelpemidler: Vedlegg: Eksempeldata til oppgave 1

EKSAMEN 6102 / 6102N DATABASER

EKSAMEN DATABASER

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

Høgskolen i Telemark EKSAMEN 6102 DATABASER Tid: Hjelpemidler: Vedlegg: Eksempeldata til oppgave 1

EKSAMEN 6102 / 6102N DATABASER

EKSAMEN DATABASER

Sensorveiledning for IN2090 og INF desember :30 18:30 (4 timer)

Databaser: Relasjonsmodellen, del I

5602 DATABASER Bokmål/nynorsk. 17 (inkludert denne forsiden) Eksamensresultatene blir offentliggjort på Studentweb.

Repetisjon: Normalformer og SQL

SLUTTPRØVE 5602 DATABASER I (inkludert vedlegg og denne forsida) Vedlegg: A: Eksempeldata og B: Svarark til oppgave 4

SQL Structured Query Language. Definere tabeller Skranker Fylle tabeller med data

Integritetsregler i SQL. Primærnøkler

Høgskolen i Telemark EKSAMEN 6102 DATABASER Tid: Hjelpemidler: Vedlegg: Eksempeldata til oppgave 1

Høgskolen i Telemark EKSAMEN 6102 DATABASER 5602 DATABASER Tid: 9-13 (9-14 for konte-eksamen i 5602) Hjelpemidler:

UNIVERSITETET I OSLO

Integritetsregler i SQL

Datamodellering og databaser SQL, del 2

Oppgaver Oppgave a: Sett opp mulige relasjoner

Databaser. Relasjonsmodellen 1 Læreboka: Kap. 2 Relasjonsmodellen Faglærere: Tore Mallaug, Kjell Toft Hansen

Datamodellering og databaser SQL, del 2

UNIVERSITETET I OSLO

Datamodellering og databaser SQL, del 2

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Institutt for informatikk

Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

HØGSKOLEN I SØR-TRØNDELAG

1. Innføring i bruk av MySQL Query Browser

Løsningsforslag til eksamen i IN2090 Databaser og datamodellering og INF1300 Introduksjon til databaser 6. desember :30 18:30 (4 timer)

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

UNIVERSITETET I OSLO

svarforslag SLUTTEKSAMEN IBE211 Databaser, våren 2015

Databasedesign HVA? HVORDAN? E/R diagram. Begrepsmessig databasedesign. Logisk databasedesign. Fysisk databasedesign

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

1. SQL datadefinisjon og manipulering

Integritetsregler i SQL

Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

SQL og Mengdelære. Oracle, MySQL, Access, bruker forskjellige syntaks.

Oppgave 1 (Opprett en database og en tabell)

Miniverden og ER- modell

Dagens tema: Oppdateringsanomalier Normalformer

INF1300 Introduksjon til databaser

En lett innføring i foreninger (JOINs) i SQL

SQL 3: Opprette tabeller, datainnsetting og utsnitt

Normalisering. Hva er normalisering?

UNIVERSITETET I OSLO

Løsningsforslag maskindatabasen på Ifi SQL og normalisering

INF 329: Web-Teknologier. Dataimplementasjon. Fra Kapittel 11 i «Designing Data-Intensive Web Applications» Presentasjonsdato: 17/10/2004

INF1300 Introduksjon til databaser

Løsningsforslag eksamen i IN

Oppdateringsanomalier Normalformer

Skisse til løsning av eksamensoppgave i TDT4145 Datamodellering og databasesystemer

1. Relasjonsmodellen Kommentarer til læreboka

UNIVERSITETET I OSLO

EKSAMEN DATABASER OG WEB Et maskinskrevet notat på maksimalt 2 A4-sider, satt med enkel linjeavstand og skriftstørrelse 12 (eller større).

INF1300 Introduksjon til databaser

Løsningsskisse til Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

Datamodellering 101 En tenkt høgskoledatabase

Normalisering. Hva er normalisering?

EKSAMEN. Emne: Webprogrammering med PHP (kont.) Webprogrammering 1 (kont.) Eksamenstid:

Løsningsforslag for Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

Metaspråket for å beskrive grammatikk

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

UNIVERSITETET I OSLO

MySQL-database, php. Innhold. 8 MySQL-database, php. 8.1 Databasen MySQL

Institutt for datateknikk. Fag TDT4145 Datamodellering og databasesystemer Løsningsforslag til øving 3: Algebra og SQL

UNIVERSITETET I OSLO

9-14. Tid: Målform: Sidetall: Hjelpemidler: Ingen. Merknader: Vedlegg: en lapp og. Avdeling

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Det matematisk-naturvitenskapelige fakultet. Kontroller at oppgavesettet er komplett før du begynner å besvare det.

UNIVERSITETET I OSLO

Løsningsforlag for oblig 1, databaser 2010

Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

Relasjonsdatabasedesign

HØGSKOLEN I SØR-TRØNDELAG

Relasjonsdatabasedesign

Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

INF1300 SQL Structured Query Language del 1. Stoff som blir/ble forelest i oktober 2013

UNIVERSITETET I OSLO

Repetisjon: (nesten) alt du trenger å kunne om ORM og realisering

UNIVERSITETET I OSLO

Hvordan designe en ER-modell med MS-VISIO

Utvikling fra kjernen og ut

Spørsmålskompilering del 1

Oppgave 1 1. Spørring: Resultattabell: 2. Spørring: Resultattabell: 3. Spørring:

Relasjoner terminologi

Oppdateringsanomalier. Normalformer. Institutt for informatikk INF

SQL Introduksjonskurs. Oversikt

Oppgave 3 - normalisering

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Institutt for informatikk

UNIVERSITETET I OSLO

Databaser. Relasjonsmodellen 2 Læreboka: Kap. 2 Relasjonsmodellen

UNIVERSITETET I OSLO

Transkript:

1 Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Løsningsforslag Eksamen i emne INF115 Databaser og modellering Tirsdag 31. mai 2016 Tid: 9:00 12:00 Tillatte hjelpemidler: Ingen Oppgavesette består av 6 oppgaver på 7 sider. Vedlegg: Eksempeldata til oppgave 1 Viktige generelle råd og kommentarer: Kontroller at oppgavesettet er fullstendig. Les nøye gjennom hele oppgavesettet før du begynner å besvare de enkelte delspørsmålene. Det er viktig å holde seg til momenter som er nevnt i oppgaven, og ikke trekke inn andre aspekter. Du kan løse oppgavene i hvilken som helst rekkefølge. Dersom det er noen deler i en oppgave som du ikke får besvart, kan du likevel fortsette med de øvrige deloppgavene. Synes du at oppgaveteksten er uklar eller ufullstendig noe sted, må du lage dine egne presiseringer og angi disse i besvarelsen. Prosentsatsene ved hver oppgave angir omtrentlig vektlegging ved sensur (deloppgaver teller likt). Vektingen gir også en god pekepinn til hvor mye tid du bør sette av til hver oppgave. Prøv å svare på så mange spørsmål som mulig. Lykke til! Uwe Wolter

2 Oppgave 1 (30%) Introduksjon: Tabellene under er en del av databasen til et forsikringsselskap, der primærnøkler er understreket og fremmednøkler er merket med en stjerne: Kunde(KundeNr, FDato, Fornavn, Etternavn) Forsikring(ForsNr, KundeNr*, RegNr, RegAar, KmPrAar, ForsType, Bonus, AarsPremie) Skadesak(SaksNr, ForsNr*, RegDato, SkadeType) Kolonnene Fornavn, Etternavn, ForsType og SkadeType inneholder tekst, FDato og RegDato inneholder datoer, AarsPremie inneholder desimaltall (beløp), mens øvrige kolonner inneholder heltall. Tabellen Forsikring inneholder opplysninger om bilforsikringer, og kolonnen ForsType inneholder én av følgende tre verdier: Ansvar, Delkasko eller Kasko. Vedlegg inneholder eksempeldata til disse tabellene. Aktuelle SQL-funksjoner: CURDATE() gir ut dagens dato. YEAR trekker ut årstallet fra en dato, f.eks. gir YEAR( 2015-12-24 ) ut 2015. Oppgave 1-a (6%) Skriv en SQL-spørring som viser KundeNr og RegNr for alle forsikringer av type Kasko der årlig kjørelengde (KmPrAar) er over 20 000 km. Utskriften skal ordnes etter KundeNr. SELECT KundeNr, RegNr FROM Forsikring WHERE KmPrAar > 20000 AND ForsType = Kasko ORDER BY KundeNr; Oppgave 1-b (6%) Skriv en SQL-spørring som viser antall forsikringer av hver type (Ansvar, Delkasko og Kasko). Navngi kolonnene Forsikringstype og Antall. SELECT ForsType AS Forsikringtype, COUNT(*) AS Antall FROM Forsikring GROUP BY ForsType;

3 Oppgave 1-c (6%) Skriv en SQL-spørring som viser antall skadesaker for hver forsikring. Det holder å vise forsikringsnummer og antallet, men ta med samtlige forsikringer i utskriften selv om det ikke er registrert noen skadesaker på denne forsikringen. SELECT F.ForsNr, COUNT(S.SaksNr) AS Antall FROM Forsikring AS F LEFT OUTER JOIN Skadesak AS S ON F.ForsNr = S.ForsNr GROUP BY F.ForsNr; Oppgave 1-d (6%) Skriv SQL-kode som oppretter tabellen Forsikring med primærnøkler og fremmednøkler. Alle kolonner må alltid fylles ut. CREATE TABLE Forsikring ( ForsNr INT, KundeNr INT NOT NULL, RegNr CHAR(7) UNIQUE NOT NULL, RegAar INT NOT NULL, KmPrAar INT NOT NULL, ForsType VARCHAR(10) NOT NULL, Bonus INT, AarsPremie DECIMAL(8, 2), CONSTRAINT ForsikringPK PRIMARY KEY (ForsNr), CONSTRAINT ForsikringKundeFK FOREIGN KEY (KundeNr) REFERENCES Kunde(KundeNr) );

4 Oppgave 1-e (6%) Skriv SQL-kode for å registrere en ny skadesak for forsikringsnummer 2. Registreringsdato skal settes til dagens dato og skadetype til Kollisjon. Samtidig skal bonus for kunden settes ned med 10 prosentpoeng. START TRANSACTION; % This line is optional! INSERT INTO Skadesak(ForsNr, RegDato, SkadeType) VALUES (2, CURDATE(), Kollisjon ); UPDATE Forsikring SET Bonus = Bonus - 10 WHERE ForsNr = 2; COMMIT; Oppgave 2 (24%) Introduksjon: VB er et nystartet vikarbyrå i sterk vekst og har fått behov for et nytt informasjonssystem, og du skal foreslå en datamodell for selve databasen. Systemet skal ta vare på navnet på alle virksomhetene som tilbyr vikariater, og dessuten navn, epost og telefonnummer for én til tre kontaktpersoner ansatt i denne virksomheten. Det skal også lagres om virksomheten er en privat bedrift. Om hver jobbsøker skal navn, fødselsår, kjønn og telefon lagres. CV til jobbsøkerne skal lagres som PDF-filer utenfor databasen, men databasen skal ta vare på filnavnene. En virksomhet kan registrere vikariater. For hvert vikariat blir det registrert varighet (fradato og til-dato), lønn og en stillingsbetegnelse. Vikariatene blir dessuten merket med hvilken bransje de tilhører (f.eks. bank, undervisning, bygg og anlegg) og arbeidssted. Det er ønskelig at listen med bransjenavn skal kunne endres enkelt. Arbeidssted kan være angitt med en konkret gateadresse og et kommunenavn, eller bare ved et kommunenavn. Etter hvert som jobbsøkere starter opp i ulike vikariater ønsker VB å følge opp hvordan det går. Både jobbsøkere og virksomhetene blir spurt om å evaluere hvor fornøyde de er med hvert enkelt arbeidsforhold på en skala fra 1 til 10. Oppgave: Lag en datamodell (E/R-diagram) for vikarbyrået VB. Gjør dine egne forutsetninger hvis oppgaveteksten er uklar eller tvetydig. Tegner E/R-diagrammer som vist i læreboken! Det er ikke nødvendig å angi datatyper til attributene!

5 Hint: Det er lurt å utvikle designet stegvis i henhold til beskrivelsen over. Ikke vær bekymret om du ikke klarer å lage et komplett design. Vi vil ta hensyn til hvor mye du har fått til i henhold til beskrivelsen over. Se vedlagt scan av E/R-diagrammet. NB! Diagrammet under kan forenkles det er tilstrekkelig med et en-til-mange forhold mellom Jobbsøker og Vikariat (et vikariat blir kun besatt av n jobbsker). Dermed forsvinner behovet for koblingsentiteten Arbeidsforhold: Attributtene JobbskerEvaluering og VirksomhetEvaluering kan legges inn i Vikariat. Noen velger plassere disse I en egen entitet Evaluering som kobles til Vikariat med et en-til-en forhold, det er ogs helt ok. Oppgave 3 (8%) Oppgave 3-a (2%) Oversett følgende uttrykk i relasjonsalgebra til en SQL-spørring. π KundeNr (σ SkadeT ype= T yveri,f orst ype= Kasko (Skadesak Skadesak.F orsnr=f orsikring.f orsnrf orsikring)) SELECT KundeNr FROM Skadesak, Forsikring WHERE Skadesak.ForsNr = Forsikring.ForsNr AND SkadeType = Tyveri AND ForsType = Kasko Oppgave 3-b (2%) Gi et annet uttrykk i relasjonsalgebra som er ekvivalent til uttrykket i deloppgave 3-a. Her er to ekvivalente uttrykk: π KundeNr (σ SkadeT ype= T yveri (σ F orst ype= Kasko (Skadesak Skadesak.F orsnr=f orsikring.f orsnrf orsikring))) π KundeNr (σ SkadeT ype= T yveri (Skadesak) Skadesak.F orsnr=f orsikring.f orsnrσ F orst ype= Kasko (F orsikring)) Oppgave 3-c (4%) Visualiser begge uttrykk som operatortre.

6 Her er de tre tilsvarende operatortrær: π KundeNr σ SkadeT ype= T yveri,f orst ype= Kasko Skadesak.F orsnr=f orsikring.f orsnr Skadesak F orsikring π KundeNr σ SkadeT ype= T yveri σ F orst ype= Kasko Skadesak.F orsnr=f orsikring.f orsnr Skadesak F orsikring π KundeNr Skadesak.F orsnr=f orsikring.f orsnr σ SkadeT ype= T yveri σ F orst ype= Kasko Skadesak F orsikring Oppgave 4 (16%) Introduksjon: til kunden, slik: Det er foreslått å utvide tabellen Kunde fra oppgave 1 med data om bostedet Kunde(KundeNr, FDato, Fornavn, Etternavn, KoNr, KoNavn, FyNr, FyNavn) Følgende er et eksempel på en rad i denne tabellen:

7 (1, 1988-07-17, Ola, Hansen, 0821, Bø, 08, Telemark ), Det betyr at kunde nr. 1 heter Ola Hansen. Han er født 17.07.1988 og bor i en kommune med nummer 0821 og navn Bø. Bø ligger i fylke med nummer 08 og navn Telemark. Oppgave: svar!) Forklar hva som er uheldig med denne tabellen. (Ikke mer enn 2 setninger som Skriv deretter ned funksjonelle avhengigheter, bestem kandidatnøkkel og utfør normalisering til BCNF. Vis primærnøkler og fremmednøkler i sluttresultatet. Gjør dine egne forutsetninger hvis oppgaveteksten er uklar. Begrunnelse: Foreslått løsning er uheldig fordi kommunenavn blir gjentatt for alle kunder som bor i samme kommune, og dessuten blir fylkesnavn gjentatt for alle kunder som tilhører samme kommune. Funksjonelle avhengigheter: KundeNr ALLE KOLONNER KoNr KoNavn KoNr FyNr FyNr FyNavn Kandidatnøkkel: KundeNr Resultat: Kunde(KundeNr, FDato, Fornavn, Etternavn, KoNr*) Kommune(KoNr, KoNavn, FyNr*) Fylke(FyNr, FyNavn)

8 Oppgave 5 (12%) I denne oppgaven skal dere svare på noen generelle spørsmål. Ikke skriv mer enn det som er nevnt i parenteser! Noen enklere flervalgsspørsmål finner dere i neste (og siste) oppgaven. 1. Beskriv to regler som blir brukt i regelbasert optimalisering. (3 setninger) (a) Skyv seleksjoner og projeksjoner nedover i treet hvis der er mulig. (b) Bytt om på likekoblinger for minske størrelsen på mellomresultater. (c) Bryt ned sammensatte seleksjoner i flere enkle. 2. Hva betyr tapsfri dekomposisjon av en tabell T i to tabeller T1 og T2? (1 setning) En oppdeling av tabell T i to tabeller T1 og T2 som er slik at likekoblingen mellom T1 og T2 git T tilbake. 3. Hva betyr horisontal og vertikal fragmentering av en tabell? (2 setninger) (a) Horisontal fragmentering: En tabell blir delt opp etter rader. (b) Vertikal fragmentering: En tabell blir delt opp etter kolonner. 4. Hva bør vi være obs på hvis vi bruker vertikal fragmentering? (1 setning) Primærnøkkelen må være med i alle fragmentene. 5. Nevn tre krav til et velformet XML-dokument. (3 setninger) (a) Dokumentet har nøyaktig ett rotelement. (b) Alle elementer har både et startmerke og et sluttmerke. (c) Elementer er nøstet korrekt. 6. Hvorfor stiller vi disse tre krav til XML-dokumenter? (1 setning) Kravene sikrer at vi kan representere XML-dokumenter som en tre. Oppgave 6 (10%) Denne oppgaven består av 10 flervalgsspørsmål. Hvert spørsmål har 4 svaralternativer. Kun 1 alternativ er riktig. Oppgi svar på formen: Spørsmål 1. a

9 Noen spørsmål henviser til konkrete databasetabeller fra oppgave 1. Det er da antatt at tabellene har innhold som vist i vedlegget. 1. Hvor mange biter trenger vi for å representere tre heksadesimale tall? (a) 3 (b) 6 (c) 12 (d) 16 2. Hvilket uttrykk betyr det samme som (KmPrAar >= 5000) AND (RegAar < 2000)? (a) (KmPrAar >= 5000) OR (RegAar < 2000) (b) (KmPrAar < 5000) OR (RegAar >= 2000) (c) NOT ((KmPrAar < 5000) OR (RegAar >= 2000)) (d) (KmPrAar > 5000) AND (RegAar <= 2000) 3. Hvilken tekst passer med (matcher) mønsteret a%b? (a) baba (b) abba (c) abab (d) baab 4. Hva er kravene til en fremmednøkkel? (a) Den må alltid referere til en kolonne i samme tabell. (b) Den kan ikke inneholde nullmerker. (c) Den kan ikke inneholde repetisjoner. (d) Den må enten være null, eller inneholde en verdi som finnes i tilhørende primærnøkkel. 5. Hva blir resultatet av spørringen SELECT MAX(Bonus) FROM Forsikring WHERE ForsType = Kasko? (a) (b) (c) (d) Én kolonne med verdiene 20, 50 og 70. Én kolonne med verdien 20. Én kolonne med verdien 50. Én kolonne med verdien 70. 6. Hvor mange rader gir spørringen (a) 4 (b) 5 SELECT * FROM Skadesak, Forsikring WHERE Skadesak.ForsNr = Forsikring.ForsNr?

10 (c) 6 (d) 20 7. Hvor mange rader gir spørringen (a) 4 (b) 5 (c) 6 (d) 20 SELECT * FROM Skadesak RIGHT OUTER JOIN Forsikring ON Skadesak.ForsNr = Forsikring.ForsNr? 8. Hvordan blir et en-til-mange forhold mellom entitetene A og B (kråkefot ved B) representert i databasen? (a) Det blir lagt til en fremmednøkkel i B. (b) Det blir opprettet en koblingstabell. (c) A og B blir slått sammen til én entitet. (d) Det blir lagt til fremmednøkler i både A og B. 9. Hva er en svak entitet? (a) En entitet som arver identifikator (primærnøkkel) fra en annen entitet. (b) En entitet som ikke blir en del av den ferdige databasen. (c) En entitet som bare bruker svake datatyper. (d) En entitet som bryter med 1NF. 10. Hva menes med at PHP brukes til å lage dynamiske nettsider? (a) Nettsidene inneholder animasjoner. (b) Nettsidene inneholder alltid nye opplysninger. (c) Nettsidene blir generert av et program for hver forespørsel. (d) Nettsidene er alltid oppdatert med aktuelle nyheter. Svar oppgave 6: 1 2 3 4 5 6 7 8 9 10 c c d d c b c a a c Vedlegg. Eksempeldata Tabellene under viser eksempeldata for databasen som brukes i oppgavene. Tabell Kunde

11 KundeNr FDato Fornavn Etternavn 1 1988-07-17 Ola Hansen 2 1991-11-04 Kari Mo 3 1970-02-28 Anette Lien Tabell Forsikring ForsNr KundeNr RegNr RegAar KmPrAar ForsType Bonus AarsPremie 1 1 LY12345 2012 22 000 Kasko 50 4 500.00 2 1 AD33445 1997 11 000 Ansvar 70 2 300.00 3 2 KT99887 2010 18 000 Kasko 20 7 800.00 4 3 PN29298 2010 25 000 Delkasko 50 5 200.00 Skadesak SaksNr ForsNr RegDato SkadeType 1 1 2014-02-10 Kollisjon 2 2 2014-12-16 Brannskade 3 2 2015-07-30 Kollisjon 4 2 2015-10-01 Tyveri 5 3 2015-10-30 Glassrute