Eksamensoppgaver. Og for all del: Vær kritiske til de løsningsforslagene vi presenterer! Vi påstår ikke at de er optimale.

Størrelse: px
Begynne med side:

Download "Eksamensoppgaver. Og for all del: Vær kritiske til de løsningsforslagene vi presenterer! Vi påstår ikke at de er optimale."

Transkript

1 Eksamensoppgaver Under følger eksempler på tre eksamensoppgaver innen modellering og tre innen relasjonsdatabaser samt løsningsforslag. Merk at det er nettopp dette løsningsforslagene er: Forslag til løsninger. Særlig modelleringsoppgaver kan ha flere vidt forskjellige og likevel likeverdige løsninger. Det frarådes på det sterkeste at dere nøyer dere med å lese teksten på eksamenssettene og deretter lese gjennom løsningsforslagene; dere blir ikke bedre til å besvare eksamensoppgaver av det. Eneste måte å bli bedre på, er å først prøve seg på eksamenssettene, og deretter se på løsningsforslagene og sammenlikne med hva dere selv har gjort. Og for all del: Vær kritiske til de løsningsforslagene vi presenterer! Vi påstår ikke at de er optimale. Innhold Eksamensoppgaver... 1 Eksamenssett 1: Julegaver modellering... 2 Eksamenssett 2: Konsulentdatabase SQL og normalisering... 4 Eksamenssett 3: Maskindatabasen på Ifi modellering... 8 Eksamenssett 4: Maskindatabasen på Ifi SQL og normalisering Eksamenssett 5: Matoppskrifter modellering Eksamenssett 6: Matoppskrifter SQL og normalisering Løsningsforslag julegaver Løsningsforslag konsulentdatabase Løsningsforslag maskindatabasen på Ifi modellering versjon Løsningsforslag maskindatabasen på Ifi modellering versjon Løsningsforslag maskindatabasen på Ifi SQL og normalisering Løsningsforslag matoppskrifter modellering Løsningsforslag matoppskrifter SQL og normalisering

2 Eksamenssett 1: Julegaver modellering (Fra eksamensoppgave i IN111 Filbehandling 1985) Etter å ha mottatt hauger av klagebrev på julegavetildelingen i fjor (tante Laura fikk en tube barberkrem, og onkel Fredrik, som er 72 år og innbarket ungkar, fikk tre sett strømpebukser, samt et abonnement på "Det nye"), har Julenissen bestemt seg for å modernisere virksomheten og ta i bruk et databasesystem. Julenissen har en sentral gavekatalog hvor alle tenkelige varer er listet opp. Hver gaveartikkel har et entydig gavenummer (f.eks. betyr GR grått silkeslips, 110cm). Jullenissen ønsker å lagre en beskrivelse av hver gaveartikkel og synes vi bør sette av 40 tegn til dette. Gavene blir lagt på lager når de er kjøpt. (Det er 7 lagre og de 7 små dvergene er lagersjef for hvert sitt.) Julenissen vil vite på hvilket lager gaven ligger, hvor mange eksemplarer han har på lager, navnet på produsenten, produsentens telefonnummer, og produsentens banknummer eller -numre (hvis han har noen, da). Julenissen har god hjelp av lederreinen Rudolf når han skal dele ut gavene. Rudolf vet alltid nøyaktig på meteren hvor langt han er fra Nordpolen og hvor langt han er fra null-meridianen. I tillegg til denne lengde- og breddebeskrivelsen har Julenissen notert seg i hvilken etasje hvert sted han skal besøke ligger. Disse tre tallene bestemmer besøksstedene entydig. For hvert sted har han en liste over navnene til dem som bor der. Julenissen bruker helst bare fornavn, men må av og til ta med kjælenavn o.l. for å kunne skille alle med samme bopel. Julenissen mener han kan klare seg med 20 tegn totalt til navnet. Hovedhensikten med databasesystemet er å holde rede på hvem som får hva av hvem. Julenissen er nemlig så beskjeden at han som oftest setter en merkelapp med navnet på en giver på presangene. Julenissen mener derfor at systemet må holde rede på hver eneste presang som skal deles ut. Han vil vite hva som blir gitt, hvor mange eksemplarer (f.eks. 6 kjøkkenglass), hvem som får presangen og hvem som har gitt den. Dessuten vil han ta vare på årstallet for å tidfeste hvilken jul dette gjelder. Julenissen ønsker under planleggingen av gaveutdelingen å kunne få svar på hvilke gaver en gitt person kommer til å få, og hvilke gaver en gitt person kommer til å gi. Ved begge disse spørsmålene vil han også ha svar på hva de henholdsvis fikk og ga i fjor. Etter jul skal han lage oversikter over hvem som fikk en gitt gave og totaloversikter over hvor mange eksemplarer av hver gave han har delt ut. 2

3 Oppgave 1 Hvordan ser datamodellen for julenissens databasesystem ut? Oppgave 2 Grupper datamodellen til et relasjonsdatabaseskjema. For hver relasjon, angi navn på relasjonen og attributtnavn. Marker primærnøkler med én understrekning og eventuelle andre kandidatnøkler med to. Angi fremmednøkler. (Ikke bruk SQL i denne delen, og ikke ta med datatyper. Undertrykte begreper skal ikke tas med.) (Slutt eksamenssett 1) 3

4 Eksamenssett 2: Konsulentdatabase SQL og normalisering (Fra eksamensoppgave II i INF1300 Introduksjon til databaser 2007) Vi skal se på en database som brukes av et datakonsulentfirma til å registrere kunder, prosjekter, ansatte og deres timeforbruk fordelt på prosjekter. Firmaet er organisert i tre avdelinger: Salg, Prosjekt og Administrasjon med hver sin avdelingsleder. Øverste sjef har tittelen «Direktør». Salg er den minste avdelingen. Den har to oppgaver: Salg av prosjekter rettet mot en bestemt kunde og generell markedsføring. Prosjekt er den klart største avdelingen. Det er der prosjektene utføres. Alle ansatte har en entydig ansattkode på fire tegn som vanligvis består av de to første bokstavene i for- og etternavnet til den ansatte. Dette gjør det lett å huske ansattkodene, og de brukes i all skriftlig intern kommunikasjon i firmaet. Hver ansatt er ansatt i én avdeling. Avdelingslederne er ansatt i den avdelingen de leder; direktøren er ansatt i administrasjonen. Om alle ansatte registrerer vi navn, avdeling og antall avspaseringstimer de har til gode. Prosjektene har kode og navn, og de har alltid en prosjektleder og en kunde som har bestilt prosjektet. For å få samme håndtering av interne og eksterne prosjekter, er avdelingene lagt inn i kunderegisteret. Alle kunder er tildelt en ansvarlig selger. Dessuten registrerer vi siste uke de har fått faktura for. Alle ansatte må føre timelister. Så snart som mulig leverer de timelisten for forrige uke til avdelingslederen som kontrollerer og godkjenner listen før den leveres til administrasjonen for registrering. Avdelingslederne leverer sine timelister til direktøren, som leverer sin timeliste til internrevisoren, en vanlig ansatt i administrasjonen. Dersom den som normalt kontrollerer en timeliste er fraværende, leveres listen til en annen avdelingsleder eller til internrevisoren. Arbeidstiden er åtte timer pr dag, hvorav en halvtime går bort til matpause. Dermed blir netto arbeidstid 7,5 timer pr. dag. Absolutt alle timer på timelistene skal knyttes opp til et prosjekt. Prosjektene har entydige 8-tegns prosjektkoder. Første tegn avgjør hvilken type prosjekt det er. Det er mange prosjekttyper, men vi skal hovedsakelig få bruk for disse fire: K prosjekt som faktureres til kunder S salgsprosjekt (timer brukt på et salg/anbud) M markedsføringsprosjekt (timer brukt på markedsføring) I internprosjekt (timer brukt på kurs, møter, føring av timelister, o.l.) Dessuten har vi et spesielt prosjekt med prosjektkode A som brukes for å registrere avspasering av overtid. 4

5 Fysisk er timelisten et ferdig trykket skjema. Øverst er det ett felt for ansattkoden og ett for ukenummeret. Ukenummeret er et sekssifret tall der de fire første sifrene er årstallet og de to siste ukenummeret. I tillegg er det et felt for ansattkoden til den som kontrollerer listen. Resten av skjemaet er en tabell med følgende kolonner: Lnr 2-sifret linjenummer Dag ett siffer (1 = mandag, 2 = tirsdag,..., 7 = søndag) Prosjekt 8-tegns prosjektkode Timer antall timer brukt på prosjektet (3 siffer, se nedenfor) O-kode 1-tegns overtidskode som har 3 lovlige verdier: o <blank> normaltimer (ikke overtid) o A overtid som skal avspaseres o B overtid det skal betales overtidsgodtgjørelse for Timer lagres som et 3-sifret heltall der siste siffer egentlig står bak komma. Eksempel: Verdien 75 betyr 7,5 timer. Vær også oppmerksom på følgende regler: Hver arbeidsdag skal det registreres nøyaktig 7,5 normaltimer Lørdager og helgedager skal det bare registreres overtid B-overtid kan bare registreres på K-prosjekter Avdelingsledere og direktøren kan ikke ha B-overtid Avspasering (prosjektkode A) føres alltid som normaltimer En uke hvor alle har fått sine timelister registrert, kalles fakturerbar. Ansattes timelister registeres kronologisk, så alle uker før en fakturerbar uke er selv fakturerbare. 5

6 Oversikt over datastrukturen (Tabellnavn og attributter) Kunde Kundenr integer K-navn varchar(40) Salgskontakt char(4) SistFakturert integer Prosjekt P-kode P-navn P-leder Kundenr char(8) varchar(40) char(4) integer Avdeling AvdNavn varchar(15) Leder char(4) Ansatt Anskode char(4) Navn varchar(40) Avdeling varchar(15) Flexikonto integer Timeliste Anskode char(4) Uke integer Kontrollør char(4) Timelistelinje Anskode char(4) Uke integer Lnr integer Dag integer Prosjekt char(8) Timer integer O-kode char(1) Merk: NULL er ikke tillatt i noe attributt 6

7 Oppgave 1 Skriv SQL-kode for å definere tabellen Timeliste. Ikke glem primær- og fremmednøkler! Oppgave 2 Anta at uttrykket X%Y i din dialekt av SQL gir deg resten når du dividerer heltallet X med heltallet Y. Bruk dette til å finne ansattkode, ukenummer og linjenummer på alle timelistelinjer hvor siste siffer i Timer hverken er 0 eller 5. Oppgave 3 Finn ansattkode, ukenummer og linjenummer på alle timelistelinjer hvor avspasering ikke er ført som normaltimer, avspaseringskode B er ført på et prosjekt hvor prosjektkoden ikke begynner med K, eller det er ført normaltimer på en lørdag eller søndag. Oppgave 4 Finn alle registrerte kombinasjoner av ansattkode, ukenummer og dagnummer hvor summen av normaltimer hverken er 0 eller 7,5 timer. Oppgave 5 Finn prosentvis fordeling av timer brukt på salg, markedsføring og annet i salgsavdelingen i Oppgave 6 Skriv en UPDATE-setning som for en gitt uke oppdaterer attributtet Flexikonto for alle ansatte (dvs. A-overtid legges til og avspasering trekkes fra den forrige verdien i attributtet, i henhold til innlevert timeliste for uken). Oppgave 7 Du skal lage datagrunnlaget for fakturering av en kunde: Fra kunden sist ble fakturert til og med siste fakturerbare uke skal du lage en liste med navn på prosjekter og konsulenter (personer i Prosjekt som har ført timer på prosjektene) og antall timer hver konsulent har arbeidet på prosjektet i fakturaperioden. Sorter listen på prosjektkode og deretter på synkende timetall. (Du kan gå ut fra at fakturaperioden ikke inneholder uker fra to forskjellige år.) Oppgave 8 Hvordan kan du enkelt utvide løsningen din av oppgave 7 til å lage fakturagrunnlag for alle kundene? (Du trenger ikke skrive SQL-kode.) Oppgave 9 Du skal denormalisere datastrukturen ved å slå sammen (joine) tabellene Kunde og Prosjekt. Hvilke attributter får den nye tabellen, og hva blir primærnøkkel i den? Hvilken normalform har den nye tabellen (begrunn svaret)? (Slutt eksamenssett 2) 7

