Løsningsslag eksamen i IN112 14.12.1992 1 A Symbolene σ, π og betegn henholdsvis seleksjon, projeksjon og naturlig join. Akt-utlån σ ER-NULL(Returdato) IDAG - Lånedato > 28 (Utlån) Svar1 Lån Akt-utlån Bok Avdeling Svar π Navn, Adresse, Forfatt, Tittel (Svar1) SELECT Navn, Adresse, Forfatt, Tittel FROM Avdeling A, Lån L, Bok B, Utlån U WHERE ER-NULL(Returdato) IDAG - L.Lånedato > 28 A.Avdelingskode = L.Avdelingskode L.Lån-nr = U.Lånnr U.ISBN = B.ISBN U.Eksemplar = B.Eksemplar 1 B Mk: 4NF og 5NF ikke elest, så vi godtar svarene BCNF og 5NF (=PJNF) om hvandre. Avdeling: Lån: Bok: Utlån: Ingen avhengighet ut ov de som komm fra primærnøkkelen. Svar: BCNF BCNF (en ekstra kandidatnøkkel ødelegg ikke normalmen). At ISBN (Forfatt, Tittel, Utgivelsesår), strid mot 2NF siden ISBN bare en del av primærnøkkelen. Svar: 1NF. Siden (ISBN, Lån-nr, Lånedato) Eksemplar, vil (ISBN, Lån-nr, Lånedato) (ISBN, Eksemplar, Lånedato) som primærnøkkelen. Følgelig (ISBN, Lån-nr, Lånedato) en kandidatnøkkel og Utlån BCNF. (Dette en felle. Vi vent at mange gode student vil svare 3NF. Ikke godta svaret BCNF hvis det ikke begrunnet.) For å få BCNF, må Bok splittes i to: Bok (ISBN, Forfatt, Tittel, Utgivelsesår) og Eksemplar (ISBN, Eksemplar, Kjøpsår) henholdsvis ISBN og (ISBN, Eksemplar) som primærnøkl. 1 C Avd π Avdelingskode (Avdeling) Lån π ISBN, Eksemplar, Avdelingskode (Utlån Lån Avdeling) Svar π Forfatt, Tittel (Bok Lån div Avd)
1 D Dette spørsmålet fra den kursoriske delen av pensum. Spørsmålet kan puffes, det vil si at alle strykkarakt dette punktet rettes til 4,0. Hv av tabellene i relasjonsmodellen blir til en posttype i nettvksmodellen. H kan/bør følgende attributt fjnes da de finnes implisitt i CODASYL-settene: Avdelingskode i Lån ISBN, Eksemplar og Lån-nr i Utlån Dessuten vi følgende CODASYL-sett: Settnavn Avdeling Ei System Medlem Avdeling Settnavn Bøk Ei System Medlem BOK Settnavn Avd-låne Ei Avdeling Medlem Lån Settnavn Låns-utlån Ei Lån Medlem Utlån Settnavn Bøks-utlån Ei BOK Medlem Utlån De to siste bør muligens spesifises "Retention is mandatory" og "Instion is automatic", men det krev vi ikke at studentene kan. H en skisse: AVDELING LÅNER UTLÅN BOK Avdlåne Lånsutlån Bøksutlån Programmet: Les første lem Bok i Bøk; while DB-STATUS = 0 do begin Les første lem Utlån i Bøks-utlån; while DB-STATUS = 0 do begin if ER-NULL(Returdato) IDAG - L.Lånedato > 28 then begin Les ei Lån i Låns-utlån; Les ei Avdeling i Avd-låne; SkrivLinje(Navn, Adresse, Forfatt, Tittel); end; Les neste lem UTLÅN i Bøks-utlån; end; Les neste lem BOK i Bøk; end;
2 A Lagstatus (Lag-stat) {Lag,Ind} Øvelse (Ø#) {Landevei,Gate,Velodrom} Øvelsestype (Ø-type) Kjønn (Sex) {K,M} deltar i Påmelding meldt Lengde (m) {A,P} Amatørstatus (Am-stat) Land (Nasjkode) av meldt Antall (#) H kan kanskje den øvste 5-are kombinte entydigheten fjnes. Dessuten kan (selvfølgelig) Påmelding også uttrykkes som en kombint entydighet mellom Land og Øvelse. 2 B Etappe Øvelse Gateløp i runden Etappenr Antall rund i rund start /mål start i {N,Ø,S,V} Gate (Gatenavn) går i Retning (Retning) Lengde (m) Etappe kan (selvfølgelig) også uttrykkes som en kombint entydighet mellom Gateløp og Etappenr. Dessuten altså Gate og Gateløp sammen entydige Etappe. Det å objekte setningen Etappe ekvivalent å si at (Gateløp, Etappenr i runden ) preft refanse Etappe.
2 C utfør Funksjon (F-kode) Hjelp Pson (P#) het Navn lagled lagled tilhør Deltak Start Land Amatørstatus Kjønn Påmelding H legen (og lagleden) tatt blant hjelpne. Det OK å ha egne subtyp dem. Mk dobbeltrollestriksjonen som si at lagleden i den troppen han/hun led. Mk at vi får vi tre "Equivalence of path"-restriksjon fra Start til henholdsvis Kjønn, Amatørstatus og Land. 2 D kaptein Tid (hh:mm:ss) resultat resultat Startnr Bruddstatus (B-stat) Øvelse Start Den unære setningen " kaptein" ekvivalent en binær setning til en Boolsk variabel. Subset-restriksjonen si at bare kaptein kan få registrt tid. Følgelig må alle deltagne være kaptein i de individuelle øvelsene.
2 E Refanseklass kodekontroll : Amatørstatus, Kjønn, Øvelsestype, Lagstatus, Retning, Bruddstatus. Alle andre refanseklass undtrykkes. I de øvrige klassene primærnøklene fete og kandidatnøklene undstreket: Øvelse: Påmelding: Ø#, Øvelsestype, Lagstatus, Kjønn, Amatørstatus, Lengde Ø#, Land, Antall-meldt Gateløp: Ø#, Antall-rund-i, Start/mål Etappe: Pson: Hjelp: Deltag: Land: Start: Etappenr, Ø#, Gatenavn, Retning, Lengde P#, Navn, Land P#, Funksjon P#, Kjønn, Amatør-status Nasj-kode, P#--lagled Start-nr, Ø#, P#, Er-kaptein, Tid, Bruddstatus I oppgaveteksten det bedt om at tabellbeskrivelsene skal gjøres SQL. Det bør legges større vekt riktig grupping enn riktig SQL-syntaks. Som eksempel følg en SQL-definisjon i (tilnærmet) Ingres syntaks av relasjonen Start: CREATE TABLE Start ( Start-nr INT (4) NOT NULL, Ø# INT (4) NOT NULL, P# INT (4) NOT NULL, Er-kaptein INT (4) NOT NULL, Tid DATE, Brudd-status CHAR (1) ) CREATE UNIQUE INDEX StartIndeks-1 ON Start (Start-nr, Ø#) CREATE UNIQUE INDEX StartIndeks-2 ON Start (Ø#, P#) Den eneste restriksjonen som må/bør kommentes dobbeltrollestriksjonen som si at lagedne må komme fra det landet de laglede. Riktig uttrykt i relasjonsalgebra restriksjonen: r(land) r(π Nasjon,P# (Pson))
2 F SELECTStart.Ø#, Start-nr, Navn, Tid, Nasjon FROM Start, Pson, Øvelse WHERE Øvelsestype = 'Gateløp' Øvelse.Ø# = Start.Ø# Pson.P# = Start.P# ORDER BY Start.Ø#, Tid 2 G SELECTNavn, Nasjon, Lengde, Øvelsestype FROM Start, Pson, Øvelse WHERE Øvelse.Ø# = Start.Ø# Start.P# = Pson.P# Øvelse.Kjønn = 'K' Øvelse.Amatør-status = 'P' Start.tid IN [SELECT MIN(Tid) FROM Start S WHERE S.Ø# = Start.Ø# OR [ Start.Tid = NULL EXISTS ( SELECT * FROM Start S1, Pson P WHERE S1.P# = P.P# P.Nasjon = Pson.Nasjon S1.Er-kaptein S1.Tid IN ( SELECT MIN(Tid) FROM Start S2 WHERE S2.Ø# = S1.Ø# ) ) ] ] ORDER BY Nasjon Den innste hakeparentesen finn lagsyklist samme lag som kapteinen beste tid.