Tentamen i Databasteknik



Relevanta dokument
Tentamen i Databasteknik

Tentamen. i Databasteknik. lördagen den 13 mars Tillåtna hjälpmedel: Allt upptänkligt material

Tentamen i Databasteknik

Tentamen i. Databasteknik

Övningar i SQL. SQLAccess.doc Ove Lundgren

Tentamen för 1E1601. Måndag 10 mars 2003, kl Alla hjälpmedel tillåtna

Dagens föreläsning. KTH & SU, CSC Databasteknik Föreläsning 10 sid 1

Fiktiv tentamen för DD1370 Databasteknik och informationssystem

Vad du skall komma ihåg från tidigare föreläsningar. Dagens föreläsning. Evaluering av frågor. Data dictionary

SQLs delar. Idag. Att utplåna en databas. Skapa en databas

Tentamen för DD1370 Databasteknik och informationssystem

Vad är en databas? Databaser. Relationsdatabas. Vad är en databashanterare? Vad du ska lära dig: Ordlista

Idag. Databaskvalitet(??) Databaskvalitet... Databaskvalitet...

Idag. 1. Från modell till databasstruktur. 2. Prata med databaser (frågepsråket SQL)

Från verklighet via modell till databas. Idag. Testa reglerna på varuhusmodellen. Från verklighet via modell till databas

Tentamen i Databasteknik

Exempel-Tentamen III

Tentamen för DD1370 Databasteknik och informationssystem

Idag. Hur skapar vi och underhåller en databas? DD1370 (Föreläsning 4) Databasteknik och informationssystem 7,5 hp Hösten / 20

Tentamen för DD1370 Databasteknik och informationssystem

Fiktiv tentamen för DD1370 Databasteknik och informationssystem

Lösningsförslag till fiktiv tentamen för DD1370 Databasteknik och informationssystem

ÖVNING 10 2NF Hästnamn, KursId, StartDatum, SlutDatum KursId NY! 3NF Hästnamn, Art, NY! NY! NY! NY! KursId, StartDatum, SlutDatum KursId NY!

Tentamen för DD1370 Databasteknik och informationssystem

DIVISIONSEXEMPEL RELATIONSALGEBRA OCH SQL. r s använder vi för att uttrycka frågor där ordet alla figurerar:

Lösningsförslag till Exempel tentamen

TER3. Försättsblad till skriftlig tentamen vid Linköpings universitet G28 TEN1 Webprogrammering och databaser Tentamen IDA 1 (7)

Karlstads Universitet, Datavetenskap 1

Tentamen plus lösningsförslag

Informationssystem och Databasteknik, 2I-1100 HT2001. Relationsalgebra. Relationsalgebran är sluten: R 1 op R 2 R 3.

Idag. Exempel. Exempel modellen (1) Exempel...

Lösningsförslag, tentamen i Databaser

Analytisk relationsdatabasdesign

Normalisering. Varför? För att åstadkomma en så bra struktur i databasen som möjligt med minimalt med dubbellagrad info.

Lösningsförslag Tentamen, 25 april 03

Lösningsförslag till tentamen för 1E1601

1.Lär känna MS SQL Observera. Tips. Förberedelse

Starta MySQL Query Browser

Labb LIVE. Exempelkod från föreläsningen. Plushögskolan Frågeutveckling inom MSSQL - SU14

Vad är en databas? Databaser. Relationsdatabas. Vad är en databashanterare? Vad du ska lära dig: Ordlista

TENTAMEN DATABASKUNSKAP ITEK12

Lösningsförslag till. tentamen för 1E1601

Lär känna MS SQL 2008 / Övning. Observera. Tips. Förberedelse

Innehåll MySQL Intro. Allmänt om Lagrade Procedurer Enkel utformning Skapa en lagrad procedur Använda parameter som indata

Lösningsförslag till Tentamen,

Pga att (Nummer och Typ) tillsammans bestämmer övriga attribut funktionellt väljer vi (Nummer, Typ) till primärnyckel:

SQL, nästlade delfrågor Nästlade delfrågor. En nästlda delfråga är ett select-from-where uttryck inom where-klausulen i en annan fråga.

TDDI60 Tekniska databaser

Tentamen Databasmetodik DB:DSK/FK/DVK/ATD/SP/EIT mfl. äldre kurstillfällen 8 augusti 2013 kl. 9-13

Tentamen DATABASTEKNIK - 1DL116