8 Eksamenssett 3: Maskindatabasen på Ifi modellering (Fra eksamensoppgave I i INF1300 Introduksjon til databaser 2008) Ifi har mye datautstyr, og mer skal det bli. Når vi flytter inn i nytt hus om snaut to år, skal det aller meste av utstyret fornyes og registreres i en utstyrsdatabase. Planlegging av denne databasen må starte nå. Grunnet mange andre arbeidsoppgaver og forestående permisjon, er driftsavdelingens kapasitet til å drive slik egenutvikling redusert. Derfor blir det din oppgave å designe denne databasen. Utstyret som skal registreres, er alt datautstyr pluss alt utstyr som har serienummer og som er lett å omsette, f.eks. prosjektører og mobiltelefoner. Datautstyr er i all hovedsak maskiner og skjermer. Tastatur, mus og ekstrabatteri til bærbare maskiner regnes som rekvisita og skal ikke registreres, mens dockingstasjoner til bærbare maskiner skal legges inn i databasen. Maskiner er mangeartet. De dekker alt fra små, bærbare maskiner opp til store filtjenere som står på spesielle maskinrom. Enkelte maskiner har tilleggsutstyr, f.eks. dockingstasjon til bærbare, og det er viktig at databasen klarer å holde styr på hvilket tilleggsutstyr som til enhver tid hører til en gitt maskin. Legg i denne sammenheng merke til at maskiner slett ikke trenger å ha tilleggsutstyr, og for de som har det, vet vi i utgangspunktet ikke hvor mange ulike deler det er snakk om. Dessverre har ikke alt utstyr som skal inn i databasen et unikt serienummer. F.eks. er ikke alle skjermer fra Dell utstyrt med serienummer. Oppgave 1 Lag et forslag til hvordan alle de ulike utstyrstypene skal representeres. Ifi har et vedtatt tildelingsregime for utstyr. I korte trekk går det ut på at Ifi forplikter seg til å utstyre alle ansatte med én, og bare én, arbeidsplassmaskin. Sagt på en annen måte: Alle ansatte skal disponere en maskin, og ingen skal dele maskin. En normal arbeidsplass er en bærbar maskin med ekstern skjerm og dockingstasjon, men ikke alle har ekstern skjerm og dockingstasjon. Det er også mulig å ha en vanlig stasjonær maskin som arbeidsplassmaskin. De som ønsker utstyr utover dette, må selv sørge for finansiering, men da kan de kjøpe så mye utstyr som de har penger til. Ifi vil sørge for driften. Noen ansatte arbeider deltid, typisk en dag i uken. Disse har gjerne tilgang til et kontor som de deler med andre deltidsansatte som er der på andre ukedager. Hvis et slikt kontor har en stasjonær maskin, regnes den som disponert av Ifi sentralt. Databasen må altså lagre finansieringskilden for alt registrert utstyr. Ifi/RU (Ressursutvalget ved Ifi) er den største kilden. Andre kilder er prosjektmidler (i så fall må prosjektet nevnes med navn), faggruppemidler (faggruppene har egne navn), personlige tiltak (dvs. Midler disponert av enkeltpersoner) m.fl. Videre er det viktig at databasen sikrer at hver enkelt person bare får én arbeidsplassmaskin finansiert av Ifi/RU. De kan imidlertid ha andre maskiner finansiert av Ifi/RU, f.eks. tungregnetjenere, tjenere for ytingsmålinger på databaser o.a. Laboratorieutstyr og maskiner på terminalstuene regnes som disponert av instituttet sentralt, og de er derfor ikke underlagt dette tildelingsregimet, men også disse maskinene skal registreres i databasen. 8

9 Oppgave 2 Lag en ORM-modell som dekker plassering og finansiering av det utstyret som skal registreres i databasen. Pass på at modellen sikrer at Ifis tildelingsregime overholdes. Du trenger ikke ta med de representasjonsmåtene du beskrev i oppgave 1 i modellen din. For å kunne installere en maskin korrekt, må det lagres informasjon om hvilket operativsystem den skal kjøre, og på hvilket nivå den skal brukes (ansatt/master eller bachelor). Gitt operativsystem og nivå, skal det også automatisk dukke opp informasjon om hvor installasjonsimaget ligger og en liste over programmer som skal legges inn som en standardpakke. Oppgave 3 Utvid ORM-modellen din slik at databasen kan registrere brukernivå, operativsystem og innholdet i den standardpakken med programmer som skal legges inn. Dessverre hender det fra tid til annen at utstyr ryker slik at vi må ringe etter reparatør. På det aller meste utstyret har vi tre års service-avtale, men på en del av tjenerne har vi fem år. Databasen må altså kunne lagre startdato for serviceavtalen og lengden på serviceperioden. Startdatoen er den dagen utstyret kom inn i huset. Hver serviceavtale angir én av to måter utstyret kan repareres på. Den ene er at reparasjonen blir gjort på stedet ved å bytte ut den defekte delen. Dette kalles NBDOS (Next Business Day On Site). Dette gjelder bl.a. maskiner. Den andre varianten er at hele utstyrsenheten blir byttet ut med en ny eller reparert enhet av samme type. Dette kalles NBDNU (Next Business Day New Unit). Databasen må kunne lagre disse to verdiene, slik at den som feilmelder utstyr kan stille de rette kravene overfor supporttjenesten hos leverandørene. De har dessverre ikke alltid helt oversikt over hva slags avtaler de har med oss. En del av utstyret er av veldig god kvalitet og går uten feil helt til det blir byttet ut med noe nytt. Noe utstyr må ha en eller to reparasjoner i driftstiden sin, og av og til støter vi på skikkelige mandagseksemplarer. Slike maskiner må repareres mange ganger, ofte for den samme feilen. Ikke sjelden må driftsavdelingen feilmelde en maskin samme dag den er forsøkt reparert. Dog blir det aldri utført mer enn en reparasjon pr maskin pr dag. Databasen skal kunne lagre reparasjonshistorikk, d.v.s. alle reparasjoner utført på en gitt utstyrsenhet, og det gjelder ikke bare maskiner. For hver slik reparasjon skal det lagres opplysninger om hvem som meldte feilen, feilsymptom, reparasjonsreferansenummer (som vi får oppgitt av supporttelefonen hos de ulike leverandørene), datoen feilen ble reparert, og om dette løste problemet. Oppgave 4 Utvid ORM-modellen din slik at databasen kan registrere informasjon om pågående og avsluttede reparasjoner. Det er ganske mange som er interesserte i opplysninger om utstyr som blir kjøpt inn for norske skattepenger. Riksrevisjonen med Jørgen Kosmo i spissen krever at UiO har rutiner som sikrer at alle innkjøp skjer i samsvar med gjeldende avtaler og, for UiOs del, på billigste måte. For å kunne etterprøve at Ifi holder seg til regelverket, må databasen kunne lagre opplysninger om ordrenummer og fakturanummer. Sammenhengen er at et ordrenummer omfatter mange utstyrsenheter. En gitt ordre blir av og til levert i flere omganger, og da blir det en 9

10 faktura (med eget fakturanummer) for hver dellevering. Hver faktura består normalt av flere linjer, og noen ganger må selv fakturalinjer splittes opp fordi de skal belastes mer enn én konto i universitetsregnskapet. Et typisk eksempel er kjøp av 20 like maskiner hvor 15 kjøpes av Ifi/RU mens de resterende skal betales med ulike prosjekt- og gruppemidler. Oppgave 5 Utvid ORM-modellen din slik at databasen kan håndtere ordre og fakturaer. Legg vekt på å utforme modellen slik at det blir enkelt å lage et applikasjonsprogram som minimaliserer mengden av data som brukeren må registrere. Oppgave 6 Grupper ORM-modellen til et relasjonsdatabaseskjema. Resultatet skal presenteres som en liste av relasjoner. For hver relasjon skal du oppgi relasjonsnavnet og navn på hvert attributt. Du skal ikke angi representasjoner (datatyper) på attributtene og heller ikke bruke SQL. Attri-buttene i primærnøkkelen skal være understreket. Under-trykte referanserelasjoner skal ikke være med i listen. Beskriv til slutt tre fremmednøkler du har i databaseskjemaet ditt (hverken flere eller færre). (Slutt eksamenssett 3) 10

11 Eksamenssett 4: Maskindatabasen på Ifi SQL og normalsering (Fra eksamensoppgave II i INF1300 Introduksjon til databaser 2008) Del I Scenario: Timeregnskap I en organisasjon fører de ansatte hver dag ved arbeidsdagens slutt timer på de prosjektene de har arbeidet på i løpet av dagen. Til dette brukes følgende tabell (primærnøkkelen er understreket): Prosjekttimer(ansattID, prosjektid, dato, timer, status, godkjennerid) Ved begynnelsen av hver ny uke går enten prosjektleder eller en stedfortreder igjennom samtlige nye timeanførsler for sitt prosjekt. Nye timer kan gjenkjennes ved at de har "ny" i attributtet status (og "null" i attributtet godkjennerid). De timeanførslene som godkjennes, får endret status til "godkjent". For de timene som ikke godkjennes, settes status til "merknad", og den prosjektmedarbeideren som har ført timene, får en melding om å sjekke og eventuelt rette timeantallet. Uansett legges ansattid for den som gjennomgikk timelistene, inn i godkjennerid. Når timetallet for de postene som fikk en merknad er revurdert av medarbeideren, kan status bli satt til "attestert" av prosjektleder, og prosjektleders ansattid legges i godkjennerid. Det er bare prosjektleder selv som kan endre status på de postene som har fått en merknad. Dette betyr at prosjektid, dato og status sammen bestemmer verdien i godkjennerid. Oppgave 1 (10%) Oppgave 2 (15%) Bruk SQL til å lage en liste over prosjekttimer med status "merknad". Hver linje skal bestå av prosjektid, ansattid, dato og antall timer. Sorter listen på prosjektid og ansattid. Angi hvilke funksjonelle avhengigheter (FDer) som gjelder i Prosjekttimer, og gi et begrunnet svar på hvilken normalform tabellen har. Del 2 Scenario: Maskindatabasen på Ifi Det finnes mange mulige løsninger på hvordan maskindatabasen skal utformes. Vi skal her ta utgangspunkt i én mulig løsning og se på noen av de tabellene som inngår i denne løsningen: Leverandør(navn, adresse, e-post, sentralbord, supporttelefon) Ordre(leverandør, ordrenr, dato) Ordrelinje(leverandør, ordrenr, linjenr, varenr, antall) Faktura(leverandør, fakturanr, ordrenr, leveringsdato, beløp, konto) 11

12 Fakturalinje(leverandør, fakturanr, linjenr, varenr, antall, stykkpris, konto) Detaljlinje(leverandør, fakturanr, linjenr, antall, konto) Her er primærnøklene understreket. Attributtene med navn konto sier hvilken konto i universitetsregnskapet som skal belastes. I Faktura skal konto alltid oppgis. I Fakturalinje skal konto bare oppgis hvis den er forskjellig fra konto i Faktura. Tabellen Detaljlinje brukes bare når deler av en fakturalinje skal belastes en annen konto enn resten av fakturalinjen. Husk at hver ordre kan bli oppfylt med flere delleveranser og at det er eksakt én faktura pr. delleveranse. Oppgave 3 (10%) Oppgave 4 (10%) Gå ut fra at både leverandør, fakturanr og konto har datatype VARCHAR(30). Definer tabellen Detaljlinje med SQL. Husk å definere primær- og fremmednøkler. Beskriv fremmednøkkelen fra Fakturalinje til Faktura og forklar hva databasehåndteringssystemet må gjøre for å håndheve den. De følgende oppgavene skal løses med SQL. Det er lov å bruke views. Oppgave 5 (10%) Oppgave 6 (10%) Oppgave 7 (15%) Oppgave 8 (20%) Lag en liste over navn og e-postadresse på leverandører og det totale beløp de har fakturert for i år. Sorter listen slik at de som har har solgt mest, kommer først. For en gitt faktura, kontroller at totalbeløpet på fakturaen stemmer med det som er oppgitt på fakturalinjene. Skriv ut differansen mellom fakturaens totalbeløp og det beløpet fakturalinjene indikerer hvis tallene ikke stemmer overens. Lag en liste over ordre som har minst en delleveranse, men hvor ikke hele ordren er levert. For en gitt konto, finn ut hvor mye den er belastet for i år. (Slutt eksamenssett 4) 12

