Gamle obliger laget av meg og Tom Heine Nätt

Endel kommentarer, innleveringsfrister og noen oppgaver er tatt bort

2005

Obligatoriske oppgaver

Oblig 1

  1. Fila coi_freelance.sql inneholder kode for å opprette og legge inn data i tre tabeller.
    Tabellene inneholder informasjon om freelance-journalister(freelancere), hvilke aviser de jobber for og hva slags spesialiteter de har.
    Legg inn tabellene i databasen deres på SQL Server eller Postgres, og skriv spørringene som gjør følgende:
    1. List opp all informasjon om alle freelancere
    2. List opp pers_id på alle freelancere
    3. List opp navn på alle aviser. Hver avis skal bare vises en gang
    4. List opp navnene på alle journalistene i VG
      Skriv tre spørringer; en som bruker vanlig kobling, en som bruker WHERE ... IN og en som bruker WHERE EXISTS
    5. List opp fornavn og etternavn på alle freelancere som ikke jobber i VG
    6. List opp alle freelancere som ikke har noe etternavn
    7. List opp alle freelancere som har Olsen i etternavnet sitt
    8. List opp alle freelancere som har akkurat Olsen som etternavn
    9. List opp alle freelancere med fornavn som begynner på 'An'
    10. List opp alle freelancere med etternavn som inneholder 'ls'
    11. List opp alle freelancere med både har fornavn som begynner på 'An' og etternavn som slutter på 'sen'
    12. Hvilke(n) avis mangler freelancere som jobber med sport
      Skriv to spørringer; en som bruker WHERE ... IN og en som bruker WHERE EXISTS
    13. Skriv ut freelancers fornavn, etternavn, avisnavn og spesialitet for alle freelancere
  2. Lag deg en database med minst to tabeller i relasjon til hverandre, for eksempel
    • cd-register
      Bør minst ha en tabell for generell cd-info og en for spor. Kan utvides med tabeller for artist og sjanger.
    • Gartneri med blomster
    • ferie- og fraværsregister
      1 tabell over ansatte, 1 over "events" og 1 som linker ansatte til et event i en viss periode
    • Idrettslag med utøvere og trenere
    • Idrettslag med grener(forball,håndball,...) og ledere
    • nettbutikk med leverandører og varer
      En tabell for leverandører, en for vare og en som knytter varer til leverandører.
      Hvis man vil kan man ta med kunde og bestilling også.
    Fyll databasen med litt data så du har noe å spørre på
    Lag 20 forskjellige queries/spørringer som bruker det du har lært hittil.
    Ta med type spørring, hva du skal gjøre, selve spørringen og resultatet.
  3. Finn 14 feil i dataene nedenfor. Forklar hva som er feil og hva som må gjøres for å rette opp feilen(NB! det er ingen feil i sql-en)
            CREATE TABLE inngjerding(
              inngjerding_id INTEGER NOT NULL,
              areal_kvm INTEGER,
              info VARCHAR(75),
              PRIMARY KEY(inngjerding_id)
            );
    
            CREATE TABLE dyr(
              dyr_id INTEGER NOT NULL,
              navn VARCHAR(25),
              sikkerhetsgrad INTEGER NOT NULL,
              type VARCHAR(15),
              fodt DATE,
              kjonn VARCHAR(4),
              vekt_kg FLOAT,
              inngjerding_id INTEGER NOT NULL,
              info VARCHAR(40),
              PRIMARY KEY(dyr_id),
              FOREIGN KEY(inngjerding_id) REFERENCES inngjerding,
              CONSTRAINT sjekkSikkerhetsgrad
                    CHECK(sikkerhetsgrad BETWEEN 1 AND 10),
              CONSTRAINT sjekkKjonn
                    CHECK(kjonn = 'Hann' OR kjonn = 'Hunn')
            );
    
       NB: I MS SQL Server heter dato-datatypen datetime, og inneholder både dato og tidspunkt
    	EB  
        
    inngjerding
    inngjerding_id
    areal_kvm info
    1 2500000 'Ypperlig grøntområde for tiger, apekatt osv. Noe lite'
    2 '300 000 kvm' ' Tørt område, ørkenlikt '
    3 10 'kun for undulater og papagøyer. sikret med bur'
    2 2 'edderkopper, taranteller, sommerfugler, termitter osv og planter som disse liker kan stues inn her. bur sikret med glass. '
    5 10000000 'For ulv og vilt. naturlig villskog'
    6 5 'bur for smågnagere
    dyr
    dyr_id
    navn sikkerhetsgrad type fodt kjonn vekt_kg inngjerding_id info
    1 'Salto' 1 'Tiger' '1988-01-01' 'Hann' 230.0 1 'Agressiv på gamle dager'
    2 'Pippi' 10 Undulat   'Hunn' 0.5 3 'Veldig lystig. plystrer la det swinge'
    3 'Kaptein Krok'   'Krokodille' 'November 1, 2000' 'Hann' 150.3 4 'Må ha daglig tilsyn pga et skadet bein'
    4 'Skalle' 5 'Skilpadde' '1975-10-10' 'Male' 30,7 5 'Kan bite hvis han blir sliten'
    5 'Baltazar' 0 'Tiger' '2003-04-15' 'Hann' 10.0 1 'Følger alltid sin mor, litt utrygg ennå'
    6 'Timbala' 1 'Tiger' 'juli 27, 1992' 'Hunn' 200.2 1 'Må vokte hennes bevegelser nøye når ungen skal vaksineres ol.'
    7 'Hilde' 7 'Ulv' '1997-12-01' Hunn ukjent 5 'Trenger en make'
  4. Finn eksempler på nettsteder og programvare som bruker databaser.
    Forklar enkelt hva nettestedene eller programvaren bruker databaser til og hvordan de gjør det.
