Add prev exams and ov8

This commit is contained in:
Felix Albrigtsen 2023-01-20 22:11:15 +01:00
parent bb35fdcdd7
commit 17d7ee1aed
8 changed files with 339 additions and 0 deletions

Binary file not shown.

Binary file not shown.

BIN
ov8/solution.pdf Normal file

Binary file not shown.

41
prev_exams/ex17/oppg1b.md Normal file
View File

@ -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__\*)

90
prev_exams/ex18/oppg1.rel Normal file
View File

@ -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,
)

44
prev_exams/ex18/oppg2.sql Normal file
View File

@ -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;

135
prev_exams/ex19/oppg1.puml Normal file
View File

@ -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

29
prev_exams/ex19/oppg1.rel Normal file
View File

@ -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__*)