Tentamen ISGB01 (delkurs i ISGB24) Databasdesign 7,5 Poäng

Relationsmodellen och syntetisk databasdesign

Logisk databasdesign

Structured query language (SQL)

Tentamen. Databasmetodik Lördag 27 september 2014 kl

Lösningsförslag till tentamen för DD1370 Databasteknik och informationssystem

TENTAMEN. För kursen. Databasteknik. Ansvarig för tentamen: Cecilia Sönströd. Förfrågningar: Anslås inom 3 veckor

Databaskunskap 7,5 högskolepoäng Provmoment: Ladokkod: Tentamen ges för:

Lösningar till tentamen i EDAF75

Tentamen. TDDB38 - Databasteknik

Tentamen för DD1370 Databasteknik och informationssystem

Programdesign, databasdesign. Databaser - Design och programmering. Funktioner. Relationsmodellen. Relation = generaliserad funktion.

TENTAMEN. TDDD12 Databasteknik TDDD46 Databasteknik. 16 augusti 2010, kl 14-18

Skriftlig tentamen i kurserna TDDD12 och TDDB48 Databasteknik kl

An English version of the questions is found at the back of each page.

Laboration SQL. Kom igång.

Databasteknik. Vad är. Vad är databaser bra till? data? föreläsare: Kjell Lindqvist. och NADA. databaser? och. vad är de bra för?

Databasföreläsning. Del 2 lagrade procedurer, vyer och transaktioner

SQL. Structured Query Language. Frågespråk för att används för. Kommandon. data åtkomst data manipulation

Tentamen DATABASTEKNIK - 1DL116, 1MB025

TENTAMEN TDDB77 Databaser och Bioinformatik 24 april 2004, kl 14-18

2NF Hästnamn, KursId, StartDatum, SlutDatum KursId NY!, där RIDKURS.KursId = KURS.KursId 3NF Hästnamn, Art, NY! NY! NY! NY!

Vad är en databas? Exempel på databaser: Databas = Organiserad samling och lagring av information.

Inst. för Data- och Systemvetenskap SU Maria Bergholtz. Tentamen. 21/ kl Inga hjälpmedel är tillåtna (annat än ordbok).

TENTAMEN TDDD12 Databasteknik 7 januari 2010, kl 14-18

Databasspråket SQL - online.

Föreläsning 3 Transformation från konceptuell datamodell till relationsschema ( Syntetisk databasdesign ) Vad är ett databashanteringssystem?

Normalisering. Christer Stuxberg Institutionen för Informatik och Media

WCMS-15, Webbutvecklare CMS

TENTAMEN För kursen. Databasteknik. Ansvarig för tentamen: Anna Palmquist. Förfrågningar: Anslås inom 3 veckor

Databaser. Vad du ska lära dig: Ordlista

Databaser - Design och programmering. Relationsmodellen. Relationer - som tabeller. Relationer som tabeller. Alternativa notationer: Relationsschema

Karlstads Universitet, Datavetenskap 1

Databaser - Design och programmering. Kursöversikt. Exempel: telefonbok. Varför databaser?

Grunderna för relationsmodellen!

Tentamen för DD1370 Databasteknik och informationssystem

Sample exam questions. Database exam TIG058

TENTAMEN TDDB77 Databaser och Bioinformatik 12 juni 2007, kl 14-18

Programmering II (ID1019) :00-11:00

TENTAMEN. För kursen. Databasteknik. Ansvarig för tentamen: Cecilia Sönströd. Förfrågningar: Anslås inom 3 veckor

Exempel tentamen. Skriv bara på en sida av pappret Skriv namn på varje papper Skriv läsligt, annars rättas inte tentamen Alla hjälpmedel är tillåtna

! Teori och praktik. ! Ändringar från förra året. ! Examination (tenta, projekt) LiU. ! Varför ni? ! Varför överhuvudtaget? LiU

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Informationssystem och databasteknik

PROGRAMMERING-Java Omtentamina

IT i organisationer och databasteknik

Transkript:

Tentamen i Lördagen den 21 oktober 2006 Tillåtna hjälpmedel: Allt skrivet material Använd bara framsidan på varje blad. Skriv max en uppgift per blad. Motivera allt, dokumentera egna antaganden. Oläslig/obegriplig lösning ger noll poäng. Max 75% av den totala examinationen + bonus max 25% Betygsgränser : KTH SU 3 50% G 50% 4 63% VG 69% 5 75% Lycka till! Kjell