Obligatoriske oppgaver

Oblig 2

Opprett følgende tabeller med gitte primær- og fremmednøkler

poststed
postnr(PK) poststed
'1767' 'Halden'
'1752' 'Halden'
'1753' 'Halden'
'1751' 'Halden'
'1781' 'Halden'
'1777' 'Halden'
'1765' 'Halden'
'1769' 'Halden'
'1723' 'Idd'
'1745' 'Holtet'
'1774' 'Halden'
'1784' 'Halden'
'1780' 'Halden'
'1793' 'Tistedal'
'1756' 'Halden'
'1757' 'Halden'
'1759' 'Halden'
'1754' 'Berg i Østfold'
'1742' 'Berg i Østfold'
'1798' 'Aremark'
'1776' 'Halden'
'1789' 'Berg i Østfold'
barnehage
organisasjonsnr(PK) navn adresse postnr(FK) tlf_nr åpningstid
965647841 'Solgløttheimen barnehage' 'Solgløttveien 32' '1767' '69 176548' '7-17'
963545782 'Dyreskogen barnehage' 'Torvildtoppen 3' '1752' '69 183256' '8-16'
967534543 'Veivalget barnehage' 'Prærieheia' '1742' '69 185431' '7-19'
967845325 'Blomsterenga naturbarnehage' 'Ertemoen 3' '1781' '69 178942' '7-16'
avdeling
avdelings_id(PK) barnehage(PK,FK) navn intern_tlf aldersgruppe ant_plasser str_kvm
1 965647841 'Administrasjon' '6548' null null null
2 965647841 'Blå' '6550' '0-3' 6 30
3 965647841 'Rød' '6551' '0-3' 10 50
4 965647841 'Grønn' '6552' '3-6' 15 75
5 965647841 'Gul' '6553' '3-6' 10 55
1 963545782 'Administrasjon' '3256' null null null
2 963545782 'Rev' '3260' '3-6' 8 30
3 963545782 'Ulv' '3261' '0-3' 6 30
4 963545782 'Ugle' '3262' '3-6' 5 25
1 967534543 'Spiren' '5435' '0-3' 5 25
2 967534543 'Grua' '6536' '3-6' 5 30
1 967845325 'Administrasjon' '8942' null null null
2 967845325 'Fjellfiol' '8940' '3-6' 5 40
3 967845325 'Engsoleie' '8941' '3-6' 10 50
ansatt
personnr(PK) navn adresse postnr tlf_nr barnehage(FK) avdeling(FK) stilling ansatt_siden utdannelse timelønn
'050771 64872' 'Siri Gustavsen' 'Sykehusgata 3' '1753' '69 181478' 965647841 1 'Styrer' '1999-01-01' '3 år Økonomi- og administrasjon' 120.15
'071067 64234' 'Eivind Gru' 'Storgata 10' '1751' '69 187534' 965647841 2 'Avdelingsleder' '1989-02-01' 'Førskolelærer' 109.60
'110871 32765' 'Inger Olavsen' 'Sykehusgata 42' '1781' null 965647841 2 'Assistent' '1997-08-15' 'Sykepleier' 102.30
'160561 65175' 'Roberta Hugu' 'Bakkegata 7' '1777' '69 187864' 965647841 3 'Avdelingsleder' '1989-02-01' 'Allmennlærer' 107.60
'180481 54801' 'Inger Merete Jansen' 'Vinkelstredet 1' '1765' '95 465721' 965647841 3 'Lærling' '2004-12-01' null null
'120379 65487' 'Solveig Kringvo' 'Kalvehaugbakken 7' '1769' '41 657820' 965647841 3 'Assistent' '2004-01-01' 'Barne- og ungdomsarbeider' 95.40
'180769 45874' 'Lise Juhlsen' 'Iddeveien 1056' '1723' '69 183487' 965647841 3 'Pedagog' '1992-04-20' 'Pedagog' 106.75
'160478 62304' 'Oline Karlsen' 'Skomakerstredet 5' '1752' '69 176452' 965647841 4 'Avdelingsleder' '1997-05-31' 'Førskolelærer, Grunnfag Ledelse' 107.05
'140984 97601' 'Petter Jensen' 'Svenskegrensa 1076' '1745' '69 175981' 965647841 4 'Assistent' '2001-08-31' 'Barne- og ungdomsarbeider' 96.10
'171084 38245' 'Janne Pettersen' 'Storgata 16' '1751' null 965647841 4 'Assistent' '2001-08-31' 'Barne- og ungdomsarbeider' 96.10
'070359 87245' 'Hanne Jansen' 'Blåklokkeveien 15' '1774' '69 183408' 965647841 4 'Assistent' '1989-02-01' null 104.64
'121275 15047' 'Ellen Hansen' 'Skippergata 19' '1767' '95 024535' 965647841 5 'Avdelingsleder' '1995-04-01' 'Barne- og ungdomsarbeider, Grunnfag Ledelse' 107.05
'280253 14053' 'Ester Juliussen' 'Bratner Terasse 32' '1784' null 965647841 5 'Assistent' '1992-04-20' null 102.50
'130564 05879' 'Eilert Pedersen' 'Forstrømsvei 12' '1780' '41 568705' 965647841 5 'Spesialpedagog' '1991-10-14' 'Spesialpedagog' 106.75
'191171 32187' 'Atle Hansen' 'Sommeroveien 52' '1793' '69 196018' 963545782 1 'Styrer' '1995-08-01' 'Førskolelærer' 110.65
'010179 64528' 'Inge Trulsen' 'Garvergata 14' '1756' '93 547832' 963545782 2 'Avdelingsleder' '1995-09-01' 'Førskolelærer' 105.45
'060784 64024' 'Anne Johansen' 'Lensmann Knudsens vei 9' '1753' '93 452078' 963545782 2 'Assistent' '2003-05-01' 'Barne- og ungdomsarbeider, Grunnfag Ledelse' 99.95
'190668 42364' 'Ina Karlsen' 'Os Allé 17' '1757' '69 175037' 963545782 3 'Avdelingsleder' '1995-09-01' 'Førskolelærer' 105.45
'270877 13679' 'Lasse Hansen' 'Lerkestien 19' '1759' '95 024531' 963545782 3 'Assistent' '2000-01-01' 'Barne- og ungdomsarbeider' 101.40
'250667 82541' 'Juliette Croix' 'Bakketorp' '1754' '69 176523' 963545782 4 'Avdelingsleder' '1995-09-01' 'Barne- og ungdomsarbeider, Grunnfag barnehagepedagogikk' 105.45
'200478 65723' 'Anne Jensen' 'Prærieheia' '1742' '69 185432' 967534543 1 'Avdelingsleder' '2001-08-01' 'Førskolelærer' 105.50
'130272 45725' 'Petter Jensen' 'Prærieheia' '1742' '69 185432' 967534543 2 'Styrer' '1999-01-31' 'Spesialpedagog' 108.00
'120370 31687' 'Fredrik Haug' 'Lillebyåsen 32' '1798' '69 187210' 967845325 1 'Styrer' '2003-01-01' 'Førskolelærer' 110.10
'020473 29735' 'Helga Iversen' 'Karl Johansgt. 6' '1776' '41 672554' 967845325 2 'Avdelingsleder' '2003-01-01' 'Førskolelærer' 106.80
'140756 08732' 'Else Eilertsen' 'Gamle Sørhaugen 19' '1767' '69 183125' 967845325 3 'Avdelingsleder' '2004-01-01' 'Barne- og ungdomsarbeider, Grunnfag Ledelse' 105.10
'260278 43680' 'Flora Feih' 'Sponvikveien 785' '1789' '41 893457' 967845325 3 'Assistent' '2004-01-01' 'Barne- og ungdoimsarbeider' 100.30
  1. Diverse SQL

    1. Hent ut all informasjon om alle barnehager
    2. Hent ut personnr og navn på alle ansatte
    3. Hent ut navn på barnehage med organisasjonsnr lik 967534543
    4. Hent ut navn på alle ansatte uten utdannelse
    5. Hent ut personnr for Inge Trulsen
    6. Hent ut navn og intern_tlf for avdelinger med navn som inneholder 'Fiol' eller 'fiol'
    7. Hent ut informasjon om alle barnehager sortert på navn
    8. Hent ut informasjon om alle ansatte sortert på barnehage og deretter avdeling
    9. Hent ut antallet ansatte for barnehagen som har færrest ansatte
    10. Hent ut navnet på de(n) avdeling(-ene/-en) som har flest ansatte
    11. Hent navn og stilling for alle ansatte i 'Solgløttheimen barnehage'
    12. Hent ut navnet på alle ansatte som ikke jobber i Solgløttheimen barnehage
    13. Hent ut gjennomsnittlig antall plasser i avdelinger(ikke pr. barnehage, men totalt)
      Endre overskriften til Gjennomsnittlig antall plasser
    14. Hent ut navn og stilling for alle ansatte som jobber på samme avdeling i en barnehage.
      Sorter på barnehage, deretter avdeling
    15. Hent ut navnet på den barnehagen som har flest plasser, og antallet plasser den har
    16. Hent ut id, navn og str_kvm for den avdelingen i hver barnehage som har størst plass pr. barn
    17. Hent ut navn og antall plasser for avdelinger i Solgløttheimen barnehage som har flere plasser enn hvertfall en annen avdeling innenfor den samme barnehagen
  2. Svar på følgende spørsmål om SQL