13 Eksamenssett 5: Matoppskrifter modellering (Fra eksamensoppgave I i INF1300 Introduksjon til databaser 2009) En hardbarket realist av den gamle skole med utallige laboratorietimer bak seg, har besluttet seg for å ta opp en ny hobby: matlaging. Hittil har hans største prestasjoner på området vært steking av speilegg og frosne hamburgere og oppvarming av ferdige porsjonspakninger til å sette rett inn i mikrobølgeovnen. På siste legekontroll fikk han imidlertid beskjed om at hamburgere med egg 4 dager i uken ble litt vel ensidig i lengden. Vår venn er en grundig person som gjør ting ordentlig og profesjonelt hvis de i det hele tatt skal gjøres. Følgelig gikk han til verket som en sann realist og begynte med å anskaffe nødvendig faglitteratur: Han kjøpte inn flere store kokebøker og var til og med så heldig å få overta Fogtdals matleksikon i 21 bind fra en gammel tante som nylig var kommet på pleiehjem. Klassikerne Hanna Winsnes (Man tager 2 halve Svinehoveder...) og Schønberg Erken ble heller ikke glemt. Han satte opp bokhylle på kjøkkenet, anskaffet en ringperm til oppskrifter fra aviser og liknende, skaffet seg noen pipetter, et litermål og en skikkelig vekt for måling av råvarer, og etter et nærmest ruinerende raid i ymse kjøkken- og interiørbutikker, var han klar til innsats. Da kom sjokket: Han, med sin erfaring fra laboratoriearbeid både innen organisk og uorganisk kjemi, forsto ikke den enkleste oppskrift! Hør bare: "I en halv kopp mel blandes et kryddermål allehånde." Mel visste han hva var. Allehånde var tydeligvis et krydder, men hvor mye er et kryddermål, og hvor stor er en kopp? Det gikk minst 15 av hans små kaffekopper i den største tekoppen hans. Dette var høyst uvitenskapelig! Vår venn bestemte seg øyeblikkelig for å lage et lite informasjonssystem for å holde orden på nødvendige data om oppskrifter. (Det var akkurat plass til en Mac ved siden av mikrobølgeovnen.) For det første må systemet kunne gi svar på hvor mye alle enheter blir, omregnet til SI-mål 1. Eksempler: Hvor mange ml er et kryddermål? Eller en kopp? Hva skal termostaten stå på når oppskriften sier: "Stekes i middels varm ovn i minutter"? Dessuten er det greit å vite at et kryddermål er en 1/5 teskje og at dette faktum skrives slik i faglitteraturen: "1 krm = 1/5 ts". Dernest vil han gjerne ha et register over de oppskriftene han har i utklippsboken (ringpermen) og et erfaringsregister over de matrettene han har laget. 1 SI står for le Système international d'unités, eller Det internasjonale enhetssystemet; det er en videreføring av det metriske systemet. 13

14 Utklippene identifiseres med et løpenummer innenfor hver dato. Han vil lagre informasjon om hvem han har fått oppskriften fra og eventuelt hvilken avis den er klippet fra. Han vil også lagre hvilke ingredienser som inngår i hver rett og hvor lang tid han må regne med på å bruke for å lage retten. Han lagrer selvfølgelig rettens navn, og han bestemmer seg for at han vil ha mulighet for å skrive inn spesielle kommentarer og hint i forbindelse med retten i databasen. Dessuten vil han altså lagre sine erfaringer med de enkelte rettene. For de rettene som står i utklippsboken, er det for så vidt greit. For disse har han lagret en liste over alle ingrediensene. Det er litt verre med oppskrifter fra kokebøkene. Da må han skrive inn disse i databasen første gang han prøver dem. Problemet er hvordan disse oppskriftene skal identifiseres. Systemet med utklippsdatoen passer ikke inn her. På den annen side er det klønete å ha to forskjellige måter å referere til en rett på, avhengig av om oppskriften er fra en kokebok eller et utklipp. I erfaringsdatabasen må han selvfølgelig ha med datoen han lagde retten. Han vil også ha med nøyaktig mål på hver ingrediens og hvor lang tid de enkelte fasene tar. (Eksempel: For brød noterer han hevingstid for deigen, tid for heving etter at brødene er formet og steketid.) Dessuten er han svært opptatt av å vite hvilke kryddere han har brukt og hvor mye av hvert. Videre vil han kunne notere sine inntrykk av hvorvidt retten ble vellykket, og eventuelt hva som bør rettes på til neste gang. De gangene han lager mat til gjester, vil han også ta med informasjon om hvilke gjester han hadde og hvilke drikkevarer han serverte. Hensikten er å finne ut hva han serverte forrige gang han hadde en gjest på besøk. Slik håper han å unngå å servere det samme gang etter gang. Oppgave 1 (15%) Lag et forslag til hvordan de forskjellige typene oppskrifter skal representeres. Tegn tilhørende ORM-diagram. Oppgave 2 (20%) Lag en ORM-modell som beskriver innholdet i en oppskrift, dvs. ingredienser og fremgangsmåte. Oppgave 3 (25%) Lag en ORM-modell for erfaringsdatabasen, dvs. det som skal til for å beskrive faktiske forsøk på tilberedning av oppskrifter. Oppgave 4 (20%) Lag en ORM-modell for å holde rede på hvilke gjester som har vært invitert, når, og hvilke menyer som er blitt servert dem. 14

15 Oppgave 5 (5%) Lag en ORM-modell som beskriver forskjellige måleenheter, hvilken/hvilke notasjon(er) som brukes, og konverteringer mellom dem. Oppgave 6 (15%) Grupper ORM-modellen til et relasjonsdatabaseskjema. For hver relasjon, angi relasjonens navn og navnet til hvert attributt. Du skal ikke angi datatyper for attributtene, og ikke bruke SQL i denne oppgaven. Understrek primærnøklene. Undertrykkede relasjoner skal ikke være med i listen. Beskriv tre av fremmednøklene som gjelder i databaseskjemaet ditt (hverken flere eller færre). (Slutt eksamenssett 5) 15

16 Eksamenssett 6: Matoppskrifter SQL og normalisering (Fra eksamensoppgave II i INF1300 Introduksjon til databaser 2009) Kort sammendrag av scenariet fra første deleksamen: En hardbarket realist har laget et informasjonssystem for å holde rede på matoppskrifter og fra hvilke kokebøker de enkelte oppskriftene er hentet. For hver oppskrift er det en liste over de ingrediensene som inngår i oppskriften, hvor mye av hver ingrediens og hva slags måleenhet som er brukt. Dessuten inneholder informasjonssystemet hvilke gjester han har invitert og når, de menyene han har servert dem, hvilke retter/oppskrifter som inngikk i menyen, hvilke drikkevarer som ble servert til de enkelte rettene, og i hvilken rekkefølge de enkelte rettene ble servert. Det finnes mange mulige løsninger på hvordan en slik database skal utformes. Vi skal her ta utgangspunkt i én mulig (litt forenklet, og ikke perfekt) løsning og se på noen av de tabellene som inngår i denne løsningen: Oppskrift(oppskriftsid, tittel, fremgangsmåte, bokid, sidenr, boktittel) Ingrediensoversikt(oppskriftsid, ingrediens, mengde, måleenhet) Meny(menyid, menydato) Menylinje(menyid, rettnr, oppskriftsid, drikke) Gjesteliste(gjest, menydato) Her er primærnøklene understreket. I Meny er menydato kandidatnøkkel; det er altså slik at menyid bestemmer menydato entydig og menydato bestemmer menyid entydig fordi det aldri er to selskaper samme dag. I Oppskrift bestemmer bokid attributtet boktittel entydig. Fremmednøkler er angitt ved likelydende attributtnavn; f.eks. er oppskriftsid i Ingrediensoversikt fremmednøkkel til oppskriftsid i Oppskrift. Oppgave 1 (vekt 10%) Gå ut fra at både menyid, rettnr og oppskriftsid har datatype INTEGER, mens drikke har datatype VARCHAR(30). Definer tabellen Menylinje med SQL. Husk å definere primær- og fremmednøkler. Oppgave 2 (vekt 15%) Angi hvilke funksjonelle avhengigheter (FDer) som gjelder i Oppskrift, og gi et begrunnet svar på hvilken normalform tabellen har. Oppgave 3 (vekt 5%) Beskriv fremmednøkkelen fra Gjesteliste til Meny og forklar hva databasehåndteringssystemet må gjøre for å håndheve den. 16

17 De følgende oppgavene skal løses med SQL. Det er lov å bruke views. Oppgave 4 (vekt 10%) Finn de oppskriftene som krever bruk av stekeovn. Disse oppskriftene har alle ordet «stekeovn» som del av teksten i attributtet fremgangsmåte. Skriv ut oppskriftsid og tittel på disse oppskriftene. Oppgave 5 (vekt 10%) Skriv ut menyen som ble servert 23. juni i år. For hver rett/oppskrift som ble servert, skal du skrive ut tittelen på retten og hvilken drikke som ble servert til den. Sorter utskriften slik at rettene kommer i den rekkefølgen de ble servert. SQLs datoformat er yyyy-mm-dd. Oppgave 6 (vekt 10%) Skriv ut for hver meny hvor mange retter den inneholder. Oppgave 7 (vekt 10%) Finn den/de menyene som inneholder flest retter. Skriv ut menyid og antall retter. Oppgave 8 (vekt 15%) Finn de gjestene som aldri er blitt invitert oftere enn maksimalt én gang i året. Skriv ut navnene på disse gjestene. Hint: Du kan trekke ut årstal let fra en dato ved å skrive EXTRACT(YEAR FROM dato-attributt). Eksempel: SELECT EXTRACT(YEAR FROM menydato) AS aar FROM Gjesteliste; (finner alle årstall som forekommer i gjestelisten) Oppgave 9 (vekt 15%) Finn ut om det er noen ingredienser som aldri har vært benyttet i noen meny. (Slutt eksamenssett 6) 17

18 Løsningsforslag julegaver modellering Oppgave 1 - Modellering Kommentarer Et hovedpoeng her er å skille mellom Gaveartikkel, hvor hver gaveartikkel kan forefinnes i flere eksemplarer, og Julegave, som representerer de konkrete eksemplarene som overbringes fra giver til mottaker. Forøvrig er de eksterne entydighetene av interesse. Den som ligger i nærheten av Julegave, uttrykker at til samme jul kan ikke samme mottaker få samme gaveartikkel av samme giver mer enn én gang. (Onkel Fredrik har fått mange slips, men det er bare om ett han kan si: "Dette grå 110 cm lange silkeslipset fikk jeg av tante Laura julen 1952".) Men da regnes i tilfelle de 6 kjøkkenglassene som tante Laura fikk av onkel Fredrik året etter, som én julegave selv om glassene var pakket inn enkeltvis i et humoristisk forsøk på å få gaven til å fremstå som mer overdådig enn den var. Dette gir oss en entydig referanse til Julegave, nemlig 18

