Databaskunskap 7,5 högskolepoäng Provmoment: Ladokkod: Tentamen ges för: Namn: Personnummer: Individuell prövning 41E03B Öppen för alla Tentamensdatum: 2013-08-20 Tid: 09:00-13:00 Hjälpmedel: Inga hjälpmedel Totalt antal poäng på tentamen: 40 poäng För att få respektive betyg krävs: 3=20, 4=27, 5=34 Allmänna anvisningar: Skriv tydligt (oläsligt = fel)!! Numrera sidorna samt börja varje ny uppgift på nytt blad. Poängavdrag kan ges för onödigt komplicerade eller ostrukturerade lösningar. Rättningstiden är som längst tre veckor Viktigt! Glöm inte att skriva namn på alla blad du lämnar in. Lycka till! Ansvarig lärare: Tuve Löfström 033-435 42 36 Patrik Gustavsson (SQL)
ALLMÄNT 1. (3 p) En central tanke vid införande av ett databassystem är att separera definition och hantering av data i verksamheten från de olika applikationsprogrammen, så att flera applikationsprogram kan dela på samma data. Redogör för hur detta åstadkoms i ett databassystem. Beskriv vilka roller och ansvarsområden som finns och hur deras arbete säkerställer att delning av data är möjlig. 1. (2+2 p) Den kanske viktigaste fördelen med databaser jämfört med filbaserade system är ökade möjligheter till delning av data inom organisationen. a. Förklara detaljerat varför detta är svårt att åstadkomma i filbaserade system. Illustrera med ett utförligt exempel. b. Förklara detaljerat varför databassystem möjliggör delning av data. Illustrera med ett utförligt exempel. 2. (1+1+2 p) a) Vad är en vy? Ge en formell definition och en förklaring med egna ord. b) Ge exempel på en del av ett databasschema (med relationer och attribut) och en vy på den. c) Hur kan vyer användas för att förenkla användarnas arbete mot databasen? Redogör i detalj för två olika möjligheter. RELATIONSMODELLEN 3. (2 p) Vad är redundans och varför är det önskvärt att minimera redundansen i en databas? 4. (1+2 p) a. Vad innebär referensintegritet? Förklara med egna ord. b. Förklara varför referensintegritet är nödvändigt för att upprätthålla datakvalitet i en databas. Illustrera gärna med exempel. REALISERING 5. (2 p) Definiera och förklara följande begrepp: a. Tupel b. Kardinalitet c. Ställighet d. Domän 6. (1+1+1 p) För att hantera samtidig åtkomst till data i en databas används transaktioner. a) Vad är en transaktion och vilka krav måste den uppfylla? b) Vilka problem kan uppstå när flera transaktioner försöker komma åt samma data? Diskutera dels generellt och illustrera med ett exempel. c) Det finns två huvudsakliga ansatser för att lösa dessa problem. Vilka är de? Ge en kortfattad beskrivning av ansatserna. 1
MODELLERING 7. (2 p) Vid realiseringen av en ER-modell så skall vissa samband omvandlas till tabeller. Beskriv vad som kännetecknar de samband som leder till att en ny tabell måste skapas och vilka egenskaper som kännetecknar en sådan tabell. Ge ett exempel för minst en av de samband som du har beskrivit. 8. (3+3 p) Ett företag består av anställda som arbetar på olika kontor. Varje kontor har en chef som också är anställd. Företaget hyr ut bilar och varje bil har därför en fast dygnshyra, förutom antal platser och en milhyra. Varje anställd ansvarar för ett antal bilar. En bil kan bara hyras ut till en kund i taget. Både kunder och anställda är personer som har namn och telefonnummer. En anställd har lön. Kontor har, förutom adress, även en total hyresintäckt som är summan av hyran (dygnshyra + milhyra * antal körda mil) för alla bilar som hanteras av dess anställda och som beräknas en gång vid varje månadsskifte. a. Rita en ER-modell med attribut utifrån ovanstående beskrivning. b. Realisera er ER-modell från a. Realiseringen skall innehålla attribut och tabeller. Ni behöver inte ange främmande nycklar och kan välja att representera lösningen som ett relationsschema, eller i diagramform (på motsvarande sätt som diagrammen i SQL Server). 2
SQL 9. (6 p) Längst bak i tentan finns en bilaga som innehåller ett schema samt motsvarande tabeller för ett hyrbilsbokningssystem. Systemet registrerar bokningar av fordon för företagets kunder. En kund bokar ett fordon från ett visst datum till ett visst datum. En bokning kan ha ett av tre olika statuskoder {VäntarHämtning, Hämtad, Återlämnad}. Fem olika fordonstyper erbjuds kunderna {Liten, Mellan, Stor, Minibuss, Miljöbil}. Använd schemat samt tabellerna för att besvara frågorna nedan. I schemat står PK för Primary Key (primärnyckel) samt FK för Foreign Key (främmande nyckel). Kolumner markerade med fet stil i schemat accepterar inte NULL. a) Skriv en SQL sats som listar medeldagshyran per fordonstyp. Dessutom skall endast fordonstyper med en medeldagshyra större än 1600 visas i listan. Visa kolumnen Typ och medeldagshyran i resultatet samt sortera på Typ i fallande ordning. TIPS: Aggregatfunktionen AVG används för att beräkna medelvärdet av en kolumn, t.ex. AVG(kolumnnamn). b) Vad returnerar nedanstående SQL sats? SELECT Registreringsnummer FROM Fordon WHERE Registreringsnummer NOT IN ( SELECT DISTINCT Registreringsnummer FROM Bokning ); c) Skriv en SQL sats som uppdaterar Telefonnummer till "033xxxxxx" för samtliga kunder vars Ort innehåller ordet "Borås" och som inte har ett telefonnummer (dvs där Telefonnummer är lika med NULL). OBS! Ort kan alltså innehålla ord som "Borås", "xborås", "Boråsx" samt "xboråsx", där x utgör en sträng av godtycklig längd. d) Skriv en SQL sats som lägger till kunden nedan i tabellen "Kund". Kundnummer Fornamn Efternamn Adress Postnummer Ort Telefonnummer 5 Eva Karlsson Regementsgatan 1 54500 Skövde 0500101010 3
10. (3 p) Använd schemat i bilagan för att besvara nedanstående frågor. a) Skriv en CREATE TABLE sats för att skapa tabellen "Fordon" enligt schemat i bilagan. Inga kolumner skall acceptera NULL värden. b) Skriv en ALTER TABLE sats för tabellen "Fordon" som lägger till villkoret att Miltal måste vara större än 0. c) Vad är det för skillnad på att definiera en kolumn med datatypen CHAR(6) respektive VARCHAR(6)? d) Vad innebär det om en kolumn är definierad med ett default värde? 4
11. (3 p) Använd schemat i bilagan för att besvara nedanstående frågor. Följande trigger finns definierad: CREATE TRIGGER Fordonstrigger ON Fordon AFTER UPDATE AS BEGIN DECLARE @Registreringsnummer CHAR(6) DECLARE @Dagshyra1 DECIMAL(7,2) DECLARE @Dagshyra2 DECIMAL(7,2) DECLARE @AntalMil SMALLINT DECLARE Fordon_Cursor CURSOR FOR SELECT i.registreringsnummer, i.dagshyra, d.dagshyra, i.miltal - d.miltal AS AntalMil FROM INSERTED i JOIN DELETED d ON i.registreringsnummer = d.registreringsnummer OPEN Fordon_Cursor FETCH NEXT FROM Fordon_Cursor INTO @Registreringsnummer, @Dagshyra1, @Dagshyra2, @AntalMil WHILE @@FETCH_STATUS = 0 BEGIN IF @AntalMil > 0 AND @Dagshyra1 = @Dagshyra2 BEGIN UPDATE Fordon SET Dagshyra = @Dagshyra1 - (@AntalMil / 10) WHERE Registreringsnummer = @Registreringsnummer END END FETCH NEXT FROM Fordon_Cursor INTO @Registreringsnummer, @Dagshyra1, @Dagshyra2, @AntalMil END CLOSE Fordon_Cursor DEALLOCATE Fordon_Cursor a) Vad händer om nedanstående SQL sats körs? Anta att den UPDATE som körs inuti triggern inte utlöser triggern på nytt. UPDATE Fordon SET Miltal = 1100 WHERE Registreringsnummer IN ('ABC123', 'ADN274') b) Vad innehåller tabellerna UPDATED respektive DELETED under tiden triggern körs? c) Vad betyder uttrycket @@FETCH_STATUS = 0? d) Vilka olika typer av AFTER triggers kan man definiera på en tabell? 5
Kund PK Kundnummer INTEGER Fornamn Efternamn Adress Postnummer Ort Telefonnummer VARCHAR(20) VARCHAR(25) VARCHAR(50) CHAR(5) VARCHAR(20) VARCHAR(10) 1..* Bokning PK Bokningsnummer INTEGER FK1 Kundnummer INTEGER FK2 Registreringsnummer CHAR(6) FK3 Bokningsstatuskod SMALLINT Frandatum DATETIME Tilldatum DATETIME Betald BIT * Fordon PK Registreringsnummer CHAR(6) FK1 Fordonstypkod SMALLINT Modell VARCHAR(50) Miltal SMALLINT Dagshyra DECIMAL(7,2) AntalPassagerare SMALLINT Automat BIT 1..* 1..* Bokningsstatus PK Bokningsstatuskod SMALLINT Fordonstyp PK Fordonstypkod SMALLINT Status VARCHAR(15) Typ VARCHAR(20) Kund Kundnummer Fornamn Efternamn Adress Postnummer Ort Telefonnummer 1 Sven Svensson Solbacken 5 50636 Borås 033123456 2 Lotta Olsson Kyrkogatan 11 50912 Borås 033112233 3 Anders Andersson Sandvägen 7 41137 Göteborg 031332211 4 Tore Toresson Sjögatan 3 50812 Borås 033542312 Bokning Boknings Kund Registrerings Boknings nummer nummer nummer statuskod FranDatum TillDatum Betald 1 1 ADN274 2 2013-03-25 09:00:00 2013-04-05 09:00:00 1 2 2 KAD395 1 2013-05-01 18:00:00 2013-05-15 18:00:00 0 3 3 PPP409 1 2013-05-03 10:00:00 2013-05-10 18:00:00 0 4 4 LJF599 1 2013-05-07 08:00:00 2013-05-09 19:00:00 0 Fordon Registrerings Fordon Antal Modell Miltal Dagshyra nummer typkod Passagerare Automat ABC123 1 Toyota Aygo 1.0 1000 1000.00 4 0 LJF599 1 Volkswagen Golf 1.6 3000 1300.00 5 1 ADN274 2 Volkswagen Passat 2.0 1000 1350.00 5 1 AVE693 2 Opel Insignia 1500 1470.00 5 0 GPS935 3 Hyundai Sonata 1500 1750.00 5 1 HAP555 3 Volvo V70 2000 1630.00 5 0 BUS104 4 Volkswagen Sharan 3000 2000.00 7 1 KAD395 4 Volkswagen Transporter 2500 2150.00 9 1 PPP409 5 Saab 9-3 1000 1550.00 5 1 Bokningsstatus Fordonstyp Bokningsstatuskod Status Fordonstypkod Typ 1 VäntarHämtning 1 Liten 2 Uthämtad 2 Mellan 3 Återlämnad 3 Stor 4 Minibuss 5 Miljöbil 6