diff --git a/ov8/ing_db_ov8_egendb(2).docx b/ov8/ing_db_ov8_egendb(2).docx new file mode 100644 index 0000000..38f2146 Binary files /dev/null and b/ov8/ing_db_ov8_egendb(2).docx differ diff --git a/ov8/ing_db_ov8_egendb(2).docx.pdf b/ov8/ing_db_ov8_egendb(2).docx.pdf new file mode 100644 index 0000000..685ca95 Binary files /dev/null and b/ov8/ing_db_ov8_egendb(2).docx.pdf differ diff --git a/ov8/solution.pdf b/ov8/solution.pdf new file mode 100644 index 0000000..0d441c7 Binary files /dev/null and b/ov8/solution.pdf differ diff --git a/prev_exams/ex17/oppg1b.md b/prev_exams/ex17/oppg1b.md new file mode 100644 index 0000000..76703b0 --- /dev/null +++ b/prev_exams/ex17/oppg1b.md @@ -0,0 +1,41 @@ +PERSON(__person_id__, navn, epost, telefon) + +ANSATT(__person_id__\*, timelønn, ansettelsesår) + +LEDER(__ansatt_id__\*) + +PROSJEKTLEDER(__leder_id__\*) + +INGENIØR(__ansatt_id__\*) + +ADMINISTRATIV(__ansatt_id__\*) + +EKSTERN(__person_id__\*, rolle, tekst) + +KUNDE(__kundenr__\*, navn, addresse, epost, telefon) + + +PROSJEKT(__prosjektnr__, kunde\_id*, styringskomite\_id\*, referansegruppe\_id\*, kontrollgruppe\_id\*, effektmål_id\*, navn) + +DELPROSJEKT(__prosjektnr__*, __delprosjektnr__, forutsetter\_delprosjektnr\*, budsjett, sluttdato\_plan, sluttdato\_faktisk) + +FASE(__fasenr__, (prosjektnr, delprosjektnr)\*, budsjett, startdato\_plan, startdato\_faktisk) + +AKTIVITET(__aktivitetsnr__, forutsetter\_aktivitetsid\*, beskrivelse, budsjett\_ing, budsjett\_adm) + + +GRUPPE(__gruppe_id__) + +STYRINGSKOMITE(__gruppe_id__\*) +REFERANSEGRUPPE(__gruppe_id__\*) +KONTROLLGRUPPE(__gruppe_id__\*) + +GRUPPEMEDLEMSKAP(__gruppe_id__\*, __person_id*__) + +ARBEIDSTIMER(__ukenr__, __aktivitetsnr__\*, __ansatt_id__\*, timer) + +MÅL(__målnr__, formulering, status) +EFFEKTMÅL(__målnr__\*) +RESULTATDELMÅL(__målnr__\*) + +RESULTATDELMÅLTILHØRIGHET(__resultatdelmål__\*, __prosjektnr__\*, __delprosjektnr__\*) diff --git a/prev_exams/ex18/oppg1.rel b/prev_exams/ex18/oppg1.rel new file mode 100644 index 0000000..d8d7c5b --- /dev/null +++ b/prev_exams/ex18/oppg1.rel @@ -0,0 +1,90 @@ +kunde ( + __kundenr__ + navn, + adresse, + telefon, + epost +) + +dyreart ( + __art_id__, + navn, +) +rase ( + __rase_id__, + art_id*, + navn, +) + +vaksine( + __vaksine_id__, + navn +) + +vaksine_krav ( + __vaksine_krav_id__, + vaksine_id*, + art_id*, + rase_id*, + alder, +) + +vaksine_utfort ( + __vaksine_utf_id__, + vaksine_krav_id*, + dyr_id*, + dato, +) + +dyr ( + __dyr_id__, + rase_id* + eier_id* + fode_aar, + bur_alene, + bur_husstand +) + +dyr_kunde_henting ( + __dyr_id__* + __kundenr__* +) + +opphold ( + __dyr_id__, + dato_fra, + dato_til, +) + +bhageavtale ( + __bhageavtale_id__, + dyr_id*, + dato_fra, + avtaletype, -- 0=fast med prosent, 1=klippekort (klipp=antall gjenværende), 2=dropin + prosent, + klipp, +) +bhageopphold ( + __bhageopphold_id__, -- Denne ID-en er nok til å fastslå klippekort/avtale-id + bhageavtale_id*, + dato, +) + +arrangement ( + __arrangement_id__, + navn, + beskrivelse, + dato_fra, + dato_til, + tid_fra, + tid_til, + pris +) + +arrangement_paamelding ( + __paamelding_id__, + arragenement_id*, + dyr_id*, + mottatt_diplom, +) + diff --git a/prev_exams/ex18/oppg2.sql b/prev_exams/ex18/oppg2.sql new file mode 100644 index 0000000..e527047 --- /dev/null +++ b/prev_exams/ex18/oppg2.sql @@ -0,0 +1,44 @@ +-- Oppgave 2 a (forslag 1) +SELECT DISTINCT STED.stedsnavn FROM ETAPPE +LEFT JOIN STED ON STED.sted_id = ETAPPE.til_stedid OR STED.sted_id = ETAPPE.fra_stedid +LEFT JOIN LØP_ETAPPE ON LØP_ETAPPE.enr = ETAPPE.enr +LEFT JOIN LØP ON LØP.lnr = LØP_ETAPPE.lnr +WHERE LØP.lnr = 1 AND LØP.aar = 2018 +ORDER BY STED.stedsnavn; + +-- Oppgave 2 a (forslag 2) +SELECT DISTINCT S.stedsnavn +FROM STED S, ETAPPE E, LØP_ETAPPE LE, LØP L +WHERE S.sted_id = E.til_stedid OR S.sted_id = E.fra_stedid +AND E.enr = LE.enr +AND LE.lnr = L.lnr +AND L.lnr = 1 AND LE.aar = 2018 +ORDER BY S.stedsnavn; + +-- Oppgave 2 b +SELECT e.distanse, s_f.stedsnavn AS fra, s_t.stedsnavn AS til FROM ETAPPE e +LEFT JOIN STED s_t ON s_t.sted_id = e.til_stedid +LEFT JOIN STED s_f ON s_f.sted_id = e.fra_stedid +LEFT JOIN LØP_ETAPPE le ON le.enr = e.enr +LEFT JOIN LØP l ON l.lnr = le.lnr +WHERE l.lnr = 1 AND l.aar = 2018 +ORDER BY le.løpenr; + +-- Oppgave 2 c +SELECT DISTINCT d.deltnr, d.navn FROM DELTAKER d +WHERE d.deltnr IN + (SELECT d.deltnr, COUNT(*) AS antall FROM DELTAKER d + LEFT JOIN TIDTAKING t ON t.deltnr = d.deltnr + WHERE t.lnr = 1 AND t.aar = 2018 AND t.fullført = 1 + GROUP BY d.deltnr + HAVING antall = 4); + +-- Oppgave 2 d +CREATE VIEW finnmark_deltaker AS +SELECT d.deltnr, COUNT(e.enr) AS etapper, SUM(t.tid) AS tot_tid FROM DELTAKER d +LEFT JOIN TIDTAKING t ON t.deltnr = d.deltnr +LEFT JOIN LØP l ON l.lnr = t.lnr +LEFT JOIN LØP_ETAPPE le ON le.lnr = l.lnr +LEFT JOIN ETAPPE e ON e.enr = le.enr +WHERE l.løpsnavn = "Finnmarksløpet" AND l.aar = 2018 AND t.fullført = 1 +GROUP BY d.delntr; diff --git a/prev_exams/ex19/oppg1.puml b/prev_exams/ex19/oppg1.puml new file mode 100644 index 0000000..9c58371 --- /dev/null +++ b/prev_exams/ex19/oppg1.puml @@ -0,0 +1,135 @@ +@startuml + + +Entity sykehus { + * sykehusnr + -- + * navn + * adresse + * telefon +} + +Entity bygning { + * bygningbokstav {PPK} + -- + * areal +} + +Entity avdeling { + * avdelingsnr + -- + * navn + * forkortelse + * resepsjon_etasje +} + +Entity avdeling_poliklinisk { +} + +Entity avdeling_senger { + * sengeplasser +} + +Entity avdeling_labratorium { + * tilbud +} + +Entity person { + * personnr + -- + * fornavn + * etternavn + * adresse + * telefon +} + +Entity ansatt { + * ansettelsesår + * lisensår + * kompetanse +} + +Entity sykepleier { +} +Entity lege { +} +Entity fastlege { +} + +ansatt -|> person +sykepleier --|> ansatt +lege --|> ansatt +fastlege --|> lege + +Entity fastlegeforhold { + * dato + -- + * personnr + * fastlegenr +} + +fastlegeforhold "1..*" -- "0..1" person +fastlegeforhold "1..*" -- "1..1" fastlege + + +ansatt "0..*" - "1..1" avdeling : jobber i + +avdeling_labratorium --|> avdeling +avdeling_senger --|> avdeling +avdeling_poliklinisk --|> avdeling + +avdeling "0..*" - "1..1" bygning : er i + +/' avdeling "0..*" -- "1..1" sykehus '/ +bygning "0..*" - "1..1" sykehus : er del av + + + +/' PASIENT '/ + +Entity pasient { +} + +pasient --|> person + +Entity henvisning { + * henvisningsnr + -- + * tekst + * dato +} + +diamond henvisningsdiamond + +henvisningsdiamond .. henvisning +henvisningsdiamond "0..*" -- "1..1" avdeling : henviser til +henvisningsdiamond "0..*" -- "1..1" fastlege : henvist av +henvisningsdiamond "0..*" -- "1..1" pasient + +Entity innkalling { + * innkallingsnr + -- + * dato +} +innkalling "0..1" -- "0..1" henvisning : som følge av +innkalling "0..*" -- "1..1" avdeling : til +innkalling "0..*" -- "1..1" pasient + + +Entity opphold { + * oppholdnr + -- + * dato + * avslutningsdato + * notattekst +} +opphold "0..*" -- "1..1" avdeling : til +opphold "0..*" -- "0..1" pasient +opphold "0..1" -- "0..1" innkalling : som følge av +innkalling "0..1" -- "0..1" opphold : som følge av +opphold "0..*" -- "1..*" ansatt +opphold "0..*" -- "1..1" lege : ansvarlig + + + +@enduml diff --git a/prev_exams/ex19/oppg1.rel b/prev_exams/ex19/oppg1.rel new file mode 100644 index 0000000..725599c --- /dev/null +++ b/prev_exams/ex19/oppg1.rel @@ -0,0 +1,29 @@ +SYKEHUS(__sykehusnr__, navn, adresse, telefon) +BYGNING(__sykehusnr__*, __bygningbokstav__, areal) + +AVDELING(__avdelingsnr__, (sykehusnr, bygningbokstav)*, navn, forkortelse, resepsjon_etasje) + +AVDELINGPOLIKLINISK(__poliavdelingsnr__*) +AVDELINGSENGER(__sengeavdelingsnr__*, sengeplasser) +AVDELINGLABRATORIUM(__labavdelingsnr__*, tilbud) + + +PERSON(__personnr__, fornavn, etternavn, adresse, telefon) +PASIENT(__pasientpersonnr__*) +ANSATT(__ansattpersonnr__*, ansettelsesår, lisensår, kompetanse) +LEGE(__legepersonnr__*) +FASTLEGE(__fastlegepersonnr__*) +SYKEPLEIER(__sykepleierpersonnr__*) + +FASTLEGEFORHOLD(__fastlegepersonnr__*, __personnr__*, __dato_start__) + +HENVISNING(__henvisningsnr__, fastlegepersonnr*, avdelingsnr*, pasientpersonnr*, tekst, dato) + +INNKALLING(__innkallingsnr__, pasientpersonnr*, avdelingsnr*, resultatav_henvisningsnr*, dato) + +OPPHOLD(__oppholdsnr__, ansvarlig_legepersonnr*, pasientpersonnr*, avdelingsnr*, resultatav_innkallingsnr*, dato_start, dato_slutt, notat) + +(På disse tre (henvisning, innkalling, opphold) kunne vi kanskje laget primærnøkler av flere attributter (avdeling, pasient, lege, dato, etc.), men vi har ingen garanti for at disse er unike. Samme lege kan for eksempel henvise en pasient til samme avdeling av flere årsaker til samme tid.) + + +OPPHOLDTILHØRIGHET(__oppholdsnr__*, __ansattpersonnr__*)