Eksamen DAT 1000 B besvarelse PDF

Title Eksamen DAT 1000 B besvarelse
Course Database
Institution Universitetet i Sørøst-Norge
Pages 5
File Size 168.1 KB
File Type PDF
Total Downloads 321
Total Views 344

Summary

Oppgave 1.Oppgave 2A)SELECT CONCAT(Fornavn, " ", Etternavn) AS Navn FROM Spiller WHERE Etternavn LIKE 'M_%__%' ORDER BY Etternavn, Fornavn; B) SELECT Hall, Hall, COUNT(*) AS AntallKamper FROM Hall, Reservasjon, Bane WHERE Reservasjon_BaneNr = Bane AND Bane = Hall AND Reservasjon BETWEEN CURDATE() - ...


Description

Eksamen DAT1000 Vår 2021

Oppgave 1.

Oppgave 2 A) SELECT CONCAT(Fornavn, " ", Etternavn) AS Navn FROM Spiller WHERE Etternavn LIKE 'M_%__%' ORDER BY Etternavn, Fornavn; B) SELECT Hall.HallNavn, Hall.KontaktPersonTlf, COUNT(*) AS AntallKamper FROM Hall, Reservasjon, Bane WHERE Reservasjon.Bane_BaneNr = Bane.BaneNr AND Bane.HallNr = Hall.HallNr AND Reservasjon.ReservertFra BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE()

Eksamen DAT1000 Vår 2021 GROUP BY Hall.HallNr, Hall.HallNavn; C) UPDATE Abonnement SET PrisMnd = PrisMnd + 1.05 WHERE TypeAbonnement = 'Hobby'; D) SELECT s.SpillerId, Fornavn, PrisMnd + (COUNT(r.Spiller_SpillerId)*(PrisTime*2)) AS Beløp FROM Spiller AS s, Abonnement AS a, Reservasjon AS r WHERE s.TypeAbonnement = a.TypeAbonnement AND s.SpillerId = r.Spiller_SpillerId AND Month(r.ReservertFra) = 11 GROUP BY s.SpillerId; E) BøHallen ønsker å finne ut hvilke spillere som er registrert men har abonnement hos andre haller en dem. Dette vil de gjøre for å kunne lage bedre markedsføring strategier for å tilltrekke nye kunder. Lag derfor en spørring som finner alle spillere som har abonnement andre steder enn i Bø. Ta med fullt navn i en kolonne, og telefonummer så BøHallen kan kontakte dem.

SELECT CONCAT(Fornavn, " ", Etternavn) AS Navn, Telefonnummer FROM Spiller AS s, Abonnement AS a WHERE s.TypeAbonnement = a.TypeAbonnement AND NOT EXISTS (SELECT HallNr FROM Hall WHERE HallNavn = 'BøHallen') GROUP BY s.SpillerId; F) 2019-10-04 ble alle kampene spilt i en konkurranse i BøHallen. For å få en oversikt

Eksamen DAT1000 Vår 2021 over alle resultatene blir du bedte om å lage en lesbar tabell som gir oversikt over resultater på alle banene. Du blir også bedt om å ta med navnet på hallen.

SELECT r.BaneNr, ScoreLag1, ScoreLag2, Dato, HallNavn FROM Resultat AS r LEFT OUTER JOIN Hall ON r.HallNr = Hall.HallNr GROUP BY ResultatNr HAVING r.Dato = '2019-10-04'; G) CREATE VIEW AlleMatcher AS SELECT s.Etternavn, r.* FROM Spiller AS s, Resultat AS r, SpillerDeltok AS sd WHERE s.SpillerID = sd.Spiller_SpillerId AND sd.Resultat_ResultatNr = r.ResultatNr AND Year(r.Dato) = Year(CURRDATE());