Obligatoriske oppgaver

Oblig 3

Bruk barnehagedatabasen som utgangspunkt for oppgavene

Oppgaver som er merket (ekstra) er valgfrie å gjøre, men veldig nyttige

  1. Mer SQL: subqueries, gruppering, union, intersection, difference, alias

    Viktig: siden difference og intersection ikke er implementert i SQL Server, må denne bare skrives utifra boka og kan ikke testes
    Siden Postgres har implementert difference og intersection, kan de som bruker denne databasen få testet
    1. Skriv sql og resultat for oppgavene under.

      1. Skriv ut en liste med barnehagenavn, avdelings_id, navn og intern_tlf på alle avdelinger i alle barnehager
        Kall kolonnene navn i barnehage for 'Barnehage' og navn i avdeling for 'Avdeling'
      2. Skriv ut en liste med ansattnavn, barnehagenavn, avdelingsnavn og stilling på alle avdelinger i alle barnehager
        Kall kolonnen navn i ansatt for 'Ansatt sitt navn' og slå sammen navn i barnehage og navn i avdeling så det blir på formen 'Barnehage: Avdeling'
      3. Skriv ut en liste med hvor mange plasser hver barnehage har totalt
      4. Skriv ut navn, barnehage, avdeling, stilling og timelønn for de som har høyere eller lik timelønn enn gjennomsnittet på sin avdeling
        Sorter på barnehage, deretter avdeling.
        NB! Det er ikke lov å bruke et view for å løse oppgaven!
    2. Skriv sql og resultat for oppgavene under. Hvorfor blir resultatene som de blir?

      1. Skriv en union mellom to instanser av samme tabell.
        Kolonnen som skal hentes ut er navn, tabellen er barnehage
        (betyr at du skal: barnehage(navn) union barnehage(navn))
      2. Skriv en intersection mellom to instanser av samme tabell.
        Kolonnen som skal hentes ut er navn, tabellen er barnehage
      3. Skriv en difference mellom to instanser av samme tabell.
        Kolonnen som skal hentes ut er navn, tabellen er barnehage
      4. Bruk union til å finne de postnr som finnes enten i ansatt eller barnehage.
      5. Bruk intersection til å finne de postnr som finnes både i ansatt og barnehage.
      6. Bruk difference til å finne de postnr som finnes i ansatt, men ikke i barnehage.
  2. Oppdatering og sletting

    1. Endre etternavnet til 'Solveig Kringvo' til 'Solmo'
    2. Endre åpningstid for alle barnehager så de er åpne 30 minutter lenger
    3. Slett alle ansatte i 'Dyreskogen barnehage'
    4. Slett alle data i alle tabeller
    5. Slett alle tabeller
    6. Opprett alle tabeller og data igjen for å fortsette på oppgave 3
  3. Views

    1. Løs oppgave 1.1.d ved hjelp av et view
      1. Lag et view som inneholder navn på barnehage, avdeling og gjennomsnittslønn for ansatte pr. avdeling
      2. Skriv ut alle data fra viewet
      3. Finn den avdelingen med høyest gjennomsnittslønn. skriv ut barnehagens navn, avdeling og gjennomsnittslønna
      4. Finn den barnehagen med høyest summert gjennomsnittslønn(sum alle avdelinger pr. barnehage)
    2. Dette skal alle gjøre(men les alternativene videre først!):

      1. Lag et view for lønns- og utdanningsinformasjon om barnehageansatte.
        Viewet skal inneholde organisasjonsnr, navn på barnehage, avdelings_id, personnr, navn på ansatt, stilling, ansatt_siden, utdannelse og timelønn
      2. Hent ut all informasjon fra viewet
      3. Hent ut gjennomsnittlig lønn for ansatte i 'Solgløttheimen barnehage'
      4. Endre avdelings_id for 'Eivind Gru' til 3
      5. Endre avdelings_id for 'Roberta Hugu' til 2
      6. Øk lønnen til alle i 'Dyreskogen barnehage' som har jobbet der mer enn 5 år(fra 01.01.2000) med 2 kroner 40 øre
      7. Prøv å legge inn disse dataene:
        967534543 'Veivalget barnehage' 2 '140580 10305' 'Eva Olsen' 'Assistent' '2005-01-01' 'Barne- og ungdomsarbeider' 100.40

      For deloppgave 7:
      - Hva skjer når du prøver å legge inn dataene?
      - Hvorfor skjer dette?

      Slett og gjenopprett alle tabeller og data igjen for å fortsette på oppgave 4

  4. Relasjonsalgebra - teori

    Lag en oversikt over sammenhengen mellom SQL og relasjonsalgebra
  5. Relasjonsalgebra - praksis

    1. oppga
    2. oppgb
    3. oppgc

    For hver av uttrykkene nedenfor, svar på følgende:

    1. Hva gjør uttrykket?
    2. Skriv tilsvarende uttrykk som SQL
    3. Skriv ut resultatet
  6. Systemtabeller

    1. Lag et view som viser en oversikt over alle tabeller og kolonner i din database
    2. Lag et select-setning som skriver ut alt fra utsnittet.
      Resultatet skal leveres inn
    3. (ekstra)Gjør oppg. b, men skriv i tillegg ut en (P) bak de kolonnene som er primærnøkler
      (Hint: ligger i sysindexes og sysindexkeys)
    4. Hva skjer hvis du skriver delete from sysobjects; (eller tilsvarende i andre systemer)?
  7. (ekstra) Når vil du bruke en database istedenfor en fil(tekst, xml, binærfil), og når vil du velge motsatt?
    Begrunn svaret
    Hint: Tenk på hastighet, flerbrukere, recovery, transaksjoner, backup osv
