Örebro universitet
Institutionen för teknik
Thomas Padron-McCarthy
(Thomas.Padron-McCarthy@tech.oru.se)
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. |
Det som ska lagras i databasen är följande:
Om du behöver göra några antaganden när du gör ER-diagrammet, så ange dessa antaganden.
Du behöver inte skriva create table-kommandon 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.
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?
Definiera gärna vyer om det underlättar.
Vilka index bör skapas för att de frågorna ska gå snabbt?
Varför bör just dessa index skapas?
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.
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?
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.
Kan konsulten ha rätt? Varför skulle just CGI-program vara långsamma?