Databasteknik 7,5 högskolepoäng Provmoment: Ladokkod: Tentamen ges för: Tentamen NDA01G Öppen för alla Tentamenskod: Tentamensdatum: 2016-11-04 Tid: 14:00-19:00 Hjälpmedel: Inga hjälpmedel är tillåtna Totalt antal poäng på tentamen: 40 poäng För att få respektive betyg krävs: G >= 20, VG >= 32 Allmänna anvisningar: Skriv tentamenskod på varje blad du lämnar in. Skriv tydligt (oläsligt = fel) och motivera dig svar väl. Numrera sidorna och börja varje ny uppgift på ett nytt blad. Om du anser att en fråga är svår att förstå eller felaktigt ställd, skriv ner din tolkning av frågan tillsammans med svaret. Rättningstiden är som längst tre veckor Viktigt! Glöm inte att skriva tentamenskod på alla blad du lämnar in. Lycka till! Ansvariga lärare: Patrick Gabrielsson Petter Dessne Johanna Carlsson Telefonnummer: 033-4354132 033-4354715 1
ALLMÄNT 1. Vilka är dataadministratörens respektive databasadministratörens huvudsakliga (3p) arbetsuppgifter? 2. Diskutera fördelarna med ett databashanterarsystem (DBMS) jämfört med ett (3p) filbaserat system. 3. Redogör noggrant för innehållet i de tre nivåerna i ANSI-SPARC arkitekturen, (3p) samt vad de tre nivåerna kallas. RELATIONSMODELLEN 4. En nyckel är ett viktigt begrepp i relationsmodellen. Ge formella definitioner (2,5p) för följande nycklar: a) Supernyckel b) Kandidatnyckel c) Primärnyckel d) Främmande nyckel e) Alternativ nyckel 5. Begränsningar används i relationsmodellen för att bibehålla datakonsistens. (2,5p) Beskriv följande begränsningar: a) Domänbegränsning b) Null-barhet (dvs, NULL eller NOT NULL) c) Entitetsintegritet d) Referensintegritet e) Generella begränsningar REALISERING 6. Härledda attribut kan implementeras i databasen på två olika sätt. Beskriv dessa (2p) två sätten samt för- och nackdelar med varje metod. 7. Sekundärindex kan specificeras på relationer för att snabba upp utsökningen (1+1p) av data från databasen. a) Ge ett par exempel på situationer där det är lämpligt att skapa ett sekundärt index på en kolumn i en tabell. b) Ge ett par exempel på situationer där det inte är lämpligt att skapa ett sekundärt index på en kolumn i en tabell. 2
MODELLERING 8. Redogör för var och en av följande attributstyper med ett exempel samt (1+1p) förklara hur de skrivs i relationsdatamodellen. a) Härlett attribut b) Sammansatt attribut 9. Ett nyetablerat företags affärsidé är att erbjuda konstnärer att ställa ut sina (4+2p) konstverk i företagets fastigheter. Vid försäljning av konstverk ger konstnärerna en del av sin vinst till företaget. Konceptet har snabbt blivit populärt och företaget har bestämt sig för att köpa in ett skräddarsytt system. Du ska nu modellera databasen till det. I nuläget vill man inte spara några uppgifter om konstverken eller försäljningarna. Företaget äger många olika fastigheter och det ska gå att spara uppgifter om fastighetens adress, fastighetstyp, fastighetsnummer, en beskrivning av fastigheten och antalet rum i fastigheten. Fastigheterna har mellan ett och tio rum. Varje rum har ett rumsnummer, rumsstorlek och eventuellt en konstnär som ställer ut sin konst. Vissa fastigheter står tomma medan andra har många olika utställare. Företaget vill bara spara aktuell data om konstnärerna i databasen, därför ska uppgifterna om de konstnärer som inte längre har en utställning tas bort ur databasen. För att kunna kontakta konstnärerna behöver det finnas uppgifter om konstnärerna namn, adress, mobilnummer och mejladress. Företaget har även ett antal anställda som jobbar i de fastigheter som har utställningar. De anställda flyttas för omväxlingens skull runt mellan de olika fastigheterna. För de anställda vill man spara personnummer, adress, mobil, namn och lön. OBS! Poängsättning på uppgiften görs enligt följande princip: avdrag från full poäng sker med 0.5 poäng för mindre fel och 1 poäng för större fel. Exempel på mindre fel är attribut som felaktigt anges som envärda när de skall vara flervärda, eller felaktigt/saknat maxvärde i en entitetsrelation. Ett exempel på större fel är en saknad entitet eller relation mellan entiteter. Poängsättningen innebär alltså att en lösning som innehåller korrekta delar ändå kan ges 0 poäng. a) Skapa en konceptuell datamodell med attributlista utifrån beskrivningen ovan. Ni får själva fylla i med fler attribut än de som nämns ovan om det behövs. b) Skapa, baserat på den konceptuella datamodellen i uppgift a), en logisk datamodell med attributlista. Ni behöver inte skriva modellen som relationsschema, utan UML-diagram räcker. Främmande nycklar skall inte markeras och ni skall inte heller normalisera modellen. 3
NORMALISERING 10. Följande extension (instans) är given, där staffno utgör primärnyckeln. (2p) staffno sname position salary branchno baddress SL21 John White Manager 30000 B005 22 Deer Rd, London SG37 Ann Beech Assistant 12000 B003 162 Main St, Glasgow SG14 David Ford Supervisor 18000 B003 163 Main St, Glasgow SA9 Mary Howe Assistant 9000 B007 16 Argyll St, Aberdeen SG5 Susan Brand Manager 24000 B003 163 Main St, Glasgow SL41 Julie Lee Assistant 9000 B005 22 Deer Rd, London a) Ange vilken normalform relationen befinner sig i och varför. b) Ge exempel på en insättnings-, borttagnings- respektive modifieringsanomali. 11. Antag följande relation R som beskriver tävlingar och tävlande i världscupen (1+3p) i skidskytte: R(tävlingsId, datum, distans, ort, antalskjutningar, segrare, skidskyttid, skyttnamn, träffprocentstå, träffprocentligg) Följande beroenden, och inga andra, gäller i relationen: fd1: tävlingsid ort fd2: tävlingsid, datum distans, segrare fd3: distans antalskjutningar fd4: skidskyttid skyttnamn, träffprocentstå, träffprocentligg a) Vilka kandidatnycklar finns i relationen, R? b) Normalisera stegvis relationen till BCNF enligt den generella metoden (dvs där samtliga kandidatnycklar beaktas och inte endast primärnyckeln då normaliseringsreglerna appliceras). För varje normalform som ej uppfylls, ange vilket eller vilka beroenden som strider mot normalformen och vilka åtgärder som vidtas i form av nya relationer och förändringar i existerande relationer. 4
SQL Den här tentans SQL-uppgifter berör Dreamhome-databasen. Nedan ser du därför tabellen för de anställda på Dreamhome (Staff), liksom tabellen för hyresobjekt (PropertyForRent) och tabellen för kunder (Client). Staff PropertyForRent Client 12. Företaget vill kunna se vilka hyresobjekt som passar en viss kund. Skriv därför (2p) koden som visar alla objekt som understiger maxrent för kunden med clientno CR76 (John Kay). Välj att visa alla fält för rätt rader i tabellen PropertyForRent (men inte tabellen Client). 13. Bolaget vill premiera dem som har hand om fler än ett hyresobjekt. Skriv (3p) SQL-koden som höjer dessa personers löner med tio procent. (Du ska alltså höja lönen för dem vars staffno förekommer minst två gånger i PropertyForRent i det här fallet SA9, Mary Howe, och SG37, Ann Beach.) 5
14. Dreamhome bestämmer sig nu för att de anställda ska kunna boka företagets (3p) bilar förmånligt. Din uppgift är att med hjälp av SQL-kod skapa tabellen för bokning av dessa bilar. Tabellen, som du döper till CarBooking, ska innehålla följande: carbookingid ett löpnummer som gärna kan vara automatiskt uppräknat regno (registeringsnummer), som här i uppgiften definieras som exakt sex tecken långt. staffno, alltså den anställdas ID från personaltabellen, kan ha upp till fem tecken. starttime, vilket helst skrivs som datum, men textsträng och heltal är också godkänt. Sätt gärna starttime till dagens datum som utgångsvärde (som i Djuriska). endtime som starttime. Inget utgångsvärde ska dock fyllas i per automatik för endtime. carbookingid är primärnyckel. regno, staffno och starttime får inte innehålla null-värden. endtime får innehålla null-värden. Tabellen ska också knytas ihop med personaltabellen (Staff): En person kan ha många bokningar, men en bokning kan inte delas av många personer. Bokningen måste alltså knytas till en existerande anställd och det ska inte gå att lägga in bokningar till personer som inte finns med i Staff-tabellen. Du får själv avgöra var du vill placera tabellens constraints i din kod (på samma rad som kolumndefinitionen eller efteråt). Så här ska tabellen se ut när den är skapad och man har lyckats lägga in en rad. 6