Oblig 3 Databaser vår 2011 Dette arbeidskravet er en videreføring av arbeidskrav 2, og tester modellering i tillegg til SQL. Oppgaven består av en individuell og en gruppedel. En gruppe skal bestå av 2-3 personer. Med flere deltagere blir det fort for mange kokker og faren er stor for at læringsutbyttet blir svært ulikt for medlemmene i gruppa. Alle skal levere både individuell- og gruppedel på Fronter, som hvert sitt dokument (en på gruppa leverer gruppedelen, registrerer det som en gruppeoppgave og setter på medlemmer), og det er viktig at gruppesammensetning dokumenteres. Får du problemer med innleveringen er det viktig at du søker hjelp med en gang, enten ved å gå til HelpDesk eller ved å snakke med Elin eller Per-Olav (veileder/gruppelærer). For hjelp med Fronter, se: http://www.hiof.no/fronterhjelp Frist for innlevering: Tirsdag 29/3-2011 kl. 14:00 Krav til oppgave: Man skal ha gjort helhjertede forsøk på å løse alle oppgaver. Jobb jevnt og trutt med oppgavene, og spør om hjelp dersom det er noe du lurer på. Hver student må levere et anonymt evalueringsskjema for å få sitt arbeidskrav godkjent. Til forskjell fra de andre arbeidskravene rettes gruppedelen av dette arbeidskravet av veiledere, altså Jørgen, Per-Olav, Kristoffer og Elin. Den individuelle delen retter dere som før for hverandre. Man beholder "rettepar" fra oblig1, men de som ikke ble fordelt den gang, vil bli fordelt av Elin 30/3-2010. Hvert par får som sist tilsendt den andres oppgave på epost. Fasit og rettemal som skal brukes under rettingen legges ut på Fronter. Alle grupper bli innkalt til veiledning, der gruppeoppgaven blir gjennomgått. På døra til Elin (rom DU1-023) vil det henge en plastmappe med et evalueringsskjema for arbeidskravet (dette er et annet skjema enn det for oblig 1 og 2). Evalueringen er anonym, og skal ikke merkes med navn eller dato. Retteark leveres i individuell mappe på Fronter (som for oblig 1), mens evalueringsskjema for arbeidskravet leveres i resepsjonen ved hovedinngangen. Resultat av evalueringen bli lagt ut på Fronter straks det foreligger.
Individuell del Oppgave 1 a) Hva er et VENN-diagram, og hva kan det brukes til? b) Lag et lite og enkelt eksempel som viser bruk av VENN-diagram Oppgave 2 Denne oppgaven handler om litt videregående SQL, og vi skal bruke databasen med 24timersløp fra oblig1 som utgangspunkt. I besvarelsen skal du legge inn: de 5 første radene av det returnerte svaret på spørringen antall rader som returneres. a) Hent ut en liste med fornavn, etternavn, nasjonalitet, fødselsår, løpsår, antall løp for løpsår og antall kilometer tilbakelagt totalt dette året. Lista skal sorteres synkende etter antallet kilometer slik at den som har tilbakelagt flest kilometer kommer først. b) Noen personer har parenteser i fornavnet sitt. Finn fornavn, etternavn, fødselsår og nasjonalitet for alle disse deltagerne. Hver deltager skal bare listes opp en gang. c) Finn de personene som har parenteser i fornavnet sitt, men også er registrert med samme navn uten parenteser. Bare fornavn skal listes opp (både den med og uten parenteser). Det finnes både en enkel og en mindre enkel løsning på denne, men dere kan velge fritt :) d) I MySQL og PostgreSQL finnes en funksjon for å hente ut en del av en tekststreng. For eksempel kan du i PostgreSQL skrive substr('harald', 1, 3) og i MySQL kan du skrive substring('harald', 1, 3), og du vil da få 'Har' som resultat. Bruk dette og dine erfaringer med GROUP BY for å hente ut en liste over antall personer med samme forbokstav i etternavn. Jeg kan som en ekstra hjelp opplyse om at det er 1557 personer som har etternavn som begynner på bokstaven B. e) Bruk LIMIT for å finne ut hvilken forbokstav som forekommer i flest etternavn. f) Bruk ALL for å finne ut hvilken forbokstav som forekommer i flest etternavn.
g) Bruk LIMIT for å finne ut hvilken forbokstav som forekommer i nest flest etternavn. h) Finn navn på arrangementssteder der det er arrangert mer enn 4 løp noensinne. i) Finn navn og alder (her må du regne, og jeg vil at ALIAS skal brukes for å skrive Alder som tittel på kolonnen ved utskrift) for alle personer med æ, ø eller å (både store og små bokstaver) i enten fornavn eller etternavn. Hver person skal bare listes opp en gang. j) Bruk streng-konkatinering til å skrive ut fullt navn (altså fornavn og etternavn) på formen "Per Olsen" (fnuttene skal ikke med), og totalt antall kilometer tilbakelagt for alle deltagere som i 2010 løp kortere totalt enn minst en annen deltager. Resultatene skal sorteres synkende på totalt antall kilometer. Tips: ANY k) Slett alle data i res24timerlop og landskode i riktig rekkefølge l) Slett tabellene res24timerlop og landkode i riktig rekkefølge Oppgave 3 Denne oppgaven handler om litt videregående SQL og endring av tabellstrukturer. Alle oppgaver der spørringer returnerer et svar, skal følgende ligge inne i besvarelsen: de 5 første radene av de returnerte svarene antall rader som returneres antall kolonner som returneres Databasen dere nå skal jobbe med inneholder data fra Meteorologisk Institutts internettportal eklima ( http://sharki.oslo.dnmi.no/portal/page? _pageid=73,39035,73_39049&_dad=portal&_schema=portal ). Jeg har lastet ned data for dere for diverse værstasjoner i Norge og gjort disse om til INSERT-setninger som er lagret på fil. Jeg har også laget filer for opprettelse av tabellene. Alle filer ligger på Fronter. Filer: stasjoner-create.sql,, stasjoner-utf8.sql a) Opprett tabellen i terminalen. For mysql: mysql -u brukernavn -p -D databasenavn \. stasjoner-create.sql For psql: psql -f stasjoner-create.sql -d databasenavn -U brukernavn
b) Legg inn data i tabellene i terminalen. For mysql: mysql -u brukernavn -p -D databasenavn \. stasjoner-utf8.sql For psql: psql -f stasjoner-utf8.sql -d databasenavn -U brukernavn c) Finn ut hvor mange rader som finnes i tabellen eklimastasjon d) Finn ut hvor mange unike stasjonsnummer som finnes i tabellen eklimastasjon. Du skal lage to spørringer: En som lister opp alle (enklest) og en som bruker COUNT e) Finn navnet på de kommunene som ikke har har stasjoner av typen 'VK'. Det kan finnes noen som heter VK1, VK2 osv også, og disse skal også med i unntaket. Vis tre forskjellige løsninger, og ta tiden på hver av løsningene: 1: Ved bruk av IN 2: Ved bruk av differanse (EXCEPT) 3: Ved bruk av EXISTS. f) Les om indekser. Indekser kommune (Vis SQL-kode for dette). Kjør spørringen på nytt, og ta tiden igjen. Gikk det fortere? Kommenter. g) Finn ut hvor langt det er i grader fra nord til sør?: 1) Medregnet Svalbard og havområdet i sør og nord 2) Kun fastlands-norge Bruk ALIAS til å legge på tittelen "Grader fra nord til sør" over svarkolonnen Legg ved kontrollspørring som verifiserer at svar på 2 er korrekt, dvs at data er hentet fra fastlands-norge h) Finn det mest vanlige stasjonsnavnet i Norge. i ) Finn fylket med flest og færrest stasjoner i landet. Utskrift skal skje på en linje på formen: **** har flest stasjoner mens **** har færrest stasjoner. Hint: Streng-konkatinering. j) Finn ut hvor mange stasjoner av typen 'N' (ikke N1, N2 osv) som finnes i 'Vest-Agder' k) Strukturen i eklimastasjon er ikke ideell. For eksempel inneholder kommunenr både kommunenr og fylkesnr, slik at fylkesnr i realiteten er lagret flere ganger.
Hvilke problemer kan dette skape i forhold til endring av data i tabellen? La eklimastasjon-tabellen ligge, og lag en ny og splittet eklimastasjon2, der fylker og kommuner har egne tabeller og kommunenr består av to tegn. l) Lag INSERT-statements for å legge data inn i de nye tabellene. Hint: Dette gjøres med spørringer mot den originale eklimastasjon-tabellen. m) Endre ved hjelp av en spørring i kommunetabellen og to spørringer i fylketabellen slik at kommuner, fylker og regioner får navn som begynner på stor bokstav, men fortsetter med bare små, for eksempel slik at FINNMARK blir Finnmark. Ikke gjør endringen for fylker eller kommuner med bindestrek eller mellomrom i navnet. Disse skal du liste opp (oppgi spørring), og deretter endre manuelt. Oppgave 4 Denne oppgaven handler om utsnitt (views). Du skal bruke de nye tabellene fra oppgave 2 i denne oppgaven. a) Lag et utsnitt som viser bare stasjoner av type 'A'. Utsnittet skal inneholde stasjonsnavn, kommune og fylke. Test utsnittet ved å finne ut hvor mange stasjoner av type 'A' som finnes i Finnmark. b) Lag et utsnitt der du kobler sammen de nye tabellene i oppgave 2 slik at du gjenskaper den gamle eklima-tabellen. Du trenger ikke gjenskape de store bokstavene for fylke, kommune og region. c) Lag et utsnitt på denne igjen hvor du bare lister opp de stasjonsnavn som finnes, og antall av hvert stasjonsnavn. d) Bruk utsnittet i c til å skrive en SELECT-setning som henter ut det mest vanlige stasjonsnavnet e) Sett i lys av løsning på oppgave 2h og 3d: Hvilke fordeler og ulemper ser du ved å løse denne oppgaven ved hjelp av utsnitt? f) Finn definisjonen av viewet i oppgave b i systemtabellene. Oppgave 5 Denne oppgaven handler om datamodellering. Du kan velge om du vil bruke penn og papir, MySQL WorkBench eller Modelator til denne oppgaven. a) 1. Treningskjedene TRÅKK, HOLD, HAL, DRA og SPENN har treningssentre over hele landet.
Tegn en datamodell for kjeder med sentre. Informasjon av relevans vil være nr, navn, adresse og telefon, i tillegg til hvilke sentre som er tilknyttet hvilken kjede. Modellen skal være normalisert! 2. Hvert treningssenter tilbyr ulike treningsaktiviteter til sine kunder. En treningsaktivitet inngår i en kategori (for eksempel utholdenhet, styrke, avspenning osv) og denne igjen har en eller flere underkategorier (for eksempel spinning, roing, yoga osv). Utvid datamodellen for å få med denne informasjonen. Modellen skal fortsatt være normalisert! 3. De forskjellige treningssentrene har også kunder, og disse skal kunne bestille treningsaktiviteter. En kunde kan være medlem at flere treningssentre. En kunde kan bestille samme type aktivitet flere ganger på samme dag. Utvid datamodellen for å få med denne informasjonen. Modellen skal fortsatt være normalisert! Tilleggsspørsmål: Hva må gjøres hvis man ønsker å legge inn et maks antall deltagere på en aktivitet? b) Du er dataansvarlig i firmaet "Øystre Slidre Røsk og Riv". Firmaet driver med salg av trelast, og driver også med rivningsoppdrag på si. Firmaet skal innføre et nytt system for ordre- og faktura-håndtering, og du er satt til å tegne en datamodell for dette systemet. Systemet skal håndtere kunder, varesortiment, ordrebestillinger og utsending av faktura til kunde. Du trenger ikke ta med informasjon om firma, men ordreog fakturastatus skal med. Modellen skal være normalisert! Oppgave 6 Denne oppgaven handler om mengdelære. Gitt følgende mengder: R = {'a', 'k', 't', 'i', 'v', 2009, 2011, 2013} I = {'s', 'k', 'i', 2000, 2011} M = {'s', 'o', 'l', 1999, 2010} a) Hva er Ø? b) R U I c) R U I U M
d) R I e) R M f) M R g) I \ M h) M \ I i) R \ I j) R \ R Oppgave 7 Denne oppgaven handler om operatorrekkefølge. a) ( 4 + 4 ) / ( 2 * 2 ) + 2 = b) 2 * ( 6 * ( 9 + 7 ) - 3 * ( 6-2 ) = c) 4 + 2 * 7-36 / ( 3 * 3 ) + ( 3 + 9 ) / 2 = d) 2 * ( 8 + 8 ) / 8 * 22 = e) 2 * 2 + 7 * 7-4 * 3 / 2 * 6 =
Gruppedel Oppgave 1 Nansen-løpet Nansen-løpet er et løp for joggende mosjonister som arrangeres av Tistedalen Friluftslag (TFL). Løpet er på 30 kilometer og går i skogsterreng fra Remnevannet via Fritjof Nansens Hotell ved Bjellåstjern til Ertehytta i Halden. Systemet skal håndtere påmelding av deltagere, betaling(ordre, faktura), resultater, funksjonærer, innkjøp og fordeling av varer til mat- og drikkestasjoner, overnattingsinformasjon (hvem, pris, sted osv i henhold til påmelding), transport (hvem, pris, sted osv i henhold til påmelding), lagring av skadeinformasjon (data fra Røde Kors, Norsk Folkehjelp eller lignende) og innlogging på deltagerweb. Når det gjelder skadeinformasjon skal ikke persondata lagres. Hver skade skal lagres som et case med kjønn, tidspunkt, skadested(navn og ant. km ut i løypa), skadetype, type underlag (sand, bark, asfalt, oppoverbakke, nedoverbakke osv flere underlag kan velges for samme skade...), om skaden førte til ambulansetur eller ble lappet på stedet, om skaden skjedde i løypa men ble lappet etter målgang osv (her er det lov å være kreativ, bare det er konstruktiv kreativitet). Husk lagring av historiske data (hva skal deltagere beholde av informasjon, og hva skal genereres på nytt hvert år?). a) Lag datamodell for dette systemet. Du kan velge om du vil bruke penn og papir, MySQL WorkBench eller Modelator til denne oppgaven. b) Verifiser at modellen er i 3. normalform ved å sjekke hver enkelt tabell i modellen for brudd på 1NF, 2NF og 3NF c) Opprett tabeller for å implementere løsningen i a. NB! Her vil vi ikke ha noen former for autogenererte CREATE TABLES fra MySQL Workbench, Modelator eller andre herligheter. d) Lag INSERT-statements for å fylle tabellene i b med minst 6 deltagere for 2 år og funksjonærer. Alle tabeller skal inneholde data! Lykke til!