19 kombinasjonen av varenummeret, årstallet, giverreferansen og mottakerreferansen. For Person har vi i utgangspunktet bare referansen Navn (som er fornavnet, alternativt et kjælenavn), som ikke er entydig i seg selv, men er entydig innen en bopel. Dette er uttrykt gjennom den eksterne entydigheten i nærheten av Person. Kombinasjonen av lengdegrad, breddegrad, etasje og fornavn/kjælenavn gir oss altså en entydig referanse til Person. Oppgave 2 - Gruppering Lager(lagernr, sjef, tlfnr) Lagervare(lagernr, varenr, antall) Produsent(prodnavn, tlfnr) Bankkonto(kontonr, prodnavn) Gaveartikkel(varenr, beskrivelse) Produksjon(varenr, prodnavn) Person(navn, lengdegrad, breddegrad, etasje) Julegave(varenr, årstall. franavn, fralgd, frabrd, fraetg, tilnavn, tillgd, tilbrd, tiletg, antall) Fremmednøkler: lagernr i Lagervare til lagernr i Lager varenr i Lagervare til varenr i Gaveartikkel prodnavn i Bankkonto til prodnavn i Produsent varenr i Produksjon til varenr i Gaveartikkel prodnavn i Produksjon til prodnavn i Produsent varenr i Julegave til varenr i Gaveartikkel (franavn, fralgd, frabrd, fraetg) til (navn, lengdegrad, breddegrad, etasje) i Person (tilnavn, tillgd, tilbrd, tiletg) til (navn, lengdegrad, breddegrad, etasje) i Person Kommentarer Navn på attributter er valgt rimelig fritt. Den lange entydighetspilen på faktatypen mellom Gaveartikkel og Produsent resulterer i en begrepsdannelse som her er blitt til relasjonen Produksjon. Det kunne nok for grupperingens del vært en fordel å la Person ha en kortere referansemåte: 19

20 Hvis vi da velger pid som preferert referansemåte, slipper vi unna med langt færre attributter i Julegave. Til gjengjeld inneholder Person en kandidatnøkkel i tillegg til (den nye) primærnøkkelen: Person(pid, navn, lengdegrad, breddegrad, etasje) Julegave(varenr, frapid, tilpid, årstall, antall) 20

21 Løsningsforslag konsulentdatabase SQL og normalisering Oppgave 1 CREATE TABLE Timeliste ( Anskode CHAR(4) REFERENCES Ansatt(Anskode), Uke INTEGER, Kontrollør CHAR(4) REFERENCES Ansatt(Anskode), PRIMARY KEY (Anskode,Uke) ); Oppgave 2 SELECT Anskode, Uke, Lnr FROM Timelistelinje WHERE NOT (Timer % 5 = 0); Oppgave 3 SELECT FROM WHERE Anskode, Uke, Lnr Timelistelinje (Prosject = A AND O-kode!= ) OR (O-kode = B AND NOT (Prosjekt LIKE K% )) OR (O-kode = AND (Dag = 6 OR Dag = 7)); Oppgave 4 SELECT Anskode, Uke, Dag FROM Timelistelinje WHERE O-kode = GROUP BY Anskode, Uke, Dag HAVING SUM(Timer) NOT IN (0,75); Oppgave 5 CREATE VIEW Data(ProsjType, SumTimer) AS (SELECT S, SUM(Timer) FROM Timelistelinje T, Ansatt A WHERE Avdeling = Salg AND T.Anskode = A.Anskode AND Uke > AND Prosjekt LIKE S% ) UNION (SELECT M, SUM(Timer) FROM Timelistelinje T, Ansatt A WHERE Avdeling = Salg AND T.Anskode = A.Anskode AND Uke > AND Prosjekt LIKE M% ) UNION (SELECT A, SUM(Timer) FROM Timelistelinje T, Ansatt A WHERE Avdeling = Salg AND T.Anskode = A.Anskode AND Uke > AND NOT (Prosjekt LIKE M% OR Prosjekt LIKE S% OR Prosjekt = A ) ); (Oppg. 5 forts. neste side) 21

22 SELECT FROM ProsjType, (100.0*SumTimer)/SUM(SumTimer) AS Prosent Data; Oppgave 6 CREATE VIEW Data1(Anskode, A-timer) AS (SELECT Anskode, SUM(Timer) FROM Timelistelinje WHERE Uke = <ukenr> AND O-kode = A GROUP BY Anskode ) UNION (SELECT Anskode, -SUM(Timer) FROM Timelistelinje WHERE Uke = <ukenr> AND Prosjekt = A GROUP BY Anskode ); CREATE VIEW Data2(Akode, A-timer) AS (SELECT Anskode, SUM(A-timer) FROM Data1 GROUP BY Anskode ) UNION (SELECT Anskode, 0 FROM Ansatt WHERE Anskode NOT IN (SELECT Anskode FROM Data1) ); UPDATE Ansatt SET Flexikode = Flexikode + (SELECT A-timer FROM Data2 WHERE Akode = Anskode); Oppgave 7 CREATE VIEW LevertListe AS SELECT Anskode, MAX(Uke) AS SisteUke FROM Timeliste GROUP BY Anskode; CREATE VIEW SisteUke(SisteFakturaUke) AS SELECT MIN(SisteUke) FROM LevertListe; SELECT MAX(P.P-navn) AS Prosjektnavn, MAX(A.Navn) AS Konsulent, SUM(T.Timer) AS AntallTimer FROM Kunde K, Prosjekt P, Ansatt A, Timelistelinje T, SisteUke WHERE K-navn = <kundens navn> AND K.Kundenr = P.Kundenr AND P.P-kode = T.Prosjekt AND A.Anskode = T.Anskode AND T.Uke > K.SistFakturert AND T.Uke <= SisteFakturaUke GROUP BY Anskode, P-kode ORDER BY Prosjektnavn, AntallTimer DESC; 22

23 Oppgave 8 Fjern første linje i WHERE-klausulen, legg til MAX(K.K-navn) AS Kundenavn først i SELECT-klausulen og legg Kundenavn først i ORDER BY-klausulen. (FROM- og GROUP BY-klausulene forblir uendret.) Oppgave 9 Attributter: Kundenr, K-navn, Salgskontakt, SistFakturert, P-kode, P- navn, P-leder FDer: Kundenr K-navn, Salgskontakt, SistFakturert P-kode P-navn, P-leder, Kundenr (disse får vi fra primærnøklene i de opprinnelige tabellene) Primærnøkkel: P-kode Tabellen er på 2NF fordi FD-en Kundenr K-navn, Salgskontakt, SistFakturert bryter med 3NF (Kundenr inneholder ikke kandidatnøkkelen P-kode og er altså derfor ingen supernøkkel; K-navn er ikke et nøkkelattributt (og det er heller ikke Salgskontakt eller SistFakturert)), samtidig er FDen på 2NF (Kundenr er ikke en ekte delmengde av P-kode). 23

24 Løsningsforslag maskindatabasen på Ifi modellering v. 1 24

25 25

26 26

27 27

28 28

29 Oppgave 6 Primærnøkler er understreket. Andre kandidatnøkler har stiplet understrekning. Ansatt (Brukernavn_for, U_nr_er_arb_plass); Diverse (U_nr_for, Beskrivelse_av_utstyr); Faktura (Firmanavn_med, FakturaNr_for, Firmanavn_for, OrdreNr_for, NOK_paa, Kildekode_belastes_for, Kildenavn_belastes_for ); FakturaLinje (Firmanavn_med, FakturaNr_med, LinjeNr_for, NOK_paa, Kildekode_belastes_for, Kildenavn_belastes_for); Feil (U_nr_med, Dato_feilmeldt, Brukernavn_meldte, RepStatus_for, Symptom_har, Dato_rettet, RepRefNr_for); Installasjon (Op_syst_har, Kategori_med, Filnavn_for); Maskin (U_nr_for, Op_syst_for, Kategori_for); Ordre (Firmanavn_fikk, OrdreNr_for); Postering (Kildekode_belastes_for, Kildenavn_belastes_for, Firmanavn_har, FakturaNr_har, LinjeNr_har, NOK_paa); Programmer (Op_syst_har, Kategori_har, Prognavn_i); Tilleggs_utstyr (U_nr_for, U_nr_med); Utstyr (U_nr_for, Dato_levert, Dato_slutt_service, Info_om, Kildekode_finansierer, Kildenavn_finansierer, Brukernavn_bruker, Serienr_for, S_type_avtale_for); Tre fremmednøkler (det er mange flere...): Fra Ansatt(U_nr_er_arb_plass) til Maskin(U_nr_for) Fra Postering (Firmanavn_har, FakturaNr_har, LinjeNr_har) til FakturaLinje (Firmanavn_med, FakturaNr_med, LinjeNr_for) Fra Utstyr(Brukernavn_bruker) til Ansatt(Brukernavn_for) 29

30 Løsningsforslag maskindatabasen på Ifi modellering v. 2 Oppgave 1 Utstyr har referansemåten Enhetsid (denne fremkommer først på sidene med perfekte broer s ), som er serienummer hvis dette fins, og et internnummer/løpenummer ellers. Alternativt kan man bruke et rent internt løpenummer pluss en faktatype som angir serienummer for de enhetene som har det. Underbegrepene til Utstyr er kun en illustrasjon av hvordan det gjøres; klassifiseringen er ikke uttømmende. 30

31 Oppgave 2 utstyr Her er det valgt å ikke innføre noe fellesbegrep for Ansatt og Ifi_sentralt fordi dette ville ha medført felles representasjon, noe som virker kunstig. Vi har videre valgt å modellere arbeidsplassmaskin som noe annet enn utstyr som disponeres. Arbeidsplassmaskiner er knyttet til ansatte via arbeidsplasser, se Oppgave 2 arbeidsplass. Som finansieringskilde oppgis RU, faggruppenavn, prosjektnavn eller ansattnavn (antar at alle navn er forskjellige). 31

32 Oppgave 2 - arbeidsplass 32

33 Oppgave 3 installasjonsimage En maskinkonstellasjon er bestemt av operativsystem og bruksnivå (derfor den eksterne entydigheten). Hvert installasjonsimage har en entydig plassering, i modelleringen foreslått realisert ved en URL (se s ). Et program kan inngå som standardpakke i flere maskinkonstellasjoner (derfor lang pil). 33

34 Oppgave 4 serviceavtaler Her er gjort noen antakelser, som at ikke alt utstyr har serviceavtale og at alt utstyr har anskaffelsesdato. Da blir denne datoen også startdato for serviceavtalen. 34

35 Oppgave 4 feilmelding Forutsetter maks en feilmelding pr. dag pr. utstyr. Da kan feilmeldingen identifiseres ved utstyrets enhetsid og dato for feilmeldingen. Antar at feilmeldingen alltid får en reparasjonsreferanse før feilen forsøkes reparert. En mer realistisk modellering av reparasjonsreferansen er at den bestemmes av leverandøren (det er altså ikke gjort her). 35

36 Oppgave 5 ordre Ordrenummer bestemmes av forhandler. Derfor den eksterne entydigheten mellom Forhandler_med og Ordrenummer_på_ordre. Linjenummer kan gjenbrukes på tvers av ordre, det sørger ekstern entydighet mellom Ordre_med_ordrelinje og Linjenummer_for_ordrelinje for. 36

37 Oppgave 5 faktura Det hadde vært naturlig å ha Ordre snarere enn Ordrenummer i diagrammet over. Da må man i tilfelle ha ekvivalente stier (equivalence of path eop) mellom Faktura-Ordre-Forhandler (mot venstre, via rollen Faktura_er_delleveranse_av) og Faktura -Forhandler (mot høyre, via rollen Faktura_gjelder_forhandler) for å sikre at forhandleren på ordren er den samme som forhandleren på fakturaen. Men i vårt tilfelle er det faktisk enklere å legge inn bare Ordrenummer direkte og la forhandler for ordren som fakturaen er en delleveranse av, underforstått være den samme som den som fremkommer via rollen Faktura_gjelder_forhandler. 37

38 Oppgave 5 fakturadetaljer Konto for fakturalinje (Fakturalinje_belastes/Konto_for_belastning) angis bare hvis linjen skal belastes en annen konto enn fakturaen generelt (Faktura_belastes_primært/Konto_er_primærkonto_for). Formålet med detaljlinjer er å spesifisere andre konti for deler av en fakturalinje. Det kan være flere detaljlinjer pr. fakturalinje. En og samme konto skal ikke være 38