Obligatoriske oppgaver - oblig 4

Oblig 4

    1. Tegn datamodell for barnehagedatabasen
    2. Hvis en ansatt skal kunne jobbe på flere avdelinger i samme barnehage, hvordan vil det påvirke datamodellen og databasedefinisjonen?
      Tegn ny modell.
    3. Hvis en ansatt skal kunne jobbe i flere barnehager, hvordan vil det påvirke datamodellen og databasedefinisjonen?
      Tegn ny modell.
    1. Slett og gjenopprett alle data i barnehage-databasen
    2. Endre tabelldefinisjonen i barnehage(med ALTER TABLE) ved å legge til kolonnen pris_pr_plass. Verdien 0 skal legges inn for de gamle dataene(dvs skal være default verdi og settes til dette)
    3. Hent ut alle data fra tabellen barnehage
    4. Oppdater prisene: Solgløttheimen(2500), Dyreskogen(2750), Veivalget(3000), Blomsterenga(2850)
    5. Hent ut alle data fra tabellen barnehage
    6. Slett og gjenopprett alle data i barnehage-databasen
  1. Lag et view som viser personnr, navn, barnehage, avdeling og ansatt_siden for alle ansatte
    1. Hent ut alle data fra viewet
    2. Prøv å legge inn følgende data, og forklar hva som skjer:
      personnr navn barnehage avdeling ansatt_siden
      '070178 74281' 'Heivor Hald' 963545782 3 '2000-05-01'
      '090569 19745' 'Kristoffer Skogen' 965647842 1 '2001-09-01'
      '020176 56321' 'Even Bentersen'     '2002-10-01'
      '090777 65346' 'Jens Ovesen' 967845325 2 '2002-07-04'
        'Anne Pettersen' 967845325 2 '2003-01-01'
    3. Hent ut alle data fra viewet og tabellen ansatt(2 spørringer)
    4. Sett navn for 'Hanne Jansen' til 'Hanne J. Hansger'
    5. Sett barnehage lik NULL for personnr '16047862304'
    6. Sett avdeling lik 5 for 'Inge Trulsen'
    7. Hent ut alle data fra viewet og tabellen ansatt(2 spørringer)
    1. Tegn ditt eget slektstre.
    2. Lag CREATE TABLE og INSERT INTO for treet(1 tabell, husk at folk kan ha like både fornavn og etternavn!, kjønn skal ikke lagres)
      Hint: Sirkulære referanser(=foreign key til egen tabell)
    3. Lag følgende spørringer
      1. Hent ut alle data fra tabellen
      2. Finn hvem som er foreldre til hvem. Kolonnenavn skal bli Person, Mor og Far og inneholde fullt navn på hver av de
      3. Finn hvem som er besteforeldre til hvem. Kolonnenavn skal bli Person, Mormor, Morfar, Farmor og Farfar og inneholde fullt navn på hver av de(litt vanskelig, men prøv hvertfall og forklar hva dere har tenkt hvis dere ikke får den til)
      4. Finn røttene i treet(deg selv+evt. barnløse personer)
      5. Finn alle blader i treet(de som mangler mor eller far) og hvem de mangler(Begge, Mor eller Far) TIPS: CASE
      6. Finn antall barn hver har
      7. Lag et view som viser navn og kjønn for alle personer. Kjønn kan være enten Mann, Kvinne eller Ukjent TIPS: CASE
  2. Lag en datamodell for et bibliotek.
    Biblioteket skal ha flere avdelinger(med id, navn og info), bøker(med bibliotekid, isbn, tittel, forfatter(flere), utgitt_år og forlag), lånere(med id, fødselsdato, navn, adresse, postnr og sted), sjanger(med id og navn), reservasjon(med id, bok, låner, reservasjonsdato), utlån(med uttid, innfrist, inndato og purring(flere)) og ansatte(med id og navn)
    Ansatte og bøker skal være koblet til en avdeling, mens lånere er tilknyttet hele biblioteket
    Legg inn egne entiteter og attributter etterhvert som du får behov for dem, og beskriv de forutsetninger du gjør underveis (linja over er et eksempel på en forutsetning).