Tentamen i Kjell Lindqvist, (08) 790 62 76 1. 20% Ett bemanningsföretag hyr ut sina duktiga medarbetare till olika företag för längre eller kortare uppdrag. Tabellen nedan visar hur mycket tid i timmar var och en av de anställda i bemanningsföretaget arbetat för olika företag. För varje projekt skriver bemanningsföretaget ett kontrakt mellan en eller flera anställda och uppdragsgivaren. Anställningsnumret är unikt för varje anställd. Ett företag ligger endast i en ort. AnstNr KontraktNr Timmar AnstNamn FöretagsID FörtagsOrt 616681B SC1025 72 P. Ek SC115 Solna 674315A SC1025 48 R. Björk SC115 Solna 323113B SC1026 24 P. Wide SC23 Nacka 616681B SC1026 24 P. Ek SC23 Nacka a (4%) b (3%) c (13%) Utred vilka funktionella beroenden som finns i strukturen. En första ansats är att lägga alla termer i en enda tabell. Vilka för och nackdelar har en sådan lösning i det aktuella fallet? Normalisera successivt till 1NF, 2NF, 3NF och motivera alla åtgärder. 2. 15% Givet varuhusdatabasen med följande databasstruktur: Anställd ( ( namn ), lön, chef, avd ) Försäljning ( ( avd, varunr ), volym ) Leverantör ( ( företag ), adress ) Lager ( ( företag, avd, varunr ), volym ) Avdelning ( ( avd ), våning ) Vara ( ( varunr ), typ ) där varunr, våning och volym är av typen integer och övriga av typen string(30). a (4%) Översätt följande uttryck i relationsalgebra till SQL: företagg count(*) ((σ typ = skosnöre (Vara)) (σ avd = skor (Lager))) b (5%) Översätt följande SQL-fråga till ett tupelkalkyluttryck: select V1.typ from Vara V1, Försäljning F1 where V1.varunr = F1.varunr and exists (select * from Vara V2, Försäljning F2 where V2.varunr = F2.varunr and V1.typ = V2.typ and V1.varunr <> V2.varunr and F1.avd = F2.avd); c (6%) Skriv SQL-frågor mot varuhusdatabasen som besvarar följande frågor: i På vilka våningar säljer man inte skor? ii På vilken avdelning finns det minst antal varor till försäljning? Sid 1

Tentamen i Kjell Lindqvist, (08) 790 62 76 3. 15% a (3%) Givet följande B + -träd där alla noder utom roten kan innehålla 1-2 nycklar. Antag att nycklarna 41 och 19 skall sättas in i trädet, hur ser det uppdaterade trädet ut? b (3%) Hur många nivåer måste trädet (i a) ha om vi har 100 nycklar av typen integer? c (5%) Antag att vi vill konstruera ett index för relationen R(A, B) där A och B är av typen integer och vi vill evaluera σ A <= 56 B >=65 (R) så snabbt som möjligt. Hur skall ett sådant index definieras? d (4%) Under vilka omständigheter lönar det sig med ett hashindex i stället för ett B + -träd index? 4. 15% Relationen Seats(seatId, class, reserved) används för att hantera reservationer av ett flyg. Den innehåller en tupel för varje säte och attributet reserved har värdet 1 om platsen är bokad och 0 annars. 15 minuter före avgång stängs reservationen till business class och eventuella lediga platser förs över till kunder i economy plus. Nedanstående SQL-satser används för att göra överföringen. Relationerna FreeBusinessSeats(n, seatid, reserved) och upgrades(n, seatid) används för att lagra mellanresultat. n är ett löpnummer som automatiskt hanteras av DBMS. Betrakta de två nedanstående transaktionerna bestående av 1 respektive 7 SQL-satser. Transaktion 1: update seats set reserved = 1 where seatid = 42 and reserved = 0; Transaktion 2: 1 delete from FreeBusinessSeats; 2 delete from upgrades; 3 insert into FreeBusinessSeats values (select seatid, reserved from Seats where class= business and reserved = 0); Sid 2

