Tekniska Högskolan i Linköping, Institutionen för datavetenskap Almut Herzog / Olof Johansson / Patrick Lambrix / Cecile Åberg Tentamen TDDB38 - Databasteknik (Svensk version) Datum: Fredag 12:e januari 2001 Tid: 14:00-18:00 Jourhavande lärare: Olof Johansson, teoretiska delen, tel. 28 2390 Cécile Åberg, praktiska delen, tel 28 8986 Instruktioner Tentamen är indelad i två delar: en praktisk och en teoretisk" del. Den praktiska delen handlar om EER, ER, relationsscheman, mappning av EER till relationsscheman och SQL. Den teoretiska delen behandlar resten av kursen. Du måste klara båda delarna för att bli godkänd på tentamen, dvs för godkant krävs 8 poäng för den praktiska delen och 13 poäng för den teoretiska delen. Läs igenom hela examen och notera eventuella oklarheter innan du börjar lösa uppgifterna. Förutom instruktionerna på försättsbladen gäller följande: Skriv tydligt och klart. Lösningar som inte går att läsa kan naturligtvis inte ge några poäng, och oklara formuleringar kommer att misstolkas. Antaganden utöver de som står i uppgifterna måste anges. Gjorda antaganden får förstås inte förändra den givna uppgiften. Skriv endast på ena sidan av pappret, och max en uppgift per sida. Använd ej röd penna. Hjälpmedel: Lexikon LYCKA TILL! 1
Praktisk del(16 poäng) 1) Rita ett EER-diagram för musikskolans nya databas. (6 poäng) Skolan ger grupplektioner samt individuella lektioner. För varje lektion vill skolan lagra: Lektionsdatum (dag och tid). Lektionslängden (antal timmar). Lektionsämne (en sträng). Läraren (precis en). Rummet. Dessutom: för en grupplektion: Lektionsnivån (antal år av praktik som studenten måste ha för att delta). Maximalt antal studenter som kan delta. Studenterna som är registrerade för lektionen. för en individuell lektion: Studenten som deltar i lektionen. För varje lärare lagrar skolan: Lärarens namn. Personnummer. Lönen. Musikinstrument han/hon kan spela. (Han/hon kan spela mer än ett musikinstrument). Ämnena som han/hon kan undervisa i. Året som han/hon påbörjade sin anställning (anställningsår). För varje student lagrar skolan: Studentens namn. Födelsedatum. Musikinstrument han/hon kan spela. (Han/hon kan spela mer än ett musikinstrument). För varje musikinstrument som studenten kan spela ska hans/hennes nivån (antal år) också lagras. Obs: Tank på att vissa begränsningar kan inte realiseras i ett EER-diagram. 2
2) Översätt diagrammet nedan till ett schema i BCNF. (4 poäng) Stryk under attributen som är primärnycklar. Gör en streckad understryckning av attributen som är främmande nycklar och skriv referensen under. Till exempel: TABLE1 Attribute1 Attribute2 TABLE2 Attribute3 Attribute4 Table1(Attribute1) num brand Vehicle color flying altitude Car Plane n has-an engine number m has-engines n 1 Engine num category strength 3
3) Formulera några SQL frågor. (6 poäng) Följande tre tabeller är en del av scheman för en databas för en klädbutik. Attributen som är primärnycklar är understrykna. Tabellen Anställd: nummer namn lön anställningsdatum 1 John 100000 10/10/1999 2 Nikki 120000 01/03/1997 Tabellen Plagg: nummer namn leverantör antal i lager antal sålda 100 jeans Levis 25 20 101 sommarklänning Kookai 15 6 Tabellen Plagg-Anställd: Knummer Anummer antal 100 2 5 101 2 3 Anummer = främmande nycklar för Anställd(nummer) Knummer = främmande nycklar för Klädesplagg(nummer) Tabellen Plagg-Anställd anger hur många plagg av en viss sort en anställd har sålt. Den första raden ger tex informationen att anställd 2 (Nikk) sålde 5 (antal) klädesplagg med Knummer = 100 ( jeans från leverantör Levis ). 4
Övning: Skriv SQL frågor för a), b) och c). Skapa gärna vyer om du tycker det är användbart. a) Vilka klädesplagg (namn och leverantör) har Nikki sålt? b) Hur många klädesplagg har varje anställd sålt? Varje rad av resultatet ska innehålla numret och namnet av den anställde samt det totala antalet klädesplagg som han eller hon har sålt. (Tips: en anställd kan sälja olika klädesplagg). c) För varje klädesplagg levererat av leverantör Kookai, vill vi veta - Klädesplaggets namn. - Antal sålda klädesplagg (hur många som har sålts totalt). - Antal anställda som har sålt detta plagg. 5
Teoretisk del (26 poäng) 4) Vilka problem kan man få om man använder en onormaliserad databas? (4p) (Namn på problemet 0,5p, korrekt beskrivning 0,5p) 5) Specificera de funktionella beroendena för följande tabell. (2p) SUPPLIER_INFO(SUPP_NAME,ITEM_NAME,SUPP_ADDRESS,ITEM_PRICE) 6) Datastrukturfråga (6p). 6a) Antag att du använder en hashtabell (eng. hash table) med 7 hinkar (eng. buckets) för intern hashing av poster (eng. records) med fält (eng. field) NAME (char(10)), PNUM (int) och JOBCODE (char(4)). Du använder hashfunktionen h. Antag att du vill lagra följande poster i hashtabellen: post 1: NAME=John, PNUM=1234, JOBCODE=mang, h(post 1) = 4 post 2: NAME=Jeff, PNUM=1244, JOBCODE=cemp, h(post 2) = 4 (i) Förklara hur öppen adressering (eng. open adressing) fungerar och visa hur man lagrar post 1 och post 2 med denna strategi. Rita den resulterande hashtabellen. (ii) Förklara hur en kedja (eng. chaining) fungerar och visa hur man lagrar post 1 och post 2 med denna strategi. Rita den resulterande hashtabellen. 6b) Förklara vad ett sekundärindex (eng. secondary index) är och visa hur man kan skapa ett sådant index för en fil av poster med fält NAME (char(10)), PNUM (int) och JOBCODE (char(4)). Du bestämmer själv vilket fält är nyckelfältet och om och hur posterna är sorterade i filen. Skriv ner dina antaganden. 7) Beskriv önskade egenskaper för transaktioner. (2p) 8) Vad är syftet med tvåfas commit protokollet. Beskriv hur det fungerar. (3p) 9a) Namnge upp till fyra mjukvarustandardiseringsorganisationer, och ge exempel på standarder de tagit fram. (2p) 9b)Förklara med några få meningar varför standarder är så viktiga för mjukvaruindustrin. (1p) 10) Det stora mjukvaruföretaget där du arbetar har fått en ny VD som vill belöna de mest samarbetsvilliga kunderna med en 50 procentig rabatt på uppgraderingar till nya mjukvarureleaser. Företaget har ett felrapporteringssystem med tabeller enligt följande SQL-schema : create table product ( p_id INTEGER NOT NULL, p_name VARCHAR(20), CONSTRAINT p_pk PRIMARY KEY (p_id) ); -- Contains about 100 tuples 6
create table customer ( c_id INTEGER NOT NULL, c_name VARCHAR(20), CONSTRAINT c_pk PRIMARY KEY (c_id) ); -- Contains about 10000 tuples create table bugreport ( b_id INTEGER NOT NULL, b_heading VARCHAR(20), b_date TIMESTAMP, b_customer_id INTEGER NOT NULL, b_problem_description VARCHAR(2000), b_product_id INTEGER NOT NULL, CONSTRAINT b_pk PRIMARY KEY (b_id) ); -- Contains about 200000 tuples Din chef, som vill ha en god relation med VD, har skrivit följande SQL-fråga för att generera en rapport enligt VD:s önskemål. select p_name, c_name, count(*) as bugreport_count from product, customer, bugreport where p_id = b_product_id and c_id = b_customer_id and b_date > 20000101000000 group by p_name, c_name order by p_name, 1000-bugreport_count, c_name VD blev dock något ursinnig när svarstiden var längre än en minut. Nu har din chef bett dig hjälpa honom för att slippa få sparken. 10a) Rita ett heuristiskt optimerat frågeträd för SQL-frågan ovan (2p). 10b) Lägg till vilka index du önskar för att förbättra svarstiden, och skriv eventuellt om frågan med en vy. Skriv SQL-kommandona för detta (2p). 10c) Rita ett heuristiskt optimerat frågeträd för SQL-frågan med index mm som du lade till i 10b (2p). 7