Obligatoriske oppgaver

Oblig 5 og 6

Del 1

    1. Bilregister.

      Vi har et register over biler, eiere m.m.

      Chassisnr Kjennetegn Merke Type Årsmodell Eiers_personnr Eiers_navn
      787827342 AR-12345 Ford Escort 1994 12345678901 Jan Ek
      787923423 AD-98765 Opel Corsa 1998 23456789012 Ole Ek
      899231234 JU-78834 Volvo 242 1979 34567890123 Tor Ek
      1. Vi antar at eier gjelder nåværende eier, og at en bil ikke kan eies av mer enn en person. Hva kan/bør du velge som primærnøkkel her? Finnes det flere alternativer?
      2. Finn ut hvilken normalform som tabellen er på. Ta forutsetning om en gitt biltype bare tilhører ett merke (f.eks. kan ikke Escorter bli produsert av både Ford og Opel).
      3. Gjør om strukturen slik at den tilfredsstiller alle normalformer.
      4. En forenklet måte for å sjekke normalisering på, er å bruke kriteriet for BCNF direkte. Gjør dette i stedet for å drøfte hver normalform.
      5. Ta utgangspunkt i den opprinnelige tabellen. Anta i stedet at du systemet skal inneholde alle eierne som bilen har hatt. Analyser normalform på nytt, konkluder med normalform og gjør eventuelle splittinger som er nødvendig for at strukturen skal være godt normalisert.
    2. Vedlikehold av maskindeler.

      Et første forsøk på stuktur er dette:

      DelnrDelnavnMaskinnrSiste_vedlikeholdsdatoVedlikeholdsintervall

      Et tilleggsproblem er også at det kan finnes flere like deler i samme maskin, men som vedlikeholdes til forskjellige tider.

      1. Avgjør hvilken normalform den gitte stukturen er på.
      2. Normaliser denne strukturen mest mulig.
      3. Legg inn tilleggsproblemet som nevnt over, foreslå på nytt en struktur.
  1. Hvorfor denormaliserer man innimellom?

  2. Hvorfor er det en fordel å modellere før man lager databasen?