39 gjentatt for flere detaljlinjer for en og samme fakturalinje. Dermed fås en ekstern entydighet mellom Konto_for_belastning_av og Fakturalinje_har_dellinje. Totalprisen (se faktatypen Pris_er_totalpris_på/Faktura_har_totalpris) skal stemme med summen av fakturalinjeprisene (som kan beregnes på grunnlag av faktatypene Fakturalinje_har_enhetspris/Pris_er_enhetspris_for og Fakturalinje_gjelder_antall_enheter/Antall_enheter_er_antall_enheter_levert). Totalprisen må modelleres særskilt i databasen i form av en stored procedure (ikke pensum i INF1300) og er altså ikke angitt i ORM-diagrammet, men slik informasjon kan med fordel påføres diagrammet som vanlig norsk tekst. 39

40 Perfekte broer I 40

41 Perfekte broer II 41

42 Oppgave 6 Primærnøkler er understreket. Andre kandidatnøkler har stiplet understrekning Ansatt (Ansattnr, Arbeidsplassid, Navn); Arbeidsplass (Arbeidsplassid, hovedmaskin); Detaljlinje (Forhandler, Fakturanr, Linjenr, Kontonr, Detaljinjenr, Antall) I Detaljlinje er dessuten (Forhandler, Fakturanr, Linjenr, Detaljinjenr) kandidatnøkkel Faktura (Forhandler, Fakturanr, Primaerknr, Ordrenr, Totpris) Fakturalinje (Forhandler, Fakturanr, Linjenr, Antall, Enhetspris, Utstyrstype, Kontonr) Fast_ansatt (Ansattnummer, Arbeidsplassid) Feilmelding (Enhetsid, Regdato, Ansatt_meldte_feil, Symptom) Feilmelding_Feil (Enhetsid, Dato, Feiltype) Feilmelding_Reparasjonsr (Reparasjonsrefnr, Enhetsid, Dato) Maskinkonstellasjon (OS, Bruksnivaa, Image_URL) Maskinkonstellasjon_Prog (OS, Bruksnivaa, Standardprogram) Ordre (Ordrenr, Forhandler, Dato) Ordrelinje (Ordrenr, Forhandler, Linjenr, Antall, Enhetspris, Utstyrstype) Reparasjon (Enhetsid, Repforsoeksdato, Repid, Repdato, Problemloest) Serviceavtale (Serviceavtaleid, Avtaletypebetegnelse, Servicelengde) Utstyr (Enhetsid, Anskaffelsesdato, Finansieringskilde, Operativsystemtype, Bruksnivaanavn, Id_er_serienummer, Utstyrstypenavn, Ansatt_disponerer, Ifi_disponerer, Serviceavtaleid, Tilleggsutstyr); Tre fremmednøkler (det er mange flere): Fra Fast_ansatt(Ansattnummer, Arbeidsplassid) til Ansatt(Ansattnr,Arbeidsplassid) Fra Reparasjon(Enhetsid, Repforsoeksdato) til Feilmelding_Reparasjonsr(Enhetsid, Dato) Fra Ansatt(Arbeidsplassid) til Arbeidsplass(Arbeidsplassid) 42

43 Løsningsforslag maskindatabasen på Ifi SQL og normalisering Oppgave 1 select prosjektid, ansattid, dato, timer from Prosjekttimer where status = 'merknad' order by prosjektid, ansattid; Oppgave 2 Fra primærnøkkelen has FDen (1) ansattid, prosjektid, dato timer, status, godkjennerid Fra oppgaveteksten has i tillegg FDen (2) prosjektid, dato, status godkjennerid Eneste kandidatnøkkel er primærnøkkelen: (ansattid, prosjektid, dato). (1) er på BCNF fordi venstresiden er en kandidatnøkkel og dermed en supernøkkel. (2) er på 2NF fordi venstresiden ikke er delmengde av kandidatnøkkelen. Den bryter 3NF fordi venstresiden ikke er en supernøkkel og høyresiden ikke er et nøkkelattributt. Totalt er derfor tabellen på 2NF. Den bryter 3NF. Oppgave 3 create table Detaljlinje ( leverandør varchar(30) references Leverandør(navn), fakturanr varchar(30), linjenr integer, antall integer not null, konto varchar(30), primary key (leverandør, fakturanr, linjenr, konto), foreign key (leverandør, fakturanr, linjenr) references Fakturalinje(leverandør, fakturanr, linjenr) ); 43

44 Man kan også vurdere om man skal ha med foreign key (leverandør, fakturanr) references Faktura(leverandør, fakturanr). Det kan godt stå 'not null' på nøkkelattributtene også, men dette påtvinges automatisk via primary key og er derfor ikke nødvendig å ha med. Oppgave 4 Fremmednøkkelen fra Fakturalinje til Faktura består av attributtene (leverandør, fakturanr). De tilsvarende attributtene i Faktura er dens primærnøkkel (denne heter også (leverandør, fakturanr).) Når det legges inn et nytt tuppel i Fakturalinje, må det sjekkes at det fins et tilhørende tuppel i Faktura (dvs. attributtverdier i Faktura-tuppelets primærnøkkel er likt verdiene i fremmednøkkelen i Fakturalinje-tuppelet). Det samme gjelder hvis et tuppel i Fakturalinje får endrede verdier i fremmednøkkelen. Når det fjernes et tuppel fra Faktura, må det sjekkes at det ikke fins tupler i Fakturalinje med tilsvarende verdier i fremmednøkkelen. Det samme gjelder hvis et tuppel i Faktura får endrede primærnøkkelverdier; da må de verdiene som ble overskrevet, ikke ha tilhørende tupler i Fakturalinje. Oppgave 5 select s.navn as navn, max(s.e-post) as e-post, sum(beløp) as totalbeløp from Leverandør s, Faktura f where s.navn = f.leverandør and f.leveringsdato > 2007 group by s.navn order by totalbeløp; (Noen DBMSer godtar at s.e-post brukes uaggregert i select fordi e-post er entydig for et gitt navn, men generelt skal det aggregeres over attributter i select som ikke forekommer i group by. Når vi vet at alle verdiene i s.epost vil være like for en gitt verdi i s.navn, kan vi i såfall få tak i s.e-post ved å si max(s.e-post).) Oppgave 6 Summer først opp beløpene som står implisitt i Fakturalinje for gitt faktura med leverandør x og fakturanummer y. Det som egentlig står, er antall og stykkpris, så beløpene må beregnes for hver fakturalinje. Siden dette ikke kan gjøres i argumentet til sum, må vi ha en egen beregning av disse før det summeres. 44

45 create view SumFakturalinje as select sum(pris) as linjepris from (select antall * stykkpris as pris from Fakturalinje where leverandør = x and fakturanr = y ); Sammenlign så totalbeløpet i Faktura med den beregnede summen fra Fakturalinje. select f.beløp - l.linjepris as diskrepanse from SumFakturalinje as l, Faktura f where f.leverandør = x and f. fakturanr = y and f.beløp - l.linjepris!= 0; Oppgave 7 En delleveranse fremkommer ved at det fins minst én faktura for vedkommende ordre. At ikke hele ordren er levert, er kjennetegnet ved at antallet enkeltvarer i fakturaene summerer seg til mindre enn antallet angitt i ordren. Så man kan rett og slett summere antall enheter og slik få en sjekksum som indikerer om ordren er komplett. Sjekksum for ordrene: create view OrdreSjekksum as select leverandør, ordrenr, sum(antall) as sjekksum from Ordrelinje group by leverandør, ordrenr; Sjekksum for leveransene: create view LeveranseSjekksum as select f.leverandør as leverandør, f.ordrenr as ordrenr, sum(antall) as sjekksum from Faktura f, Fakturalinje l where f.leverandør = l.leverandør and f.fakturanr = l.fakturanr group by f.leverandør, f.ordrenr; Svaret er ordre hvor disse er forskjellige: select o.leverandør, o.ordrenr from OrdreSjekksum o, LeveranseSjekksum d where o.leverandør = d.leverandør and o.ordrenr = d.ordrenr and o.sjekksum!= d.sjekksum; 45

46 Oppgave 8 La w være den aktuelle kontoen. Fakturaer som gjelder w, summerer seg opp slik: create view SumFaktura as select sum(beløp) as f-beløp from Faktura where konto = w and leveringsdato > 2007 ; Fra disse beløpene skal trekkes beløp vedrørende fakturalinjer som gjelder andre konti. Disse beløpene summerer seg til følgende: create view SumFakturalinjerAndre as select sum(beløp) as la-beløp from (select l.antall * l.stykkpris as beløp from Fakturalinje l, Faktura f where l.leverandør = f.leverandør and l.fakturanr = f.fakturanr and f.konto = w and f.leveringsdato > 2007 and l.konto is not null and l.konto!= w ); I tillegg til de fakturaene som gjelder w, kommer fakturalinjer hvor tilhørende (hoved-)faktura gjelder en annen konto, men hvor fakturalinjene gjelder w. Disse beløpene summerer seg til følgende: create view SumFakturalinjer as select sum(beløp) as l-beløp from (select l.antall * l.stykkpris as beløp from Fakturalinje l, Faktura f where l.leverandør = f.leverandør and l.fakturanr = f.fakturanr and f.leveringsdato > 2007 and f.konto!= w and l.konto = w ); 46

47 Til fratrekk fra beløp som stammer fra slike fakturalinjer, kommer fakturadetaljlinjer som gjelder andre konti: create view SumDetaljlinjerAndre as select sum(beløp) as da-beløp from (select d.antall * l.stykkpris as beløp from Detaljlinje d, Fakturalinje l, Faktura f where d.leverandør = l.leverandør and d.fakturanr = l.fakturanr and d.linjenr = l.linjenr and l.leverandør = f.leverandør and l.fakturanr = f.fakturanr and f.leveringsdato > 2007 and f.konto!= w and l.konto = w and d.konto!= w ); I tillegg kommer detaljlinjer hvor tilhørende faktura ikke gjelder w, en fakturalinje heller ikke gjelder w, men hvor detaljlinjen skal belastes w: create view SumDetaljlinjer as select sum(beløp) as d-beløp from (select d.antall * l.stykkpris as beløp from Detaljlinje d, Fakturalinje l, Faktura f where d.leverandør = l.leverandør and d.fakturanr = l.fakturanr and d.linjenr = l.linjenr and l.leverandør = f.leverandør and l.fakturanr = f.fakturanr and f.leveringsdato > 2007 and f. konto!= w and (l.konto is null or l.konto!= w ) and d.konto = w ); Det kan strengt tatt tenkes at en hovedfaktura som nevner w som konto, har en eller flere fakturalinjer som nevner en annen konto, og hvor detaljlinjer igjen nevner w som konto. Det burde riktignok være et krav at hovedkonto ikke får gjentas i detaljlinjer; i den grad det er fakturalinjer hvor noen deler skal belastes hovedkonto og noen andre konti, bør fakturalinjen heller gjenta hovedkonto (dvs. med en null-forekonst i attributtet konto), og med avvikende konti i detaljlinjene. Men vi kan jo ta slike beløp med for å være på den sikre siden. De fremkommer ved å gjøre følgende: 47

Løsningsforslag maskindatabasen på Ifi SQL og normalisering

Løsningsforslag maskindatabasen på Ifi SQL og normalisering Løsningsforslag maskindatabasen på Ifi SQL og normalisering Oppgave 1 select prosjektid, ansattid, dato, timer from Prosjekttimer where status = 'merknad' order by prosjektid, ansattid; Oppgave 2 Fra primærnøkkelen

Detaljer

Eksamensoppgaver. Og for all del: Vær kritiske til de løsningsforslagene vi presenterer! Vi påstår ikke at de er optimale.

Eksamensoppgaver. Og for all del: Vær kritiske til de løsningsforslagene vi presenterer! Vi påstår ikke at de er optimale. Eksamensoppgaver Under følger eksempler på tre eksamensoppgaver innen modellering og tre innen relasjonsdatabaser samt løsningsforslag. Merk at det er nettopp dette løsningsforslagene er: Forslag til løsninger.

Detaljer

MATOPPSKRIFTER Obligatorisk oppgave nr. 2 i INF1300 høsten 2010

