TENTAMEN DATABASKUNSKAP ITEK12 Tid: Fredag den 19 oktober kl. 9-00-12.00, sal D409 Tillåtna hjälpmedel: Endast papper och penna. Poäng: Maxpoäng: 56. Gräns för G: 50%. Gräns för VG: 75%. Om något som verkar oklart: Skriv några rader om hur du uppfattar frågan. Petter ringer till tentavakten efter 30 min och kollar om det uppstått några frågor. Lycka till önskar Petter och Patrick
DEL 1 INSTALLATION AV MICROSOFT SQL SERVER Fråga 1 (9p) När man installerar Microsoft SQL Server bör man konfigurera systemet på ett visst sätt för att erhålla god prestanda samt säkerhet. Besvara nedanstående delfrågor om detta. a) Det är viktigt att välja rätt COLLATION under installationen av SQL Server. Varför är detta viktigt och vad påverkas av valet av COLLATION? b) SQL Server har ett default-konto, kallat SA (för "System Administrator"), med fullständiga rättigheter på databasinstansen. Hur bör man konfigurera detta konto? c) Man kan konfigurera tre olika protokoll i SQL Server för själva kommunikationen med klienter, nämligen Shared Memory, Named Pipes samt TCP/IP. Vad bör man tänka på under installationen när det gäller konfigureringen av TCP/IP protokollet? Varför? DEL 2 LAGRADE PROCEDURER, CURSORS, TRANSAKTIONER, FUNKTIONER OCH TRIGGERS Antag att följande SQL satser har körts när du besvarar nedanstående frågor. CREATE TABLE Loner (Lon DECIMAL (7,2) NOT NULL) CREATE TABLE Anstalld ( Anr INT NOT NULL PRIMARY KEY, Namn VARCHAR (25) NOT NULL, Lon DECIMAL (7,2) NOT NULL ) INSERT INTO Anstalld VALUES (1, 'Adam', 1000.00), (2, 'Bertil, 2000.00), (3, 'Cesar', 3000.00), (4, 'David', 4000.00), (5, 'Erik', 5000.00)
Fråga 2 (9p) Den lagrade proceduren P1 finns definierad i databasen. Besvara nedanstående delfrågor angående den lagrade proceduren. CREATE PROCEDURE P1 ( @Anr INT, @Tillagg DECIMAL (7,2) = 0.00, @Antal INT OUT ) AS DECLARE @BasLon DECIMAL (7,2), DECLARE @Lon DECIMAL (7,2) DECLARE Anstalld_Cursor CURSOR FOR SELECT Lon FROM Anstalld ORDER BY Anr ASC SELECT @BasLon = Lon FROM Anstalld WHERE Anr = @Anr SET @BasLon = @BasLon + @Tillagg OPEN Anstalld_Cursor FETCH NEXT FROM Anstalld_Cursor INTO @Lon WHILE @@FETCH_STATUS = 0 IF @BasLon > @Lon INSERT INTO Loner VALUES (@Lon) ELSE IF @BasLon < @Lon CONTINUE INSERT INTO Loner VALUES (@Lon) ELSE BREAK INSERT INTO Loner VALUES (@Lon) FETCH NEXT FROM Anstalld_Cursor INTO @Lon
CLOSE Anstalld_Cursor DEALLOCATE Anstalld_Cursor TRAN T1 INSERT INTO Loner VALUES (6000.00) COMMIT TRAN T1 TRAN T2 INSERT INTO Loner VALUES (7000.00) ROLLBACK TRAN T2 SELECT @Antal = COUNT (*) FROM Loner a) Vilket värde innehåller variabeln @Antal efter att nedanstående SQL kod körts? DECLARE @Antal INT EXEC P1 3, 1000.00, @Antal OUT PRINT 'Antal=' + CONVERT(VARCHAR, @Antal) b) Vad returnerar nedanstående SELECT sats efter att SQL koden i deluppgift a) körts? Anta att tabellen Loner är tom innan koden i deluppgift a) körts. SELECT * FROM Loner c) Vad innebär uttrycket @@FETCH_STATUS = 0? Fråga 3 (4p) a) Vilka olika typer av AFTER triggers kan man skapa på en tabell? b) En trigger följer ECA-reglerna. Vad står ECA för och vad innebär dessa tre regler?
DEL 3 UPPBYGGNADEN AV DATABASER PLUS SQL Fråga 4 (11p) Du har just fått arbete som IT-tekniker på ett medelstort företag Grattis! PÅ IT-avdelningen har man nyligen bestämt att man ska dokumentera mjukvarulicenser för varje anställd, för att underlätta framtida kommunikation och uppgraderingar. Du åtar dig att skapa ett förslag till databas för systemet. Du får reda på att företaget består av ett antal avdelningar och att en anställd bara kan höra till en avdelning, Varje anställd kan förstås ha många mjukvarulicenser eftersom företaget använder många olika mjukvaror (MS Office, Adobe Creative Suite, IT-avdelningens egna program etc), men de behöver inte nödvändigtvis ha någon licens alls (vaktmästarna saknar licenser exempelvis). Systemet ska även innehålla information om vilket nätverksuttag den anställda har (om något). Skapa en objektmodell över systemet. Skapa därefter ett ER-diagram med kardinaliteten utsatt för hela systemet. ER-diagrammets entiteter ska motsvara tabellerna i en databas. Skriv ut attributen (=kolumnnamnen) på valfritt sätt för de olika entiteterna. Du behöver däremot INTE rita ut databasens tabeller. Gör antaganden där du saknar information från texten, och förklara dina antaganden (t.ex. gällande kardinalitet). Fråga 5 (11p) En biblioteksdatabas har ett antal böcker. Boktiteltabellen ser ut som följer nedan. ( ForfID är författarens ID, som hämtats från tabellen Forfattare, där för- och efternamn, födelseår mm återfinns för varje författare.) Utlan är antalet gånger som boken lånats ut. En tabell som inte syns här har koll på varje exemplar av en specifik titel. En annan tabell listar de språk som böckerna är skrivna på.) Titel (Exempel) titelid int 77 forfid int 12 sprakid tinyint 2 namn varchar(50) Romeo and Juliet utgivningsar smallint 2008
utlan int 52 hyllplacering varchar(10) Hc skapad datetime 2008-04-1315:21:20 uppdaterad datetime 2008-04-1315:21:20 uppdaterad_av char(2) LR Forfattare (Exempel) forfid int 12 enamn varchar(30) Shakespeare fnamn varchar(30) William landid smallint 3 fodd smallint 1564 dod smallint 1616 skapad datetime 2005-10-0310:52:13 uppdaterad datetime 2009-02-2709:22:41 uppdaterad_av char(2) JS Skriv kod i MS Sql för följande: A. Lista förnamn, efternamn och födelseår för författare som är födda efter 1912. Sortera på i första hand efternamn, i andra hand förnamn, i tredje hand årtal (tänk telefonkatalog). B. Lista alla boktitlar av Shakespeare, sorterade i titelordning. C. Uppdatera posten Macbeth i titeltabellen: Ändra årtalet 1609 till 1606. D. Ta bort alla böcker som inleds med Testbok (dvs Testbok1, Testbok2 etc, som någon skapade när systemet byggdes och som glömdes kvar)
DEL 4 TEORI (UR BOKEN) Fråga 6 (8p) Redogör för följande begrepp: a) Primärnyckel b) Konsistens c) Referensintegritet alt. integritetsvillkor d) Rollback Fråga 7 (4p) Vad är en sql injection attack? Beskriv och ge exempelkod!