Del 2

I denne oppgaven skal du lage et system fra datamodell - over i en database - til ferdig prototype på applikasjon/grensesnitt.
Oppgaven kan velges fritt, bortsett fra at du ikke skal lage alt for vanlige ting (kundesystem, videoutleiesystem, ansattsystem)
  1. Datamodell

    a) Lag en normalisert datamodell for systemet du vi arbeide med.

    b) Forklar (min 1/2 - 1 side, gjerne mer) forutsetninger som du har lagt til grunn og/eller deler hvor du så ulike muligheter for design

    c) Gjør følgende med datamodellen deres:

    (Disse sammenslåingene skal ikke brukes senere i oppgaven.)

  2. Opprett alle tabeller og legg inn data

    Tenk på hva du skal bruke databasen til(php, javaprogram, ...) når du velger testdata. Lag noen spørringer som er logiske mhp bruksområder, og lag evt. view(s) ved behov.

  3. Lag et www-grensesnitt eller et program som bruker databasen fra oppgave 1 (leveres uke 6).
    Minimumskravet er at programmet/grensesnittet skal kunne koble seg til databasen og hente ut data, men det bør også kunne legge til og slette elementer, vise sorterte lister med forskjellige sorteringsvalg og foreta søk med begrensning. Dere trenger ikke legge mye vekt på design/utseende.
Obligatoriske oppgaver

Oblig 6

  1. Lag et www-grensesnitt eller et program som bruker databasen i oblig 5.
    Minimumskravet er at programmet/grensesnittet skal kunne koble seg til databasen og hente ut data, men det bør også kunne legge til og slette elementer, vise sorterte lister med forskjellige sorteringsvalg og foreta søk med begrensning. Dere trenger ikke legge mye vekt på design/utseende
  2. For de som har valgt minimumsløsninger, og ellers de som har lyst:
    Hvorfor er det laget noen generelle kommunikasjonsmetoder mot dbms(for eksempel jdbc, odbc osv)?
    Hint: tenk på bl.a. programmering mot database og skifte av database