Databasteknik Kjell Lindqvist, (08) 790 62 76 Sid 1 Objekt/Objektklasser Samband / Sambandsklasser Ett objekt är ett föremål eller ett begrepp som kan identifieras entydigt med ett identifikationsbegrepp inom modellens ram. En objektklass är en samlande beskrivning av objekt som identifieras på samma sätt. Person Objektklass Objektklassen person används t.ex. för att skapa objekt (instanser) innehållande (i det här fallet) ID-nr, namn och adress på personer. 2207 Hans Perssson Gamla Vägen 3 3151 Olle Jonsson NyaVägen33 I datamodeller beskriver vi objektklasserna enligt ovan med angivande av objektklassens namn, samt i tabeller enligt nedan (T-matriser), där identifikationsterm (I-term) samt egenskapstermer (E-termer) anges med namn. Ett samband beskriver ett relevant förhållande mellan två eller flera objekt. Det identifieras entydigt av I-termerna för de objekt det relaterar till varandra. Beroende på om det beskriver ett samband mellan två eller flera objekt kallas det av 2:a, 3:e o.s.v ordningen. Sambandet har dessutom, om det är av 2:a ordningen, en typ 1:1, 1:N eller M:N, enligt nedan. Om det är av högre ordning tillmäts det inte någon typ. Sambandsklasserna beskrivs som linjer mellan de objekt som de relaterar till varandra utan angivande av I-termer eller E-termer, samt i T-matriser med angivande av namnen på sina I- resp. E-termer. Kvinna Chef Författare 1:1 1:N M:N Gift med Basar över Till Man Anställd Bok T-matris Typ Namn I-termer E-termer Obj Person ID-nr Namn, Adress Projekt Beställning Leverantör Material Objektförekomster presenteras i huvudsak genom tabeller, t.ex.: Sambandförekomster beskrivs i form av tabeller, precis som objektförekomster. Person ID-nr Namn Adress 2207 Hans Persson Gamla Vägen 3 3151 Olle Jonsson Nya Vägen 33
Sid 2 Kjell Lindqvist, (08) 790 62 76 Databasteknik Övningsuppgifter i datamodellering Uppgift 1 Ett flygbolag önskar ett databassystem omfattande: Alla passagerare som har rest eller ämnar resa med bolaget. Namn, adress och telnr är intressanta samt naturligtvis sträckan de har eller ska åka. Varje sträcka som trafikeras varje dag av ett antal förbindelser (flights). Varje sådan förbindelse har ett unikt förbindelsenummer och ska innehålla information om varifrån planet går, destination, avgångstid och ankomsttid. Observera dock att 0900-planet mellan Umeå (=UME) och Bromma (=BMA) har samma förbindelsenummer varje dag. För olika resursberäkningar registreras också för varje avgång vilket specifikt plan som ska användas. För varje avgång vill man också ha uppgifter om arbetande personal. De registreras med namn, yrke och adress. För piloterna är man också intresserad av vilka flygplanstyper de är utbildade för. Flygplanstypen består av tillverkare och modellbeteckning Det kan naturligtvis finnas flera plan av samma typ. Dessa identifieras unikt med ett namn t.ex. LELLE VIKING. Gör en datamodell över detta så att t.ex. följande frågor kan besvaras : Med vilka piloter har en passagerare åkt? Bestäm namnet på de flygplan en speciell pilot är utbildad för. Ta reda på alla avgångar från BMA till UME under veckan 22/4-29/4 med förbindelsenummer, avgångs- och ankomsttid. Undersök om någon pilot är kompetent att flyga hela flygplansflottan. Vilka passagerare har åkt med någon förbindelse med avgångstid före kl 0700? Uppgift 2 Upprätta en datamodell över en skolas högstadium. Den skall innehålla uppgifter om alla skolklasser, alla elever och alla lärare. För alla klasser vill man förutom klassrumsnumret även veta vilka lärare de har i de olika ämnena, vem som är klassföreståndare och var de skall vara då de har specialämnen och inte kan vara i det egna klassrummet. Elever har en klassföreståndare men kan gå kurser som inte omfattar alla elever i klassen (tillvalsämnen tex) där de går tillsammans med elever från andra klasser. Beroende på ämne kan olika klassrum vara olika lämpliga. En lärare kan vara behörig i flera ämnen. Systemet skall naturligtvis ge information om i vilken klass en elev går samt dessutom namn, personnummer, adress, tel, m.m. för såväl lärare som elever. Uppgift 3 En sjukvårdsförvaltning som innefattar 6 större och 4 mindre sjukhus samt 3 fristående laboratorier önskar en datamodell över den interna sjukhusadministrationen. För sjukhusen finns uppgifter om namn, adress, telnr, antal rum och totalt antal bäddar. För laboratorierna finns uppgifter om namn, adress, telnr, de prover (med unikt provnummer) som undersökts de senaste 6 månaderna och från vilka personer resp prov kommer. Alla inneliggande patienter skall medtas med uppgift om personnummer, namn, adress, bäddnr, vilket rum och vilket sjukhus patienten finns på samt vilken diagnos patienten fått. Diagnosen innehåller t.ex. information om typ av sjukdom, övriga besvär och allergiska reaktioner. Om läkarna finns uppgifter om personnummer, namn, adress, skiftschema och specialitet och vilka patienter han ansvarar för. Om övrig personal finns uppgifter om personnummer, namn, adress samt vilka rum denna person helt eller delvis ansvarar för. Gör en datamodell över detta. Uppgift 4 Gör en datamodell över följande biblioteksverksamhet. Detta skall finnas med : Bibliotekets namn, storlek (5 olika värden), adress, distrikttillhörighet samt uppgift om vilket bibliotek som är huvudbibliotek inom distriktet. Uppgifter om personalen som jobbar på biblioteken (Namn, adress och lön). Alla böcker med klassifikationskod, titel, författare, antal utlåningar/bibliotek. Utlåningsdatum och återlämningsdatum för böcker som är utlånade. Låntagares namn, adress och lånekortsnummer. Kö för låntagare som vill låna en speciell bok.
Databasteknik Kjell Lindqvist, (08) 790 62 76 Sid 3 Från datamodell till databasstruktur 1. Huvudregler a. Objektklass som innehåller E-term(er) bildar en egen basrelation. b. Objektklass som bara består av en I-term och som finns på N-sidan i ett 1:N-sambandsklasser bildar egna basrelationer. c. Sambandsklass av ordning > 2 bildar egen basrelation. d. Sambandsklass av ordning = 2 och av typ M:N bildar egen basrelation. e. Sambandsklass av typ 1:N försvinner men I-termen i objektklassen som finns på 1-sidan blir E-term i objektklassen på N-sidan. Eventuella E-termer i sambandsklassen blir E-termer i objektet på N- sidan. f. Sambandsklass av typ 1:1 behandlas som om den vore av typen 1:N (regel e) med godtyckligt val av N-sida. Alternativt slås de objektklasser, som sambandet förbinder, samman till en basrelation. Eventuella E- termer i sambandsklassen blir E-termer i objektet på N-sidan. 2. Normalisering Kontroll måste ske av att de enligt 1. erhållna basrelationerna är normaliserade. Om så inte är fallet måste man normalisera dessa. Efter normaliseringen måste man genom reverse engeneering rita den modell som motsvarar de erhållna basrelationerna (rita modellen genom att använda reglerna enligt 1 "baklänges"). Kontrollera att modellen fortfarande stämmer med den verklighet som den avbildar och om så inte är fallet måste justeringar göras. Om modellen justerats måste hela processen göras om från början (överför till databasstruktur, kontrollera att basrelationerna är normaliserade ). Avseende metodiken vid normalisering, se normaliseringsavsnittet. 3. Sammanslagning av basrelationer Att slå samman två eller flera basrelationer till en basrelation kan ibland vara nödvändigt, framförallt av prestandaskäl. Den basrelation man erhåller på detta sätt är i regel inte normaliserad och man kan alltså få alla de problem som icke normaliserade basrelationer kan medföra. 4. Uppdelning av basrelationer Att dela upp en basrelation i två eller flera basrelationer kan vara en annan metod att uppnå vissa prestandaförbättringar. Om man t.ex. har många egenskapstermer i en basrelation och det är mycket olika åtkomstfrekvens på dessa termer kan man separera de termer man vill komma åt och låta dem bilda en egen basrelation, speciellt då det gäller tunga transaktioner. 5. Sammanslagning och uppdelning av basrelationer p.g.a. databashanteringssystemet Även om man har beslutat sig för att kokboksmässigt följa reglerna och inte acceptera annat än basrelationer normaliserade till minst 3:e normalform kan det databashanteringssystem man använder ha egenskaper som gör det nödvändigt att slå samman resp. dela upp basrelationer. Det kan t.ex. finnas restriktioner avseende antalet samtidigt öppna filer, på antalet element i en post eller på antalet poster i en fil.
Sid 4 Kjell Lindqvist, (08) 790 62 76 Övningsuppgifter i frågespråk Databasteknik Normalisering 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 ); Formulera följande frågor i Relationsalgebra, tupelkalkyl, domänkalkyl, SQL, SAL och QBE. 1. Vilka anställda arbetar på leksaksavdelningen? 2. Vilka varor säljs på andra våningen? 3. Vilka varor säljs inte av någon avdelning på andra våningen? 4. Vilka varor säljs av alla avdelningar på andra våningen? 5. Vilka varor säljs av minst två avdelningar på andra våningen? 6. Hur mycket tjänar Anderssons chef? 7. Vilka anställda tjänar mer än sin chef? 8. På vilka avdelningar tjänar alla anställda mindre än sina chefer? 9. Vilka företag levererar varor till mer än en våning? 10. På vilka avdelningar är medellönen större än 10000? 11. Vilka chefer har mer än 10 anställda under sig, och vilken lön har dessa chefer? 12. Vilka anställda på skoavdelningen har mer än 10000 i lön, och vad heter deras närmsta chef? 13. Vilka anställda tjänar mer än alla på skoavdelningen? 14. Vilka företag levererar pennor? 15. Vilka företag levererar inte pennor? OBS! En i huvudsak semantisk operation, svår att automatisera.det bästa sättet är att gå tillväga på enklast möjliga, manuella sätt. Nedan följer en liten "handbok" i normalisering till 3NF. Det finns högre normalformer än 3NF, men det räcker att kunna dessa 3. Avsikten med normaliseringen är att avslöja och lösa upp dolda strukturer i data, oftast dolda i egenskaperna hos ett objekt eller samband. I en normaliserad datamodell är de egenskaper som definierats i ett objekt eller ett samband "funktionellt beroende" av id-termen. Normaliseringsprocessen utförs i tre steg och en fullt normaliserad databas säga vara i "tredje normalform" (3NF). Detta betyder att alla termer i egenskapsdelen på ett objekt/samband skall vara funktionellt beroende av alla id-termer, och får inte vara funktionellt beroende av ickeprima attribut. Funktionellt beroende kan man definiera så: Term A är funktionellt beroende av term B om A kan ha ett och endast ett värde tillsammans med ett givet värde hos term B. Term B kan vara en sammansatt term. Ex.: Ex.: En persons namn och hårfärg kan anses vara funktionellt beroende av personens personnummer. En sammanställning av timpriset för olika projektmedlemmar på ett företag visar att, i detta fall, timpriset är funktionellt beroende av både personen och projektet. Varför är normalisering viktigt? Utan den kan vi stöta på problem avseende uppdatering, lagring av nya data samt borttagning av data.
Databasteknik Kjell Lindqvist, (08) 790 62 76 Sid 5 Normalisering Hur definieras de olika normalformerna?? 1NF: En basrelation är i 1NF omm alla attributvärden är atomära (en tabell är i 1NF omm alla skärningar mellan rad och kolumn endast innehåller ett distinkt värde). 2NF: En basrelation är i 2NF omm den är i 1NF och varje ickeprimt attribut är fullständigt funktionellt beroende av varje kandidatnyckel *. 3NF: En basrelation är i 3NF omm den är i 2NF och varje ickeprimt attribut är icke transitivt beroende av varje kandidatnyckel, d.v.s. inte beror av kandidatnyckeln via något annat ickeprimt attribut. OK, låter bra men, hur når man detta, för relationsdatabasen, så viktiga tillstånd?? * Se Elmasri, Navathe 14.4.3 Första normaliseringssteget: Genomföres genom att man hittar en nyckel för hela relationen. Det är viktigt att hitta alla kandidatnycklarna till relationen. Andra normaliseringssteget: Utförs om en eller flera av de ickeprima egenskaperna i en basrelation är funktionellt beroende av en del av någon kandidatnyckel, men inte av hela. Detta steg kan alltså utföras endast på basrelationer som har minst en sammansatt kandidatnyckel. Genomföres genom att man skiljer ut de ickeprima egenskaper som är funktionellt beroende av endast en del av en kandidatnyckel och gör dem till en egen tabell som får som identifikationsdel den del av den ursprungliga kandidatnyckel som de är partiellt beroende av. Tredje normaliseringssteget: Utförs om det existerar transitiva funktionella beroenden i en basrelation, d.v.s. om en ickeprim egenskapsterm är funktionellt beroende av andra ickeprim egenskapstermer som i sin tur beror av en nyckel. Genomföres genom att man skiljer ut de egenskaper som är funktionellt beroende av andra egenskapstermer och gör dem till en egen tabell som får som identifikationsdel de egenskapstermer i den ursprungliga basrelationen som de är funktionellt beroende av. Dessa kvarstår som egenskapstermer i den ursprungliga basrelationen. Efter utförd normalisering: Utgående från den normaliserade strukturen ritas en ER-modell. Med hjälp av modellen kontrolleras resultatet så att det stämmer med den verklighet som avbildas.
Sid 6 Kjell Lindqvist, (08) 790 62 76 1. På det till dags dato lilla företaget Lilla AB har man nöjt sig med ett kortregister för att hålla reda på personalen. Företaget har som policy att se till att dess anställda är rejält försäkrade, och försäkringar som företaget består med finns också med på korten. Ett ex. på hur ett kort kan se ut: Databasteknik Övningsuppgifter i normalisering 3. Problemet i 1) råkar även Mekanik montering AB ut för när det gäller företagets inköp. Dessa har skötts m.h.a kort med utseendet: Varunamn: Skål Varunummer: 321765 Vikt: 0,37 Anställd Namn: PNr: Adress: PostNr: PAdr: AnstDat: Lön: Anhöriga Karin Johan Ann Krister Pelle Karlsson 380812-0001 Vårgatan 3 919 19 Vårstad 720221 16316 390909-9344 580122-3112 611212-0044 670705-0375 maka son dotter son Försäkringar Olycksfall Liv Leverantör: Lasses Järn Adress: Storgat 16 tele: 123123 best 144 500 300 Leverantör: Olles spik Adress: Lillgat 45 tele: 321321 best datum 860314 860429 860524 datum pris 34,70 34,70 35,10 pris lev 70 500 lev rest 74 0 rest Företaget växer och har behov av en databas. Att direkt överföra informationen på korten till en databasstruktur är inte möjligt. Normalisera därför detta till 1NF, 2NF samt 3NF. Notera alla antaganden. 2. Man har på KTH elevprojekt där man för varje deltagande elev registrerar: Personnummer, namn, linjetillhörighet (t.ex.: D87/ MD87/SU89), handledares anställningsnummer(= persnr), handledares namn, handledares kontor (lokala adress), handledares arbetstelefon, projektnummer, projektnamn, kort projektbeskrivning, totala antalet poäng på projektet, elevens hittills insamlade poäng (på projektet) samt datum för elevens sista kontakt med handledare. En elev kan delta i flera projektarbeten. Allt detta har man registrerat under elevens personnummer och om eleven deltar i flera projekt finns ett registerblad per projekt (alltså är inte persnr ett entydigt id-begrepp). Skriv som en relation och överför till 1NF, 2NF samt 3NF. Motivera varje steg i lösningen. 350 860417 36,40 200 Normalisera även detta till 1NF, 2NF samt 3NF. 4. Tandläkaren Sven Borrglad har ett kortregister över sina patienter där man tycker sig kunna se att han vill betrakta sig själv som familje-tandläkare. Ett kort har följande utseende: FamiljeNr PatientNr 150 FamiljeNamn FamiljeAdress BetalningsBalans PatientNamn TandStatus Åtgärdskod ÅtgärdsBeskrivning Pris Datum sorterat efter patientnr. Överför steg för steg till 1, 2, 3NF, med angivande av vilka funktionella beroenden som motiverar varje utförd åtgärd.
Kjell Lindqvist, (08) 790 62 76 Databasteknik Sid 7 Övningsuppgifter i normalisering 5. Öhmans Varuhus skall skapa ett datoriserat system för att administrera personal och varor. En nyanställd systemerare (som tidigare arbetat på Varuhuset) utgår ifrån varuhusdatabasen men kommer fram till att tillägg bör göras för att ta hänsyn till följande: En anställd identifieras, förutom av sitt namn, av pnr och ett anställningsnr. En anställd bor på en viss gatuadress har ett postnr och en ortsadress. En anställd kan ha ett flertal telnr. Varje avdelning har endast en chef. En leverantör kan leverera vissa varor (det är dock inte säkert att han levererar något). En leverantör kan kan ha ett antal filialer. En leverantörsfilial har en adress bestående av gatuadress, postnr och ort. En leverantörsfilial kan endast ha ett telnr och ett faxnr. Följande funktionella beroenden gäller: (Listan är inte säkert komplett.) pnr anstnr, Namn, lön, gatuadr, postnr, ort, chef, avd, våning anstnr pnr, Namn, lön, gatuadr, postnr, ort, chef, avd, våning Namn pnr, anstnr, lön, gatuadr, postnr, ort, chef, avd, våning chef avd, våning postnr ort varunr varutyp avd chef, våning leverantör, varunr, avd lagervol, försvol, varutyp varunr, avd försvol, varutyp tel leverantörsfilial, gatuadr, postnr, ort, fax fax leverantörsfilial, gatuadr, postnr, ort, tel leverantörsfilial tel, fax, gatuadr, postnr, ort 6. Givet en relation med schemat U={A, B, C, D, E, F, G} och de funktionella beroendena BC A FG BC B D C E F A G A ABE G ACD F Normalisera till 1NF, 2NF och 3NF 7. Givet en relation med schemat U={A, B, C, D, E, F, G} och de funktionella beroendena AB C B E CF D C A B F CE F CD B B C Normalisera till 1NF, 2NF och 3NF Hjälp systemeraren att definiera en struktur som är normaliserad till 3NF.
Sid 8 Databasteknik Kjell Lindqvist, (08) 790 62 76 Övningsuppgifter i transaktionshantering 1 Tre olika transaktioner T 1, T 2 och T 3 skall utföra följande operationer i en databas: T 1 : läs A, sedan skriv till B T 2 : läs B, sedan skriv till C T 3 : läs C, sedan skriv till A När transaktionerna påbörjas blir deras operationer sammanflätade i följande operationsföljd: 2 Nedan visas schematiskt ett antal transaktioner mot en databas. Ange hur databasen förändras av de olika transaktionerna. T 1 Write(A) T2 T3 Read(A) Write(A) Read(A) Write(B) Tid T 1 T 2 T 3 Begin Read A Begin Read B Begin Read C Write C Write B Write A a. Är denna operationsföljd serialiserbar? b. Vad händer om man använder låsning? (Antag att varje transaktion låser objekten innan den läser eller skriver det och släpper låset då den inte längre behöver det.) c. Vad händer om man använder tvåfaslåsning? d. Vad händer om man använder konservativ 2- faslåsning? e. Vad händer om man använder 2-faslåsning med wait-die protokollet? f. Vad händer om man använder 2-faslåsning med wound-wait protokollet? g. Vad händer om man använder 2-faslåsning med cautious-wait protokollet? h. Vad händer om man använder 2-faslåsning med no-wait protokollet? i. Vad händer om man använder 2-faslåsning med timeout protokollet? j. Vad händer om man använder tidsstämpling? k. Vad händer om man använder optimistisk samtidighetskontroll? Checkpoint T 5 T 4 Read(D) Read(A) Write(C) Write(D) Systemfel 3 Beskriv hur databassystemet skall agera vid återstart efter systemfel och ange vad effekten blir i föregående övningsuppgift. 4 En bankkund har tre konton i en bank. I början finns det 2000:- på konto A, 1000:- på konto B och 1000:- på konto C. Kunden vill transferera 100:- från konto C till konto B. För detta skall följande transaktion T 1 genomföras: T 1 : C := C - 100 T 1 : B := B +100 Ungefär samtidigt startar en transaktion T 2 för ränteberäkning som skall höja alla kontobelopp med 10 procent: T 2 : A := A * 1.1 T 2 : B := B * 1.1 T 2 : C := C * 1.1 När de två transaktionerna genomförs så kan deras operationer sammanflätas på olika sätt. Betrakta följande två operationsföljder (OF): OF1: T 2 : A := A * 1.1 OF2: T 2 : A := A * 1.1 T 1 : C := C 100 T 1 : C := C - 100 T 1 : B := B +100 T 2 : B := B * 1.1 T 2 : B := B * 1.1 T 2 : C := C * 1.1 T 2 : C := C * 1.1 T 1 : B := B +100
Kjell Lindqvist, (08) 790 62 76 Databasteknik Sid 9 a. Är operationsföljderna serialiserbara? b. Vilket blir slutresultaten i de två operationsföljderna? c. Hur mycket förlorar kunden? d. Vilken av följande metoder kan garantera korrekt genomförande av transaktionerna? 1. låsning av varje dataobjektprecis innan det användsoch släpps direkt efter 2. 2-faslåsning 3. konservativ 2-faslåsning 4. optimistisk samtidighetskontroll 5 Ett databassystem har kraschat. Vid återstart av systemet måste innehållet i databasen återställas till ett konsistent tillstånd. För detta används loggfilen, vilken har följande innehåll: Begin_transaction(T2) Write(T2, A, 80, 50) Begin_transaktion(T3) Commit_transaction(T2) Checkpoint Write(T3, B, 40, 30) Begin_transaktion(T1) Write(T1, A, 50, 100) Read(T3, A, 100) Rollback(T3) Begin_transaktion(T3) Write(T1, A, 100, 150) Commit_transaction(T1) Write(T3, B, 40, 30) Övningsuppgifter i transaktionshantering, forts a. Beskriv vad som händer vid återstart. b. Hur ser det återställda databastillståndet ut? c. Vad händer sedan?