Tentamen i Kjell Lindqvist, (08) 790 62 76 4 insert into upgrades(seatid) values (select seatid from Seats where class= economy plus and reserved = 1); 5 update freebusinessseats set reserved = 1 where (select max(n) from freebusinessseats) < all (select max(n) from upgrades); 6 update Seats set reserved =0 where seatid in (select * from upgrades where n <= (select count(*) from freebusinessseats where reserved = 1)); 7 update Seats set reserved = 1 where seatid in (select seatid from freebusinessseats where reserved = 1); Förklaring: De två första SQL-satserna är till för att ta bort gamla mellanresultat. Sats 3 tar ut alla lediga stolar i business class och sätter in dem i freebusinessseats. I sats 4 plockar vi ut alla reserverade platser i economy plus och i sats 5 flyttas så många som möjligt till business class och tas bort från economy plus i sats 6. I sats 7 ändras slutligen reservationerna. a. (8%) Antag att transaktionshanteraren använder sig av flervärd tvåfaslåsning. Visa när transaktion 2 skaffar och avvecklar sina lås om isolationsnivån är serializable. (Du får själv välja protokoll för dead-lock-hantering.) b. (7%) Antag att transaktionshanteraren inte använder låsning utan tidsstämpling. Vad händer om transaktion 1 schemaläggs så att den kör mellan satserna 3 och 6 då tidsstämpeln för transaktion 1 är minst? tidsstämpeln för transaktion 2 är minst? 5. 10% Visa hur frågan företagg count(*) (σ Avdelning.avd = Lager.avd Vara.varunr = Lager.varunr våning = 3 typ = Cykel (Avdelning Vara Lager)) optimeras och exekveras. För vara gäller att varunr är av typen integer och typ är av typen varchar(30), i Avdelning våning av typen integer och avd av typen varchar(30) och i lager är företag, avdelning av typen varchar(30) och varunr och volym av typen integer. Vara har 5000 tupler, Avdelning 30 tupler och lager 8000 tupler. Blockstorleken är 2Kbyte och de enda index som finns är B + -träd på primärnycklarna. Sid 3

Förslag till lösning av Tentamen i Lördagen den 21 oktober 2006 Sid 0

Kjell Lindqvist, (08) 790 62 76 Lösningsförslag till Tentamen i 1 a AnstNr AnstNamn KontraktNr FöretagsId FöretagsId FöretagsOrt KontraktNr, AnstNr Timmar b För att unikt identifiera en rad i tabellen behövs KontraktNr och AnstNr i kombination. Insättningsproblem: Om en ny medarbetare anställs som ännu inte har utfört något uppdrag så måste KontraktNr vara null men det är ju en del av nyckeln. Borttagningsproblem: Om en medarbetare varit ensam om ett uppdrag och bara arbetat på detta uppdrag och sedan slutar så raderas tupeln och därmed försvinner information om uppdragsgivaren. Uppdateringsproblem: Om ett företag flyttar måste orten uppdateras i ett okänt antal tupler. Strukturen implicerar inte de FD som gäller. Det går, t ex, att sätta in 2 olika orter för ett företag. Vi får problem med nullvärden. c KontraktNr, AnstNr + = { KontraktNr, AnstNr, AnstNamn, FöretagsId, FöretagsOrt, Timmar} KontraktNr + = {KontraktNr, FöretagsId, FöretagsOrt} AnstNr + = { AnstNr, AnstNamn} {KontraktNr, AnstNr} är den enda kandidatnyckeln och därmed också primärnyckel. 1NF: ((KontraktNr, AnstNr), AnstNamn, FöretagsId, FöretagsOrt, Timmar) 2NF: Bryt ut ickeprimattribut som är partiellt beroende av någon kandidatnyckel. AnstNr AnstNamn medför att ((AnstNr), AnstNamn) bildar en egen relation KontraktNr FöretagsId, FöretagsOrt medför att ((KontraktNr), FöretagsId, FöretagsOrt) bildar en egen relation ((KontraktNr, AnstNr), Timmar) blir kvar 3NF: Bryt ut termer som är transitivt beroende FöretagsId FöretagsOrt är det enda transitiva beroendet i strukturen ((KontraktNr), FöretagsId, FöretagsOrt) delas i ((KontraktNr), FöretagsId) och ((FöretagsId), FöretagsOrt) Den slutliga strukturen blir: ((AnstNr), AnstNamn) ((KontraktNr), FöretagsId) ((FöretagsId), FöretagsOrt) ((KontraktNr, AnstNr), Timmar) Gör reverse engeneering och kontrollera resultatet (Obs! detta är ett viktigt steg!) Vilket ser ut att vara ok. Sid 1