MATOPPSKRIFTER Obligatorisk oppgave nr. 2 i INF1300 høsten 2010 MATOPPSKRIFTER Obligatorisk oppgave nr. 2 i INF1300 høsten 2010 Oppgaven skal løses og leveres individuelt (men det er lov å snakke og diskutere med medstudenter om løsningen). Skriv ditt fulle navn, kursnummeret

Detaljer

Løsningsforslag matoppskrifter modellering

Løsningsforslag matoppskrifter modellering Løsningsforslag matoppskrifter modellering Oppgave 1 Det beste er å ha et felles løpenummer på alle oppskrifter, uavhengig av hvor de stammer fra, og heller ha ekstraopplysninger som avhenger av om oppskriften

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i INF1300 Introduksjon til databaser Eksamensdag: 1. desember 2014 Tid for eksamen: 09.00 15.00 Oppgavesettet er på 5 sider. Vedlegg:

Detaljer

INF1300 Introduksjon til databaser

INF1300 Introduksjon til databaser UNIVERSITETET I OSLO INF300 Introduksjon til databaser Dagens tema: Oppdateringsanomalier Normalformer INF300..007 Ellen Munthe-Kaas Hva kjennetegner god relasjonsdatabasedesign? Relasjonene samler beslektet

Detaljer

Dagens tema: Relasjonsmodellen (funksjonelle avhengigheter og nøkler, integritetsregler) Realisering: Fra ORM til relasjoner

Dagens tema: Relasjonsmodellen (funksjonelle avhengigheter og nøkler, integritetsregler) Realisering: Fra ORM til relasjoner UNIVERSITETET I OSLO INF1300 Introduksjon til databaser Dagens tema: Relasjonsmodellen (funksjonelle avhengigheter og nøkler, integritetsregler) Realisering: Fra ORM til relasjoner Institutt for informatikk

Detaljer

Dagens tema: Oppdateringsanomalier Normalformer

Dagens tema: Oppdateringsanomalier Normalformer UNIVERSITETET I OSLO INF300 Introduksjon til databaser Dagens tema: Oppdateringsanomalier Normalformer Institutt for informatikk INF300 08..0 michael@ifi.uio.no Hva kjennetegner god relasjonsdatabasedesign?

Detaljer

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

Sensorveiledning for IN2090 og INF desember :30 18:30 (4 timer) Sensorveiledning for IN2090 og INF1300 6. desember 2018 14:30 18:30 (4 timer) 1. Eksterne skranker (5%) I modellene nedenfor (ORM2) skal du anta at alle begreper har en unik representasjon. Er plasseringen

Detaljer

INF1300 Introduksjon til databaser

INF1300 Introduksjon til databaser UNIVERSITETET I OSLO INF1300 Introduksjon til databaser Dagens tema: Informasjonsbærende referansemåter Resten av realiseringsalgoritmen Sterk realisering Realisering versus modellering INF1300-31.10.2016

Detaljer

INF1300 Introduksjon til databaser

INF1300 Introduksjon til databaser UNIVERSITETET I OSLO INF300 Introduksjon til databaser Dagens tema: Oppdateringsanomalier Normalformer INF300 7.0.008 Ellen Munthe-Kaas Hva kjennetegner god relasjonsdatabasedesign? Relasjonene samler

Detaljer

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

Løsningsforslag til eksamen i IN2090 Databaser og datamodellering og INF1300 Introduksjon til databaser 6. desember :30 18:30 (4 timer) Løsningsforslag til eksamen i IN2090 Databaser og datamodellering og INF1300 Introduksjon til databaser 6. desember 2018 14:30 18:30 (4 timer) 1. Eksterne skranker (5%) I modellene nedenfor (ORM2) skal

Detaljer

1. Relasjonsmodellen. 1.1. Kommentarer til læreboka

1. Relasjonsmodellen. 1.1. Kommentarer til læreboka Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag Relasjonsmodellen Tore Mallaug 2.9.2013 Lærestoffet er utviklet for faget Databaser 1. Relasjonsmodellen Resymé: Denne leksjonen gir en kort

Detaljer

Oppgaver Oppgave a: Sett opp mulige relasjoner

Oppgaver Oppgave a: Sett opp mulige relasjoner Løsningsforslag til øving 4: Relasjonsmodellen Kjell Toft Hansen 18.09.2008 Opphavsrett: Forfatter og AITeL Lærestoffet er utviklet for faget LO151D Informatikk 1: databaser Oppgaver Oppgave a: Sett opp

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Prøveeksamen i : INF1300 Introduksjon til databaser Eksamensdag: leveringsfrist 11. november 2016 Oppgavesettet er på 5 sider. Vedlegg:

Detaljer

Oppdateringsanomalier Normalformer

Oppdateringsanomalier Normalformer UNIVERSITETET I OSLO INF300 Introduksjon til databaser Dagens tema: Oppdateringsanomalier Normalformer Institutt for informatikk INF300 26.0.2009 Ellen Munthe-Kaas Hva kjennetegner god relasjonsdatabasedesign?

Detaljer

1. SQL datadefinisjon og manipulering

1. SQL datadefinisjon og manipulering Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag SQL datadefinisjon og manipulering Tore Mallaug 7.10.2008 Lærestoffet er utviklet for faget Databaser 1. SQL datadefinisjon og manipulering

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i INF1300 Introduksjon til databaser Eksamensdag: 30. november 2012 Tid for eksamen: 09.00 15.00 Oppgavesettet er på 5 sider. Vedlegg:

Detaljer

Repetisjon: Normalformer og SQL

Repetisjon: Normalformer og SQL IN2090 databaser og datamodellering Repetisjon: Normalformer og SQL Mathias Stang og Stein Michael Storleer 21. november 2018 1 Agenda Normalformer Funksjonelle avhengigheter Nøkler Finne hvilke normalformer

Detaljer

Integritetsregler i SQL. Primærnøkler

Integritetsregler i SQL. Primærnøkler Integritetsregler i SQL Kandidat- og primærnøkler Referanseintegritet - fremmednøkler Domenebegrensende integritetsregler skranker på attributter og tupler Interrelasjonsskranker assertions Triggere INF212

Detaljer

Relasjonsdatabasedesign

Relasjonsdatabasedesign UNIVERSITETET I OSLO Relasjonsdatabasedesign Oppdateringsanomalier Dekomponering Normalformer INF300-8..008 Ragnar Normann Institutt for Informatikk Hva kjennetegner god relasjonsdatabasedesign? Beslektet

Detaljer

Relasjonsdatabasedesign

Relasjonsdatabasedesign UNIVERSITETET I OSLO Relasjonsdatabasedesign Oppdateringsanomalier Dekomponering Normalformer Institutt for Informatikk INF300-9..007 Ellen Munthe-Kaas Hva kjennetegner god relasjonsdatabasedesign? Beslektet

Detaljer

