Örebro universitet
Institutionen för teknik
Thomas Padron-McCarthy (Thomas.Padron-McCarthy@tech.oru.se)








Ordinarie tentamen i

Databaskonstruktion

för Dataingenjörsprogrammet

måndag 20 oktober 2003 kl 08:00 - 13:00








Hjälpmedel: Inga hjälpmedel.
Poängkrav: Maximal poäng är 48.
För betyget 3 krävs 24 poäng.
För betyget 4 krävs 32 poäng.
För betyget 5 krävs 40 poäng.
Resultat och lösningar: Meddelas på kursens hemsida senast måndag 3 november 2003.
Visning: Tisdag 4 november 2003 kl 12:30-13:00 i mitt rum (T2220).
Därefter kan tentor hämtas på expeditionen.
Examinator och jourhavande: Thomas Padron-McCarthy, telefon 070-7347013.



LYCKA TILL!


Scenario till uppgifterna

Nyhetsföretaget CNN (Central-Nyheter i Närke) har en webbplats, cnn.com, där de samlar nyhetsartiklar som allmänheten sen kan läsa. För att på ett smidigt sätt kunna hantera nyheter och användare vill man nu använda en databas.

Det som ska lagras i databasen är följande:

Uppgift 1: ER-diagram (5 p)

Rita ett ER-diagram för den beskrivna databasen. Använd informationen ovan, men tänk också på att det ska gå att svara på frågorna i uppgift 3 nedan.

Om du behöver göra några antaganden när du gör ER-diagrammet, så ange dessa antaganden.

Uppgift 2: Relationsmodellen (5 p)

Implementera den beskrivna databasen i relationsmodellen, dvs översätt ER-diagrammet till tabeller.

Du behöver inte skriva create table-lommandon i SQL, men du ska ange vilka relationer som finns och vilka attribut varje relation innehåller. Ange också vad som är primärnyckel, och vilka referensattribut som finns och vad de refererar till.

Implementationen ska vara bra.

Uppgift 3: SQL (10 p)

Formulera följande frågor i SQL:

a) (1p) Vad är texten till den nyhet som har rubriken Norge vann VM?

b) (2p) Vilka rubriker har de nyheter som läsaren med loginnamnet Bengt har läst?

c) (2p) Vilka rubriker har de nyheter som läsaren med loginnamnet Bengt inte har läst?

d) (2p) Hur många läsare har läst nyheten som har rubriken Norge vann VM?

e) (3p) Vad är rubriken på den nyhet som lästs av flest läsare?

Uppgift 4: Prestanda (3 p)

Frågor av typen b och c i uppgiften ovan, alltså vilka artiklar som lästs och inte lästs av en viss användare, förekommer ofta i just den här databasen.

Vilka index bör skapas för att de frågorna ska gå snabbt?
Varför bör just dessa index skapas?

Uppgift 5: Några databastermer (7 p)

Tidningen Computer Sweden har publicerat en ordlista med datatermer på webben. Här är fem utdrag ur den listan.

Stämmer förklaringarna? Avgör för vart och ett av de fem uppslagsorden om förklaringen stämmer eller inte. Om något är fel, så tala om vad, och förklara vad som borde stått i stället.

a) relationsdatabas - (relational database, rdb) - databas bestående av en kombination av tabeller. Numera den vanligaste formen av databas i seriösa sammanhang. Varje tabell består av två eller flera kolumner. En av kolumnerna (till exempel personnummer) används som nyckel och identifierar en post (rad) i tabellen. Samma nyckel kan förekomma i flera tabeller, och då kan man kombinera data ur dessa tabeller genom en så kallad join. En järnhandel kan till exempel köra en join mellan kundregistret och inköpsregistret när det är dags att skicka ut räkningar.

b) databas - data eller filer som är lagrade på ett strukturerat sätt, skilt från den eller de program som lagrar, ändrar och använder dem. Fördelen är att materialet blir överskådligt, kan användas av flera olika program och att man bara behöver lagra samma data, till exempel en adress, på ett ställe i systemet. Ofta kallar man även databashanteraren för databas.