Kjell Lindqvist, (08) 790 62 76 Lösningsförslag till Tentamen i 2 a b c select Lager.företag, count(*) from Vara, Lager where Vara.varunr = Lager.varunr and Vara.typ = Skosnöre and Lager.avd = Skor ; {v1.typ v1 Vara ( f1)(f1 Försäljning v1.varunr = f1.varunr ( v2)( f2)(v2 Vara f2 Försäljning v2.varunr = f2.varunr v1.typ = v2.typ v1.varunr v2.varunr f1.avd = f2.avd))} i select våning from Avdelning where våning not in (select A.våning from Försäljning F, Avdelning A where F.avd = A.avd and F.varunr in (select varunr from Vara where typ = Sko )); ii create view tmp(avd, n) as select avd, count(*) from Försäljning group by avd; select avd from tmp where n in (select min(n) from tmp); Översätt följande uttryck i relationsalgebra till SQL: företagg count(*) ((σ typ = skosnöre (Vara)) (σ avd = skor (Lager))) 3. Efter insättning av 41: Slutresultat: Sid 2

Kjell Lindqvist, (08) 790 62 76 Lösningsförslag till Tentamen i b Vi skall få plats med minst 100 nycklar (50 par av nycklar) på nedersta nivån. 3 4 =81 Vi skall ha 5 nivåer i trädet exklusive filen på den nedersta nivån. Roten + ytterligare 4 nivåer. c Om A ligger i intervallet [0, ] så bör index på A, B vara effektivare än B, A. Om A ligger i intervallet [-, a] så är det bättre att ha ett index på B, A. Det blir en avvägning mellan selektiviteten hos attributen. d Om vi har punktfrågor som resulterar i indre än 20% av datamängden eller om relationen är sorterad på det attribut som vi indexerar. 4 a Antag att låsen hanteras på tupelnivå. Satserna 1 och 2 är inte så intressanta eftersom T 2 skaffar X-lås på samtliga tupler som tas bort varefter ingen annan transaktion kan komma åt tuplerna. I sats 3 skaffar sig T 2 delat lås på alla tupler i Seats som uppfyller villkoret och X-lås på alla tupler som sätts in i FreeBusinessSeats. I sats 4 skaffar sig T 2 delat lås på alla tupler i Seats som uppfyller villkoret och X-lås på alla tupler som sätts in i upgrades. I sats 5 sätts inga nya lås. I sats 6 uppgraderas delade lås till X-lås på de tupler som uppfyller villkoret (observera att T 2 redan har delat lås på alla aktuella tupler). I sats 7 händer samma sak som i 6 och nu kan T 2 börja släppa sina lås. b Om Platsen inte är i Business class så kommer det inte att inträffa någon konflikt. Antag att Platsen är i Business class. i TS(T 1 ) = 1 och TS(T 2 ) = 2. T 2 har då satt tidsstämpeln 2 för läsning på alla tupler som den läst. Då transaktion T 1 vill uppdatera tupeln så jämför den sin tidsstämpel med lässtämpeln för dataobjektet och får göra rollback och starta om. ii TS(T 1 ) = 2 och TS(T 2 ) = 1. Som i i men villkoret för skrivning är ok. Då T 2 vill uppdatera reservationen (i sats 7) så jämför den sin tidsstämpel med lässtämpeln för dataobjektet och får göra rollback och starta om. 5. Initialt evalueringsträd: Kaskadera selektionen och flytta delarna så nära relationerna som möjligt. Kombinera selektion och kartesisk produkt om det går. Projicera ut den datamängd som behövs om det lönar sig. Flytta om noderna så att den minsta datamängden evalueras först. Avgör vilka algoritmer som skall användas vid exekveringen. Sid 3

Kjell Lindqvist, (08) 790 62 76 Lösningsförslag till Tentamen i Det optimerade trädet. Det lönar sig inte att projicera ut delar av tupler eftersom det är så få tupler att de kan ligga i PM. Avdelningarna på 3e våningen är (om det är 5 våningar) 6 st och tuplernas storlek är 34 byte Här lönar det sig inte med ngt index eller ngn projektion. Resultatet av att selektera alla cyklar från vara (om det finns 1000 olika typer av varor) 50 och tuplernas storlek är 34 byte så det får plats i ett block det lönar det sig inte med ngt index eller ngn projektion. En blocknästlad join lönar sig i båda fallen eftersom den ena operanden får plats i PM och den yttre loopen bara kommer att köras en gång. Sid 4