*UXSSHULQJ IRU JUDXWVNDOOHU (QYLVXHOOJXLGHJMHQQRPQRHQ DY1,$0JUXSSHULQJHQV XQGHUIXQGLJKHWHU

*UXSSHULQJ IRU JUDXWVNDOOHU (QYLVXHOOJXLGHJMHQQRPQRHQ DY1,$0JUXSSHULQJHQV XQGHUIXQGLJKHWHU *UXSSHULQJ IRU JUDXWVNDOOHU (QYLVXHOOJXLGHJMHQQRPQRHQ DY1,$0JUXSSHULQJHQV XQGHUIXQGLJKHWHU Historikk (Ikke bruk tid på å lese dette, den nyttige informasjonen begynner på neste side...) Ideen til å lage

Detaljer

Oppdateringsanomalier. Normalformer. Institutt for informatikk INF

Oppdateringsanomalier. Normalformer. Institutt for informatikk INF Oppdateringsanomalier Normalformer Institutt for informatikk INF300 7.0.04 Relasjonene samler beslektet informasjon Så lite dobbeltlagring som mulig Så få glisne relasjoner som mulig Korrekt totalinformasjon

Detaljer

Relasjonsdatabasedesign

Relasjonsdatabasedesign Relasjonsdatabasedesign Oppdateringsanomalier Dekomponering Normalformer INF300-4..005 - Ragnar Normann Hva kjennetegner god relasjonsdatabasedesign? Skjemaene samler beslektet informasjon: Tekstlig nærhet

Detaljer

Integritetsregler i SQL

Integritetsregler i SQL UNIVERSITETET I OSLO Integritetsregler i SQL INF3100 8.2.2005 Ragnar Normann 1 Integritetsregler i SQL Kandidat- og primærnøkler Referanseintegritet - fremmednøkler Domenebegrensende integritetsregler

Detaljer

EKSAMEN 6102 / 6102N DATABASER

EKSAMEN 6102 / 6102N DATABASER EKSAMEN 6102 / 6102N DATABASER 06.12.2016 Tid: 4 timer (10-14) Målform: Sidetall: Hjelpemidler: Merknader: Vedlegg: Bokmål / nynorsk 13 (inkludert denne) Ingen Ingen Eksempeltabeller Sensuren finner du

Detaljer

Databaser: Relasjonsmodellen, del I

Databaser: Relasjonsmodellen, del I LC238D http://www.aitel.hist.no/fag/_dmdb/ Databaser: Relasjonsmodellen, del I En relasjon er en matematisk mengde side 2 Egenskaper ved relasjoner side 3 Entitetsintegritet side 4-5 Referanseintegritet

Detaljer

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring Kandidatnr: Eksamensdato: 6.desember 2010 Varighet: 0900-1200 Fagnummer: Fagnavn: Klasse(r): LC238D Datamodellering og databaser HING2009HA

Detaljer

Normalisering. Hva er normalisering?

Normalisering. Hva er normalisering? LC238D http://www.aitel.hist.no/fag/_dmdb/ Normalisering Hva er normalisering? side 2 Normaliseringens plass i utviklingsprosessen side 3 Eksempel side 4 Funksjonell avhengighet side 5-6 Første normalform

Detaljer

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn EKSAMENSFORSIDE Skriftlig eksamen med tilsyn Emnekode: Emnenavn: DAT1000 Database 1 Dato: Tid fra / til: 13.05.2019 10.00 14.00 Ansvarlig faglærer: Bjørn Kristoffersen Campus: Fakultet: Bø Handelshøyskolen

Detaljer

Relasjonsdatabasedesign

Relasjonsdatabasedesign UNIVERSITETET I OSLO Relasjonsdatabasedesign Normalformer Institutt for Informatikk INF3100-1.2.2010 Ellen Munthe-Kaas 1 Normalformer Normalformer er et uttrykk for hvor godt vi har lykkes i en dekomposisjon

Detaljer

Relasjonsdatabaseteori

Relasjonsdatabaseteori Relasjonsdatabaseteori Nøkler, funksjonelle avhengigheter og normalformer Arash Khorram arashk@ifi.uio.no Lana Vu anhlv@ifi.uio.no Hva kjennetegner god relasjonsdatabasedesign? Relasjonene samler beslektet

Detaljer

Miniverden og ER- modell

Miniverden og ER- modell TDT4145 Datamodellering og databasesystemer SQL- oppgave 1 Miniverden og ER- modell Vi tar utgangspunkt i en enkel modell for en pizza- restaurant, der følgende ER- diagram beskriver databasen: Relasjonsdatabase-

Detaljer

Relasjonsdatabasedesign

Relasjonsdatabasedesign UNIVERSITETET I OSLO Relasjonsdatabasedesign Funksjonelle avhengigheter Oppdateringsanomalier Dekomponering Institutt for Informatikk INF3100-17.1.2014 Ellen Munthe-Kaas 1 Definisjon av nøkler Gitt en

Detaljer

1. SQL spørringer mot flere tabeller

1. SQL spørringer mot flere tabeller 1. SQL spørringer mot flere tabeller Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag SQL spørringer mot flere tabeller Tore Mallaug 29.9.2008 Lærestoffet er utviklet for faget Databaser

Detaljer

Databaser. - Normalisering -

Databaser. - Normalisering - Databaser - Normalisering - Innholdsfortegnelse 1. Normalisering... 2 1.1. Redundans... 2 1.2. Anomalier (uregelmessigheter etter oppdateringer i databasen)... 2 1.2.1. Innsettingsanomalier (Insertion

Detaljer

Datamodellering og databaser http://www.aitel.hist.no/fag/_dmdb/ SQL, del 2

Datamodellering og databaser http://www.aitel.hist.no/fag/_dmdb/ SQL, del 2 http://www.aitel.hist.no/fag/_dmdb/ SQL, del 2 Eksempelbase side 2 Virtuelle tabeller (views) side 3-6 NULL-verdier side 7-14 UPDATE-setningen side 15-16 INSERT-setningen side 17 DELETE-setningen side

Detaljer

Normalisering. Hva er normalisering?

Normalisering. Hva er normalisering? LC238D http://www.aitel.hist.no/fag/_dmdb/ Normalisering Hva er normalisering? side 2 Normaliseringens plass i utviklingsprosessen side 3 Eksempel side 4 Funksjonell avhengighet side 5-6 Første normalform

Detaljer

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

SQL Structured Query Language. Definere tabeller Skranker Fylle tabeller med data SQL Structured Query Language Definere tabeller Skranker Fylle tabeller med data Lage en tabell med SQL create table R (A 1 D 1 [S 1 ],... A n D n [S n ], [liste av skranker] R er navnet på relasjonen/tabellen

Detaljer

Relasjonsdatabasedesign

Relasjonsdatabasedesign UNIVERSITETET IOSLO Relasjonsdatabasedesign Tapsfri dekomposisjon Normalformer INF3100-26.1.2009 Ragnhild Kobro Runde 1 Repetisjon: funksjonell avhengighet Gitt et relasjonsskjema R(A1,A2,,An) og la X,

Detaljer

God Databasedesign: På vei mot Normalformer

God Databasedesign: På vei mot Normalformer God Databasedesign: På vei mot Normalformer Martin Giese 4. november 08 Agenda Hva er god databasedesign? Forklart ved et dårlig eksempel Oppdateringsanomalier Repetisjon: Supernøkler, kandidatnøkler,

Detaljer

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

Databaser. Relasjonsmodellen 1 Læreboka: Kap. 2 Relasjonsmodellen Faglærere: Tore Mallaug, Kjell Toft Hansen Databaser Relasjonsmodellen 1 Læreboka: Kap. 2 Relasjonsmodellen Faglærere: Tore Mallaug, Kjell Toft Hansen Tema for dagen Relasjonsmodellen Hvorfor relasjoner? Fra ER diagram til relasjoner 22.09.2008

Detaljer

Oppgave 3 - normalisering

Oppgave 3 - normalisering Oppgave 3 - normalisering Løsningsforslag Oppgave 3 - løsning 22.10.2014 Øvelsesoppgave 3 1. Normaliser logisk skjema fra oppgave 1 og 2 (Læringssenter) 2. Normaliser logisk skjema fra seminarøvelsen (Nøsteelskere)

Detaljer

Relasjonsdatabasedesign

Relasjonsdatabasedesign UNIVERSITETET I OSLO Relasjonsdatabasedesign Funksjonelle avhengigheter Oppdateringsanomalier Dekomponering Institutt for Informatikk INF300-6..00 Ellen Munthe-Kaas Definisjon av nøkler Gitt et relasjonsskjema

Detaljer

Datamodellering 101 En tenkt høgskoledatabase

Datamodellering 101 En tenkt høgskoledatabase Datamodellering 101 En tenkt høgskoledatabase Spesifikasjoner for databasen vi skal modellere: Oversikt over studenter med: Fullt navn Klasse Studium Avdeling Brukernavn Fødselsdag Adresse Telefonnummer

Detaljer

Obligatorisk oppgave nr. 3 i INF1300 høsten 2009

Obligatorisk oppgave nr. 3 i INF1300 høsten 2009 Obligatorisk oppgave nr. 3 i INF1300 høsten 2009 Oppgaven er beregnet på å løses og leveres som et samarbeid mellom to studenter, men det er lov for dem som vil seg selv så vondt, å levere en individuell

Detaljer

Relasjonsdatabasedesign

Relasjonsdatabasedesign UNIVERSITETET I OSLO Relasjonsdatabasedesign Normalformer Institutt for Informatikk INF3100-26.1.2015 Ellen Munthe-Kaas 1 Normalformer Normalformer er et uttrykk for hvor godt vi har lykkes i en dekomposisjon

Detaljer

Relasjonsdatabasedesign

Relasjonsdatabasedesign UNIVERSITETET I OSLO Relasjonsdatabasedesign Normalformer Institutt for Informatikk INF3100-22.1.2013 Ellen Munthe-Kaas 1 Hvordan dekomponere tapsfritt Fagins teorem Gitt en relasjon R(XYZ) med FDer F.

Detaljer

Ekvivalente stier (Equivalence of Path, EOP) i storm

Ekvivalente stier (Equivalence of Path, EOP) i storm Ekvivalente stier (Equivalence of Path, EOP) i storm Dette er ikke rett fram, derfor denne beskrivelsen. Vi tar utgangspunkt i følgende modell for kinoer og kinoforestillinger: Bilde 1 ORM2 modell I bildet

Detaljer

Normalisering. Hva er normalisering?

Normalisering. Hva er normalisering? LC238D http://www.aitel.hist.no/fag/_dmdb/ Normalisering Hva er normalisering? side 2 Normaliseringens plass i utviklingsprosessen side 3 Eksempel side 4 Funksjonell avhengighet side 5-6 Første normalform

Detaljer

Plenum: Nøkler, normalformer og funksjonelle avhengigheter

Plenum: Nøkler, normalformer og funksjonelle avhengigheter Plenum: Nøkler, normalformer og funksjonelle avhengigheter Mathias Stang 14. november 2017 1 Agenda Hva er god databasedesign? Atomære verdier Nøkler: Supernøkler, kandidatnøkler, primærnøkler, nøkkelattributter

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i Eksamensdag: 9. juni 2008 Tid for eksamen: 14.30 17.30 Oppgavesettet er på 5 sider. Vedlegg: Tillatte hjelpemidler: INF3100 Databasesystemer

Detaljer

INF1300 Introduksjon til databaser

INF1300 Introduksjon til databaser UNIVERSITETET I OSLO Dagens tema: INF1300 Introduksjon til databaser Relasjonsmodellen (funksjonelle avhengigheter og nøkler, integritetsregler) Institutt for informatikk INF1300 12.9.2016 1 Relasjonsmodellen

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i : INF3100/INF4100 Databasesystemer Eksamensdag : Tirsdag 8. juni 2004 Tid for eksamen : 09.00-12.00 Oppgavesettet er på : 5 sider

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i Eksamensdag: 2. desember 2013 Tid for eksamen: 09.00 15.00 Oppgavesettet er på 6 sider. Vedlegg: Tillatte hjelpemidler: INF1300

Detaljer

IN2090 Databaser og datamodellering. Databasedesign og normalformer

IN2090 Databaser og datamodellering. Databasedesign og normalformer IN2090 Databaser og datamodellering Databasedesign og normalformer Evgenij Thorstensen evgenit@ifi.uio.no Universitetet i Oslo 1 / 43 Oversikt Gode og dårlige skjemadesign (og litt historie) Funksjonelle

Detaljer

Relasjonsdatabasedesign

Relasjonsdatabasedesign UNIVERSITETET I OSLO Relasjonsdatabasedesign Normalformer Institutt for Informatikk INF3100-25.1.2016 Ellen Munthe-Kaas 1 Normalformer Normalformer er et uttrykk for hvor godt vi har lykkes i en dekomposisjon

Detaljer

Datamodellering og databaser SQL, del 2

Datamodellering og databaser  SQL, del 2 http://www.aitel.hist.no/fag/_dmdb/ SQL, del 2 Eksempelbase side 2 Virtuelle tabeller (views) side 3-6 NULL-verdier side 7-14 UPDATE-setningen side 15-16 INSERT-setningen side 17 DELETE-setningen side

Detaljer

Oppgaver INF3100. Oversikt over innholdet

Oppgaver INF3100. Oversikt over innholdet Oppgaver INF3100 Dette heftet inneholder først og fremst løsningsforslag til oppgaver fra læreboken, men også noen ekstraoppgaver. Ekstraoppgavene er gitt navn etter hvilket kapittel de tilhører, og løsningsforslag

Detaljer

Dagens tema: Begrepsdannelse Eksterne entydighetsskranker Verdiskranker Mengdeskranker Underbegreper og underbegrepsskranker Kombinerte totale roller

Dagens tema: Begrepsdannelse Eksterne entydighetsskranker Verdiskranker Mengdeskranker Underbegreper og underbegrepsskranker Kombinerte totale roller UNIVERSITETET I OSLO INF1300 Introduksjon til databaser Dagens tema: Begrepsdannelse Eksterne entydighetsskranker Verdiskranker Mengdeskranker Underbegreper og underbegrepsskranker Kombinerte totale roller

Detaljer

Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF

Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF Martin Giese 7. november 2018 1 Agenda Nytt eksempel Med funksjonelle avhengigheter 1NF (veldig kort) 2NF, Grundig Hva er vitsen? anomalier Få eksemplet

Detaljer

Relasjonsdatabasedesign

Relasjonsdatabasedesign UNIVERSITETET I OSLO Relasjonsdatabasedesign Funksjonelle avhengigheter Oppdateringsanomalier Dekomponering Institutt for Informatikk INF3100-20.1.2016 Ellen Munthe-Kaas 1 Definisjon av nøkler Gitt en

Detaljer

BRUKERVEILEDNING ELEKTRONISK FAKTURABEHANDLING/FAKTURAFLYT I VISMA ENTERPRISE

BRUKERVEILEDNING ELEKTRONISK FAKTURABEHANDLING/FAKTURAFLYT I VISMA ENTERPRISE BRUKERVEILEDNING ELEKTRONISK FAKTURABEHANDLING/FAKTURAFLYT I VISMA ENTERPRISE Versjon 1.1 Side 1 av 11 Beskrivelse: Fagområde: Periodisk/Løpende: Formål: Elektronisk fakturabehandling/fakturaflyt i Visma

Detaljer

Brødrene Dahls Assistent BDA

Brødrene Dahls Assistent BDA Brukerveiledning for Brødrene Dahls Assistent BDA -Helt sjef på lager! www.dahl.no Okt 07 BDA brukerdokumentasjon Brukerveiledning for Hand Held Dolphin 7600 Innholdsfortegnelse 1 Skjermbilder Side 1 1.1

Detaljer

EKSAMEN DATABASER

EKSAMEN DATABASER EKSAMEN 6102 DATABASER 30.05.2016 Tid: 4 timer (9-13) Målform: Sidetall: Hjelpemidler: Merknader: Vedlegg: Bokmål 7 (inkludert denne) Ingen Ingen Eksempeldata Sensuren finner du på StudentWeb. Vekting

Detaljer

INF1300 Introduksjon til databaser

INF1300 Introduksjon til databaser UNIVERSITETET I OSLO INF1300 Introduksjon til databaser Dagens tema: Relasjonsmodellen Funksjonelle avhengigheter og nøkler Realisering: Fra ORM til relasjoner Institutt for informatikk INF1300--15.9.2009--michael@ifi.uio.no

Detaljer

Integritetsregler i SQL

Integritetsregler i SQL UNIVERSITETET I OSLO Integritetsregler i SQL Institutt for Informatikk INF3100 13.2.2007 Ellen Munthe-Kaas 1 Integritetsregler i SQL Kandidat- og primærnøkler Referanseintegritet - fremmednøkler Domenebegrensende

Detaljer

Datamodellering og databaser SQL, del 2

Datamodellering og databaser  SQL, del 2 http://www.aitel.hist.no/fag/_dmdb/ SQL, del 2 Eksempelbase side 2 Virtuelle tabeller (views) side 3-6 NULL-verdier side 7-14 UPDATE-setningen side 15-16 INSERT-setningen side 17 DELETE-setningen side

Detaljer

Gruppeøvelse 20/ Dagens tema: - Gruppering/realisering

Gruppeøvelse 20/ Dagens tema: - Gruppering/realisering Gruppeøvelse 20/9-2010 Dagens tema: - Gruppering/realisering Gruppering, regler - I Lange piler fjernes før grupperingen begynner Stikkord: Begrepsdannelse, ekstern entydighet September 20, 2010 2 Gruppering,

Detaljer

1. Datamodellering. 1.1. Kommentarer til læreboka

1. Datamodellering. 1.1. Kommentarer til læreboka Tore Mallaug 20.10.2009 Opphavsrett: Forfatter og Stiftelsen TISIP Lærestoffet er utviklet for fagene LN323D Databaser 1. Datamodellering Resymé: Denne leksjonen viser et par eksempler på ER-modellering

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i : INF3100/INF4100 Databasesystemer Eksamensdag : Onsdag 8. juni 2005 Tid for eksamen : 14.30 17.30 Oppgavesettet er på : 5 sider

Detaljer

Brukerveiledning for SMS fra Outlook

Brukerveiledning for SMS fra Outlook Brukerveiledning for SMS fra Outlook Grunnleggende funksjonalitet Med SMS fra Outlook kan du enkelt sende både SMS og MMS fra Outlook. Programmet er integrert med din personlige Outlookkontaktliste og

Detaljer

UNIVERSITETET. Relasjonsdatabasedesign

UNIVERSITETET. Relasjonsdatabasedesign UNIVERSITETET IOSLO Relasjonsdatabasedesign Normalformer Institutt for Informatikk INF3100-31.1.2011 Ellen Munthe-Kaas 1 Hvordan dekomponere tapsfritt Fagins teorem Gitt et relasjonsskjema R(XYZ) med FDer

Detaljer

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

Oppgave 1 1. Spørring: Resultattabell: 2. Spørring: Resultattabell: 3. Spørring: Kjell Toft Hansen 02.10.2008 Opphavsrett: Forfatter og AITeL Lærestoffet er utviklet for faget LO151D Informatikk 1: databaser Oppgave 1 1. Spørring: SELECT oh.*, delnr, kvantum FROM ordrehode oh, ordredetalj

Detaljer

INF3100 Databasesystemer

INF3100 Databasesystemer INF3100 Databasesystemer Relasjonsmodellen INF3100-18.1.2005 - Ragnar Normann 1 Relasjonsdatabasemodellen Datamodell Mengde av begreper for å beskrive strukturen til en database Relasjonsmodellen Databasen

Detaljer

Genus Hours for Kelly Services. Hjelpeguide til timeføring for medarbeidere

Genus Hours for Kelly Services. Hjelpeguide til timeføring for medarbeidere Genus Hours for Kelly Services Hjelpeguide til timeføring for medarbeidere 1. Innlogging Når du skal registrere timer elekronisk hos Kelly Services benyttes web-applikasjonen Genus Hours (https://hours.kellyservices.no).

Detaljer

Høgskolen i Telemark EKSAMEN 6102 DATABASER 10.12.2015. Tid: 10-14. Hjelpemidler: Vedlegg: Eksempeldata til oppgave 1

Høgskolen i Telemark EKSAMEN 6102 DATABASER 10.12.2015. Tid: 10-14. Hjelpemidler: Vedlegg: Eksempeldata til oppgave 1 Høgskolen i Telemark EKSAMEN 6102 DATABASER 10.12.2015 Tid: 10-14 Målform: Sidetall: Hjelpemidler: Merknader: Bokmål/nynorsk 13 med forside Ingen Ingen Vedlegg: Eksempeldata til oppgave 1 Eksamensresultater

Detaljer

IN2090 Introduksjon til databaser

IN2090 Introduksjon til databaser UNIVERSITETET I OSLO IN2090 Introduksjon til databaser Dagens tema: Relasjonsmodellen (funksjonelle avhengigheter og nøkler, integritetsregler) Institutt for informatikk IN2090 26.9.2018!1 Relasjonsmodellen

Detaljer

BDA Proff på prosjekt!

BDA Proff på prosjekt! Brukerveiledning for Brødrene Dahls Assistent BDA Proff på prosjekt! www.dahl.no Sept 08 BDA brukerdokumentasjon Brukerveiledning for Honeywell Dolphin 7600 Innholdsfortegnelse 1 Skjermbilder Side 1 1.1

Detaljer

1. Innføring i bruk av MySQL Query Browser

1. Innføring i bruk av MySQL Query Browser Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag Innføring i bruk av MySQL Query Browser Kjell Toft Hansen 28.02.2007 Lærestoffet er utviklet for faget LV338D Databaseadministrasjon 1. Innføring

Detaljer

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

Høgskolen i Telemark EKSAMEN 6102 DATABASER Tid: Hjelpemidler: Vedlegg: Eksempeldata til oppgave 1 Høgskolen i Telemark EKSAMEN 6102 DATABASER 02.12.2014 Tid: 10-14 Målform: Sidetall: Hjelpemidler: Merknader: Bokmål/nynorsk 13 med forside Ingen Ingen Vedlegg: Eksempeldata til oppgave 1 Eksamensresultater

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i: INF1300 Introduksjon til databaser Eksamensdag: 30. november 2015 Tid for eksamen: 09.00 15.00 Oppgavesettet er på: 6 sider Vedlegg:

Detaljer

KONTROLL INSIDE MSOLUTION

KONTROLL INSIDE MSOLUTION KONTROLL INSIDE MSOLUTION Forandre renholdsteam eller renholdsdager på oppdrag I denne brukerveiledningen skal vi bruke bytte renholdsdager. Det skjer jo at vi bytter renholdsdager eller team på kunder.

Detaljer

Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

Eksamensoppgave i TDT4145 Datamodellering og databasesystemer Institutt for datateknikk og informasjonsvitenskap Eksamensoppgave i TDT4145 Datamodellering og databasesystemer Faglig kontakt under eksamen: Svein Erik Bratsberg: 99539963 Roger Midtstraum: 99572420

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i : INF3100/INF4100 Databasesystemer Eksamensdag : Tirsdag 8. juni 2004 Tid for eksamen : 09.00-12.00 Oppgavesettet er på : 5 sider

Detaljer

INF1300 Relasjonsalgebra og SQL, mengder og bager. Lysark for forelesning v. 2.1

INF1300 Relasjonsalgebra og SQL, mengder og bager. Lysark for forelesning v. 2.1 INF1300 Relasjonsalgebra og SQL, mengder og bager. Lysark for forelesning v. 2.1 Dagens temaer Relasjonsalgebraen Renavning Algebra Heltallsalgebra Klassisk relasjonsalgebra Mengdeoperatorer Union Snitt

Detaljer

HTML5. Skjemaer på nettsider. Skjemaer med. Informasjonsteknologi 1 og 2. Gløer Olav Langslet Sandvika VGS

HTML5. Skjemaer på nettsider. Skjemaer med. Informasjonsteknologi 1 og 2. Gløer Olav Langslet Sandvika VGS Skjemaer med HTML5 Gløer Olav Langslet Sandvika VGS Leksjon 10 Informasjonsteknologi 1 og 2 Skjemaer på nettsider I denne leksjonen skal vi se litt nærmere på bruk av skjemaer på nettsider. Du har sett

Detaljer

Hva kjennetegner god relasjonsdatabasedesign? Eksempel: Grossistdatabase versjon 1

Hva kjennetegner god relasjonsdatabasedesign? Eksempel: Grossistdatabase versjon 1 Hva kjennetegner god relasjonsdatabasedesign? Skjemaene samler beslektet informasjon: Tekstlig nærhet (samlokalisering i skjema) gjenspeiler logisk nærhet Brudd på dette har en tendens til å påtvinge dobbeltlagring

Detaljer

RUTEPLANLEGGINGSSYSTEM BRUKERVEILEDNING

RUTEPLANLEGGINGSSYSTEM BRUKERVEILEDNING RUTEPLANLEGGINGSSYSTEM BRUKERVEILEDNING Prosjekt 18 Jørgen Mobekk Sørensen Morten Evje Tor Andreas Baakind Anders Gabrielsen Side 1 1 FORORD Dette dokumentet er brukerveiledningen, og skal være en veiledning

Detaljer

Normalformer utover 4NF (ikke pensum)

Normalformer utover 4NF (ikke pensum) UNIVERSITETET I OSLO Normalformer utover 4NF (ikke pensum) Institutt for Informatikk INF3100 - Ellen Munthe-Kaas 1 Høyere normalformer, oversikt 1NF BCNF 4NF ETNF RFNF = KCNF SKNF 5NF INF3100 - Ellen Munthe-Kaas

Detaljer

Relasjonsdatabasedesign. Ekstramateriale: Normalformer utover 4NF (ikke pensum)

Relasjonsdatabasedesign. Ekstramateriale: Normalformer utover 4NF (ikke pensum) UNIVERSITETET I OSLO Relasjonsdatabasedesign Ekstramateriale: Normalformer utover 4NF (ikke pensum) Institutt for Informatikk INF3100-26.1.2012 Ellen Munthe-Kaas 1 Høyere normalformer, oversikt 1NF BCNF

Detaljer

Kom i gang hefte Visma Avendo Fakturering

Kom i gang hefte Visma Avendo Fakturering Kom i gang hefte Visma Avendo Fakturering Velkommen som bruker av Visma Avendo Fakturering. Dette heftet er til hjelp for deg slik at du skal komme i gang med programmet ditt etter at du har installert

Detaljer

Relasjonsdatabasedesign

Relasjonsdatabasedesign UNIVERSITETET I OSLO Relasjonsdatabasedesign Flerverdiavhengigheter Høyere normalformer Institutt for Informatikk INF3100-1.2.2016 Ellen Munthe-Kaas 1 Flerverdiavhengigheter FDer uttrykker "en Y for hver

Detaljer

Fakturabehandling på web

Fakturabehandling på web Visma Enterprise Fakturabehandling Versjon 2009.2 Fakturabehandling på web II Kurs fra Visma Unique Visma Unique sin opplæringsvirksomhet har som mål å gi deg muligheten for en systematisk og grundig systemopplæring

Detaljer

Notater: INF1300. Veronika Heimsbakk 8. januar 2013

Notater: INF1300. Veronika Heimsbakk 8. januar 2013 Notater: INF1300 Veronika Heimsbakk veronahe@student.matnat.uio.no 8. januar 2013 Innhold 1 ORM 3 1.1 Setningers aritet......................... 3 1.2 Faktatyper og broer i ORM................... 3 1.3

Detaljer

Relasjonsdatabasedesign

Relasjonsdatabasedesign UNIVERSITETET IOSLO Relasjonsdatabasedesign Flerverdiavhengigheter Høyere normalformer Institutt for Informatikk INF3100-1.2.2011 Ellen Munthe-Kaas 1 Flerverdiavhengigheter Generalisering av FDer Flerverdiavhengigheter

Detaljer

Relasjonsdatabasedesign

Relasjonsdatabasedesign UNIVERSITETET I OSLO Relasjonsdatabasedesign Normalformer Institutt for Informatikk INF3100-20.1.2014 Ellen Munthe-Kaas 1 Hvordan dekomponere tapsfritt Fagins teorem Gitt en relasjon R(XYZ) med FDer F.

Detaljer

Realiseringsalgoritmen fra ORM til relasjoner Intro til mengdeskranker i ORM

Realiseringsalgoritmen fra ORM til relasjoner Intro til mengdeskranker i ORM IN2090 Databaser og datamodellering Realiseringsalgoritmen fra ORM til relasjoner Intro til mengdeskranker i ORM Mathias Stang (mjstang@ifi.uio.no) 3. oktober 2018 1 Repetisjon: Relasjoner relasjonsskjema

Detaljer

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

Repetisjon: (nesten) alt du trenger å kunne om ORM og realisering INF1300 Introduksjon til databaser Repetisjon: (nesten) alt du trenger å kunne om ORM og realisering Mathias Stang (mjstang@ifi.uio.no) 21. november 2016 Agenda Hensikten med ORM-modellering Hva er lov

Detaljer