Oppgave 3. a) Bestilling(PNr, Navn, Pris, SNr, Fornavn, Etternavn, Tidspunkt, Antall) Uheldige med denne tabellen: Hver gang ett spesielt PNr blir gitt så blir det gitt samme Navn og Pris, samme med SNr, hvert SNr har samme fornavn og etternavn. Dette skaper redundas altså dobbelt lagring. Dette gjør data dårligere strukturert og gjør det krevende å oppdatere tabellen. Funksjonelle avhengigheter: PNr, SNr, Dato -> Alle Kolonner PNr -> Navn, Pris SNr -> Fornavn, Etternavn Kandidatnøkkel: PNr, SNr, Dato 1NF: Alle kolonner er ikke-atomære, det er altså ingen lister i lister, godkjent på normalform 1.

Eksamen DAT1000 Vår 2021 2NF: Det er to partielle avhengigheter: PNr -> Navn, Pris. SNr -> Fornavn, Etternavn. Jeg tar derfor ut disse avhengighetene og lager to nye tabeller. Jeg velger å sette Dato som PK også, for en kunde kan kjøpe en flere ganger. Bestilling(PNr*, SNr*, Dato, Antall) Spiller(SNr, Fornavn, Etternavn) Produkt(PNr, Navn, Pris) Godkjent på normalform 2. 3NF: Det er ingen transitive funksjonelle avhengigheter, godkjent på normalform 3. Godkjent på Boyce-Codd normalform, ingen PK som bestemmer andre PK. Tabellene med eksempeldata: Bestilling(15, 104, ‘2021-05-16 15:39’, 2) Spiller(104, ‘Peder’, ‘Aas’) Produkt(15, ‘Padelracket Pro X’, 949.00)

b) Eksempler på rettigheter jeg ville gitt brukere: Jeg ville gitt spillere rettigheter til å kunne registrere resultat selv, dette er hensiktsmessig fordi det blir for mye jobb for en database administrator å registrere alle resultater hver gang noen har spilt. Spillere bør også få se hvilket abonnement de har, og prisene det medfører, samt hvilken hall de tilhører. Spillere bør også få se hvilke andre spillere som står på samme reservasjon, dette er fordi de må kunne få se hvem de skal spille med. For å gi en spiller mulighet til å oppdatere eller hente data kan man bruke GRANT kommandoen. Eksempel er: CREATE USER Bruker1 GRANT UPDATE ON Resultat TO Bruker1. GRANT SELECT ON Reservasjon TO Bruker1. Denne første spørringen gir lov til å oppdatere Resultat mens den andre gir lov til å se data på Reservasjon. Man kan enkelt ta disse bort med REVOKE som har motsatt effekt av GRANT.

c) Måter å kunne begrense hva som er lovlig inndata til en databasetabell: Jeg har valgt å vis eksempler fra to måter fra pensum = 1. CHECK. 2. lage en ny tabell som inneholder bare de lovlige inndataene. CHECK= Check er en constraint som man kan bruke for å sette gitte verdier som en kolonne må ha. Denne kan brukes med CREATE TABLE når man oppretter

Eksamen DAT1000 Vår 2021 tabellen, eller senere med ALTER TABLE. Eksempel på CHECK i Oppgave 1 kan være: CREATE TABLE Abonnement( TypeAbonnement VARCHAR(45), PrisMnd DECIMAL(8,2), PrisTime DECIMAL(8,2), HallNr INT, SpillerId, PRIMARY KEY(TypeAbonnement), FOREIGN KEY HallNr REFRENCES Hall(HallNr), CHECK(TypeAbonnement = ‘LiteSpill’);

Abonnement kan også peke på en tabell som heter TypeAbonnement(LiteSpill, MyeSpill) med boolean verdier. Men dette er lite hensiktsmessig sånn som jeg laget diagrammet i oppgave 1. I mitt eksempel er CHECK best å bruke.

Kilder: https://www.w3schools.com/mysql/default.asp Brukt bare til å dobbeltsjekke navn på forskjellige operatorer...


Similar Free PDFs