c) atomärt värde - (i relationsdatabas) - ett grundläggande värde, till exempel ett tal, som inte kan räknas fram genom att man utgår från andra värden i samma databas. En normaliserad relationsdatabas innehåller enbart atomära värden. Det är för att man bara ska behöva rätta på ett ställe åt gången. (Exempel: en databas med antalet invånare i alla svenska län bör inte också innehålla invånarantalet i hela Sverige. I stället bör man räkna ut hur många invånare det finns i Sverige genom att summera invånarantalet i länen - de atomära värdena. Ändras invånarantalet i ett län ändras då invånarantalet i hela Sverige automatiskt.)

d) referentiell integritet - konsekvens och motsägelsefrihet i en databas. Om det står att Kalle är gift med Stina ska det också stå att Stina är gift med Kalle. Om man matar in att Kalle har skilt sig från Stina ska man också mata in att Stina är skild från Kalle. Referentiell integritet kräver alltså att när man tar bort eller ändrar poster måste man också göra följdändringar på andra ställen. Det kan åstadkommas med triggers. Ännu bättre är om databasen är uppbyggd så att man bara behöver ändra på ett ställe.

e) trigger - procedur som utlöses automatiskt när vissa data ändras i en databas. Ofta är triggers till för att se till att uppgifterna i databasen är korrekta, motsägelsefria och konsekventa samt att det görs följdändringar och -tillägg. Se referentiell integritet. I princip kan en trigger göra vad som helst - utlösa larm, skicka meddelanden om överskriden kreditgräns eller starta andra program.



Uppgift 6: Transaktioner (4 p)

Ibland talar man om ACID-transaktioner, där bokstäverna i förkortningen ACID står för Förklara för var och en av de fyra egenskaperna vad den egentligen betyder, och ge exempel på vad som kan hända om den saknas.

Uppgift 7: ODBC (7 p)

ODBC är en standardiserad arkitektur för hur ett program, till exempel ett applikationsprogram, med hjälp av SQL kan kommunicera med ett annat program, till exempel en databashanterare.

a) (2p) Förklara principerna för hur ODBC fungerar. Hur ser det (kortfattat) ut i programmet som använder ODBC? Hur är ODBC-arkitekturen uppbyggd?

b) (2p) Ett alternativ till ODBC är ESQL, som betyder Embedded SQL. Vilka för- och nackdelar har ESQL jämfört med ODBC?

c) (1p) I ODBC talar man om olika handtag (engelska: handles). Vad är det, vilka typer finns, och vad har man dem till?

d) (1p) Vad används SQLBindCol och SQLBindParameter till?

e) (1p) Ett alternativ till SQLExecDirect är SQLExecPrepare och SQLExecute. Vad gör dessa två funktioner? När, och varför, bör man använda dem?

Uppgift 8: Aktiva databaser (5 p)

Om en SQL-fråga är komplicerad eller arbetar med stora mängder data, kan den ta lång tid att köra. Om man ändå behöver köra frågan ofta, kan man beräkna resultatet och lagra det i en tabell.

Visa med ett exempel hur man kan använda triggers för att hålla det lagrade resultatet uppdaterat. Du behöver inte skriva exakt riktig SQL-kod, men det ska framgå vilka triggers som finns, när de utlöses, och vad de gör.

Glöm inte att förklara exemplet, till exempel vad tabellerna handlar om.

Uppgift 9: Databasbaserade webbplatser (2 p)

Den databasbaserade webbplatsen cnn.com har byggts med hjälp av CGI-program. I början fungerade webbplatsen snabbt och bra, men nu när både antalet användare och antalet nyheter växt har webbplatsen börjat få ganska dåliga prestanda. En konsult kommer och tittar, och skyller på CGI-programmen.

Kan konsulten ha rätt? Varför skulle just CGI-program vara långsamma?