Entity-Relationship-modellen 1 Varför behöver man kunna E-R design? E-R diagram är ett visuellt sätt att designa databasers struktur Enkelt och överskådligt sätt att beskriva data, samt de samband som finns mellan data Ger en mera högnivå beskrivning av databasens struktur än relationstabeller Ger bra stöd för att diskutera databasens design med dess användare Ger relationsscheman som vanligtvis är väl normaliserade Det finns en hel del grafiska editorer för E-R design Man kan designa E-R diagram med en grafisk editor, och sedan (mer eller mindre) automatiskt översätta de här till relationssceman Strukturen på relationstabellerna blir ofta bra om man först designar databasen i form av E-R diagram. Relationsscheman blir vanligtvis automatiskt väl normaliserade 2 1
Designprocess Innan man kan definiera schemat för en databas måste man förstå hur verksamheten fungerar i det företag eller den organisation där databassystemet skall användas. Man måste göra en konceptuell (dvs. begreppsmässig) beskrivning av verksamheten som databassystemet skall stöda. Vilken data behövs, hur är data sinsemellan relaterat, hur vill man använda data i verksamheten, Den konceptuella beskrivningen kan sedan översättas till ett relationsschema Relationsschemat beskriver strukturen på tabellerna som bygger upp databasen. Ett vanligt sätt att göra den konceptuella beskrivningen är med hjälp av E-R-modellen Entity-Relationship-modellen! Entity = entitet, sak, objekt! Relationship = samband, förhållande 3 Modellering En databas kan modelleras som: en samling av entiteter, samband mellan entiteter (på engelska relationships). En entitet är ett objekt som existerar och som kan särskiljas från andra objekt. Exempel: en person, ett företag, en händelse som t.ex. ett uttag från ett bankkonto, en beställning som görs, Entiteter har attribut Exempel: människor kan ha namn och adress, ett uttag från ett bankkonto kan ha attributen kontonummer, belopp och tidpunkt En entitetsmängd är en mängd entiteter av samma typ som alla har samma egenskaper. Exempel: mängden av alla personer, mängden av alla kurser, mängden av alla banktransaktioner, mängden av alla helgdagar. 4 2
Entitetsmängderna och - _ 76766 Crick 45565 Katz 10101 Srinivasan 98345 Kim 76543 Singh 22222 Einstein 98988 Tanaka 12345 Shankar 00128 Zhang 76543 Brown 76653 Aoi 23121 Chavez 44553 Peltier 5 Sambandsmängder Ett samband (på engelska relationship) är en association mellan flera entiteter Till exempel: Student-entiteten 44553 (Peltier) är associerad med entiteten 22222 (Einstein) En sambandsmängd (relationship set) är en mängd av samband, alla av samma typ Definitionen på en sambandsmängd är en matematisk relation mellan n 2 entiteter, var och en från entitetsmängder {(e 1, e 2, e n ) e 1 E 1, e 2 E 2,, e n E n } där (e 1, e 2,, e n ) är ett samband och E 1, E 2, E n är entitetsmängder Exempel: (44553, 22222) advisor uttrycker att en (44553, Peltier) har som handledare föreläsaren (22222, Einstein). 6 3
Sambandsmängden advisor 76766 Crick 45565 Katz 10101 Srinivasan 98345 Kim 76543 Singh 22222 Einstein 98988 Tanaka 12345 Shankar 00128 Zhang 76543 Brown 76653 Aoi 23121 Chavez 44553 Peltier 7 Sambandsmängder (forts.) Sambandsmängder kan också ha egna attribut. Till exempel, sambandsmängden advisor mellan entitetsmängderna och kan ha ett attribut date som anger när läraren blev handledare för en i fråga 76766 Crick 45565 Katz 10101 Srinivasan 98345 Kim 76543 Singh 22222 Einstein 3 May 2008 10 June 2007 12 June 2006 6 June 2009 30 June 2007 31 May 2007 4 May 2006 98988 Tanaka 12345 Shankar 00128 Zhang 76543 Brown 76653 Aoi 23121 Chavez 44553 Peltier 8 4
Graden av en sambandsmängd Graden av en sambandsmängd beskriver hur många entitetsmängder som deltar i sambandsmängden dvs. för hur många entiteter som sambandet gäller Sambandsmängder som har två deltagande entitetsmängder kallas binära (eller är av graden två). De flesta sambandsmängder i en databas är binära. Man kan också ha sambandsmängder som involverar flera än två entitetsmängder.! Exempel: er kan arbeta inom ett projekt som leds av en lärare! Man skulle då ha en sambandsmängd som involverar tre entiteter, och project Samband mellan flera än två entitetsmängder förekommer relativt sällan. De flesta relationer är binära. 9 Attribut En entitet representeras av en mängd attribut, dvs. av en mängd beskrivande egenskaper som alla medlemmar av entitetsmängden har. Exempel: = (,, dept_, ) course= (course_id, title, dept_, credits) Domänen för ett attribut är mängden av de tillåtna värden för varje attribut Exempel: domänen för attributet i kunde t.ex. vara femsiffriga heltal Attribut kan vara av olika typer: Enkla och sammansatta attribut. Envärda och flervärda attribut. Deriverade (härledda) attribut. 10 5
Enkla och sammansatta attribut Enkla attribut kan inte delas upp i mindre beståndsdelar Sammansatta attribut byggs upp av ett antal andra attribut Exempel: det sammansatta attributet består av tre komponenter first_ middle_initial last_ Det sammansatta attributet address består av 6 attribut sammansatt i två nivåer composite attributes address first_ middle_initial last_ street city state postal_code component attributes street_number street_ apartment_number 11 Envärda, flervärda och härledda attribut Envärda attribut har ett enda värde Exempel: attributet _id kan ha ett enda värde för varje entitet En kan ha exakt ett id-nummer Flervärda attribut kan ha flera värden Exempel: antag att vi för varje också vill representera telefonnummer För varje lärare vill vi kunna lagra nummer till arbetstelefon, mobiltelefon och hemtelefon Olika lärare kan ha olika antal telefonnummer: inget, ett eller flera Härledda eller deriverade attribut kan beräknas från värden på andra attribut Exempel: antag att vi också har ett attribut födelsedatum för lärare Då kunde vi ha ett härlett attribut ålder som man beräknar från födelsedatum och dagens datum Härledda attribut behöver inte lagras i relationer, utan de kan beräknas när de behövs 12 6
Sambandstyper (mapping cardinality) Beskriver till hur många entiteter en annan entitet kan associeras via en sambandsmängd Mest användbar för att beskriva binära sambandsmängder. För en binär sambandsmängd mellan två entitetsmängder A och B måste sambandstypen vara en av följande : En-till-en (1:1)! En entitet i en entitetsmängd A är associerad med högst en entitet i B och en entitet i B är associerad med högst en entitet i A En-till-många (1:N)! En entitet i A är associerad med godtyckligt många (noll, en eller flera) entiteter i B och en entitet i B är associerad med högst en entitet i A Många-till-en (N:1)! En entitet i A är associerad med högst en entitet i B och en entitet i B kan vara associerad med godtyckligt många entiteter i A (noll, en eller flera) Många-till-många (N:N)! En entitet i A är associerad med godtyckligt många entiteter i B och en entitet i B kan vara associerad med godtyckligt många entiteter i A 13 Sambandstyper A B A B a 1 b 1 a 2 b 1 a 1 b 2 a 3 b 2 a 2 b 3 a 4 b 3 a 3 b 4 b 5 (a) En till en (1:1) (b) En till många (1:N) OBS: En del element i A och B behöver inte vara associerade med något element i den andra mängden 14 7
Sambandstyper (forts.) A B A B a 1 a a 2 b 1 a 1 a 2 b 1 b 2 a 3 b 2 a 3 b 3 a 4 b 3 a 4 b 4 a 5 (a) Många till en (N:1) (b) Många till många (N:N) 15 Fullständigt och partiellt deltagande Om varje entitet i en entitetsmängd E måste delta i åtminstone ett samband i en sambandsmängd R säger vi att deltagandet är fullständigt. på engelska kallas det här total participation t.ex. om varje måste delta i ett advisor-samband med åtminstone en, så är deltagandet av entitetsmängden i sambandsmängden advisor totalt uttrycker att alla er måste ha åtminstone en handledare Om bara en del av entiteterna i entitetsmängden E behöver delta i ett samband i sambandsmängden R säger vi att deltagandet är partiellt det får finnas entiteter i E som inte deltar i något samband i R deltagandet av entitetsmängden i sambandsmängden advisor är partiellt alla lärare måste inte nödvändigtvis ha er som de handleder 16 8
Nycklar för entitetsmängder För att kunna identifiera olika entiteter utser vi ett visst attribut till att vara en nyckel för entitetsmängden En nyckel kan unikt identifiera entiteterna En supernyckel för en entitetsmängd är en mängd av ett eller flera attribut vars värden unikt bestämmer varje entitet. det måste finnas attribut som gör det möjligt att unikt identifiera en viss entitet En kandidatnyckel för en entitetsmängd är en minimal supernyckel är kandidatnyckel för course_id är kandidatnyckel för course Det kan finnas flera kandidatnycklar en av dessa väljs till att vara primärnyckel. 17 Nycklar för sambandsmängder För sambandsmängder bildar kombinationen av primärnycklarna för de deltagande entitetsmängderna en supernyckel för sambandsmängden. T.ex. (s_id, i_id) är en supernyckel för sambandsmängden advisor Det här betyder att ett par av entitetsmängder kan ha högst ett samband i en viss sambandsmängd. Om sambandet har attribut begränsar det här hur många attributvärden vi kan lagra för ett samband 76766 Crick 45565 Katz 10101 Srinivasan 98345 Kim 76543 Singh 22222 Einstein Man kan bara lagra ett par av (s_id, i_id) för varje par av studerande och lärare Om man behöver lagra flera attributvärden kan man använda flervärda attribut 98988 Tanaka 12345 Shankar 00128 Zhang 76543 Brown 44553 Peltier Kombinationen av de deltagande entitetsmängdernas primärnycklar är en supernyckel för sambandsmängden, men beroende på sambandets kardinalitet kan en av primärnycklarna för de deltagande entiteterna räcka 3 May 2008 10 June 2007 12 June 2006 6 June 2009 30 June 2007 31 May 2007 4 May 2006 76653 Aoi 23121 Chavez 18 9
Primärnyckel för sambandsmängder Man måste beakta mappningskardinaliteten för sambandsmängden när man besluter vilka attribut som är kandidatnycklar. Primärnyckeln skall vara en minimal supernyckel, dvs. den skall inte innehålla några onödiga attribut Om sambandet är av typen ett-till-många (eller många-till-ett) räcker en av primärnycklarna till för att unikt identifiera sambandet T.ex. anta att sambandet advisor är av typen ett-till-många från till Dvs. en kan ha högst en handledare, men en lärare kan handleda många er Primärnyckeln för sambandet advisor blir då primärnyckeln i Tanaka Brown Zhang Shankar Chavez Student Crick Katz Singh Einstein Instructor 19 Redundanta attribut i entitetsmängder Antag att vi har identifierat att vi vill ha de två entitetsmängderna med attributen,, dept_ och department med attributen dept_, building och budget samt en sambandsmängd inst_dept mellan dessa som kopplar föreläsare till institutioner Attributet dept_ som är primärnyckel i department förekommer också i, men är onödigt om det finns ett samband mellan en föreläsare och en institution så säger ju det till vilken institution föreläsaren hör vi kan i så fall lämna bort attributet dept_ från Det är bättre att behandla kopplingen mellan föreläsare och institutioner som ett samband än som ett attribut som alla lärare har det kan ju också finnas lärare som inte hör till någon institution (t.ex. en inbjuden gäst från ett företag som håller en kurs) 20 10
E-R diagram advisor tot_cred Rektanglar representerar entitetsmängder. Överst i rektangeln anges namnet på entitetsmängden ( och i figuren) Efter det listas attributen för entitetsmängden. De attribut som hör till primärnyckeln är understreckade Romber representerar sambandsmängder. Sambandets namn skrivs inne i romben (advisor i figuren) Linjer länkar ihop de entitetsmängder som ingår i en sambandsmängd. I figuren har vi ett samband advisor mellan entitetsmängderna och 21 E-R diagram med sammansatta, flervärda och härledda attribut Sammansatta attribut (som ) representeras genom att med indentering lista de attribut som det består av attributet består av förnamn, mellannamnets initial och efternamn Flervärda attribut betecknas genom att skriva dem inneslutna av klamrar attributet phone_number är flervärt anger att en lärare kan ha flera telefonnummer Härledda attribut betecknas med en parentes efter attributets namn age är ett härlett attribut beskriver att det beräknas från andra attribut first_ middle_initial last_ address street street_number street_ apt_number city state zip { phone_number } date_of_birth age ( ) 22 11
Sambandsmängder med attribut Om en sambandsmängd har attribut anger vi de här i en rektangel och länkar dem till sambandsmängdens romb med en streckad linje advisor är ett samband mellan en lärare och en Sambandet advisor har ett attribut date: datum när läraren blev handledare för en date advisor tot_cred Om ett samband har flera attribut listas de alla i samma rektangel. Flervärda och sammansatta attribut behandlas på samma sätt som attribut för entiteter. 23 Roller Entitetsmängder i ett samband behöver inte vara distinkta En entitetsmängd kan delta i ett samband med sig själv T.ex. i ett samband som beskriver förkunskaper för kurser Ett samband prereq som anger att en viss kurs kräver en annan kurs som förkunskap Man anger då vilken roll entitetsmängden har i sambandet med ett märke (label) på linjen mellan entiteten och sambandet. Märkena anger hur entiteterna förhåller sig till varandra i sambandet Märket course_id anger att en kurs kräver en annan kurs som förkunskap Märket prereq_id anger att en annan kurs utgör ett förkunskapskrav för den här course course_id title credits course_id prereq_id prereq 24 12
Begänsningar på kardinalitet Vi uttrycker begränsningar på kardinalitet genom att rita antingen en riktad linje ( ), som betyder högst en, eller en oriktad linje ( ), som betyder många, mellan en sambandsmängd och en entitetsmängd. Exempel på samband: En associeras med högst en lärare via sambandet advisor en kan ha högst en handledare En associeras med högst en institution genom sambandet stud_dept en kan höra till högst en institution 25 En-till-en samband Exempel: en-till-en samband mellan lärare och er en lärare är associerad med högst en genom sambandet advisor en är associerad med högst en lärare genom sambandet advisor advisor tot_cred Ett mera realistiskt exempel skulle vara sambadet anställd mellan entiteterna befattning och lärare lärare anställd befattning befattnings benämning institution 26 13
En-till-många samband Om vi har ett en-till-många samband mellan och så associeras en lärare med flera (också möjligtvis noll) er via advisor dvs. en lärare kan handleda många er (noll, en eller flera) En associeras med högst en lärare via sambandet advisor dvs. en kan bara ha en (eller möjligtvis ingen) handledare Ett en-till-många samband mellan och är naturligtvis det samma som ett många-till-en samband mellan och advisor tot_cred 27 Många-till-en samband Om vi i stället skulle ha ett många-till-en samband mellan och så associeras en lärare med en (eller möjligtvis noll) er via advisor dvs. en lärare kan bara handleda en (eller möjligtvis ingen) En associeras med flera lärare via sambandet advisor dvs. en kan ha noll, en eller flera handledare advisor tot_cred Det här är ju inte en speciellt realistisk modell av ett universitet 28 14
Många-till-många samband En lärare associeras med flera (möjligen också 0) er via sambandet advisor En associeras med flera (möjligen också 0) lärare via advisor En kan ha flera (eller noll) handledare och en lärare kan handleda noll eller flera er advisor tot_cred När man designar en E-R modell av någon verksamhet måste man noga tänka igenom vilket av dessa alternativ som motsvarar verkligheten 29 Totalt och partiellt deltagande Totalt deltagande indikeras av dubbla linjer: varje entitet i entitetsmängden måste delta i åtminstone ett samband i sambandsmängden T.ex. deltagande av entiteterna i sambandet inst_dept är totalt! varje måste vara associerad med exakt en institution inst_dept department dept_ building budget Partiellt deltagande: En del entiteter behöver inte nödvändigtvis delta i något samband i sambandsmängden. Exempel: deltagande av i sambandet advisor är partiellt. advisor tot_cred 30 15
Alternativ notation för kardinalitetsbegränsningar Kardinalitetsbegränsningar kan också uttryckas explicit med en minimi- och maximigräns för hur många samband de olika entiteterna kan delta i I figuren anger gränserna 1..1 på linjen mellan och advisor att en måste vara associerad med exakt en via sambandet advisor Gränserna 0..* på linjen mellan och advisor anger att en lärare kan ha mellan noll och oändligt många er som den handleder Alternativt uttryckt: sambandet advisor är en-till-många från till 0..* advisor 1..1 tot_cred 31 E-R diagram med trefaldigt samband Samband behöver inte alltid vara binära, dvs. mellan två entitetsmängder Samband mellan tre entitetsmängder kallas på engelska ternary relationship (ternärt samband på svenska?) I exempeldiagrammet har vi ett samband proj_guide mellan tre olika entitetsmängder:, och project representerar att en är involverad i ett projekt under ledning av en lärare project... proj_guide tot_cred 32 16
Kardinalitetsbegränsningar på ternära samband Vi tillåter högst en pil ut från en ternär (eller en högre grads) samband för att beteckna en kardinalitetsbegränsning T.ex. en pil från sambandsmängden proj_guide till indikerar att en kan ha högst en ledare för ett projekt som den deltar i. Om man tillåter fler än en pil ut från ett ternärt samband så blir betydelsen av sambandet oklart kan tolkas på två olika sätt project... proj_guide tot_cred 33 Kardinalitetsbegränsningar på ternära samband (forts.) Om det finns fler än en pil finns det två olika sätt att definiera betydelsen. T.ex. ett ternärt samband R mellan A, B och C med pilar till B och C kunde betyda att varje A entitet är associerad med högst en kombination av entiteter från B och C eller att varje par av entiteter från (A, B) är associerat med en unik C entitet, och varje par (A, C) är associerat med en unik B entitet B A R C Båda alternativen har använts i olika formalismer För att undvika risken för sammanblandning bestämmer vi att det inte får finnas fler än en pil i ternära samband 34 17
Binära vs. icke-binära samband En del samband som ser ut att vara icke-binära kan bättre representeras med binära samband. T.ex. ett tre-vägs samband parents, som relaterar ett barn till sina två föräldrar kan hellre ersättas med två binära samband, father och mother! gör det enklare att lagra partiell information, t.ex. att bara modern är känd Det finns också en del samband som av naturen är icke-binära T.ex. ett samband works_on som beskriver att en anställd jobbar i en viss position i en avdelning Att ersätta det här med tre binära samband skulle dölja meningen med sambandet och vara svårare att förstå anställd job works_on avdelning 35 Svaga entitetsmängder En entitetsmängd som inte har en egen primärnyckel kallas en svag entitetsmängd (weak entity set). En svag entitetsmängd kan bara existera om det finns en identifierande entitetsmängd (identifying entity set) Man kan också säga att den identifierande entitetsmängden äger den svaga entitetsmängden En svag entitetsmängd måste vara relaterad till den identifierande entitetsmängden via en total, en-till-många sambandsmängd (från den identifierande till den svaga entitetsmängden) Ett identifierande samband beskrivs med en dubbelstreckad romb Diskriminatorn (eller den partiella nyckeln) för en svag entitetsmängd är den mängd av attribut som skiljer entiteterna från varandra i en svag entitetsmängd. Primärnyckeln för en svag entitetsmängd utgörs av primärnyckeln för den starka entitetsmängden som den svaga entitetsmängden beror på, plus diskriminatorn för den svaga entitetsmängden. 36 18
Svaga entitetsmängder (forts.) Identifierande samband avbildas med en dubbelstreckad romb måste vara ett många-till-en samband från den svaga entitetens sida deltagande av den svaga entitetsmängden i det identifierande sambandet måste vara totalt (avbildat med en dubbel linje) Diskriminatorn i en svag entitetsmängd är understreckad med en streckad linje. course_id är primärnyckel för den identifierande entitetsmängden Primärnyckel för entitetsmängden section är kombinationen av (course_id, sec_id, semester, year) course course_id title credits sec_course section sec_id semester year 37 Svaga entitetsmängder (forts.) Identifierande samband skall inte ha några egna beskrivande attribut de kan istället placeras i den svaga entitetsmängden En svag entitetsmängd kan delta i andra samband än det med det identifierande entitetsmängden T.ex. kunde section också delta i ett samband med entiteten time_slot, för att representera information om när en viss kurs föreläses Man kan också ha en svag entitetsmängd med flera än en identifierande entitetsmängder en viss svag entitet identifieras då av en kombination av entiteter från de identifierande entitetsmängderna 38 19
Designfrågor Det är inte alltid lätt att avgöra vad som är det bästa sättet att modellera den verklighet som man försöker avbilda designprocessen är en iterativ process man börjar med en initial design och förfinar den efter hand Kan ibland vara svårt att avgöra om något skall representeras av en entitetsmängd, ett attribut eller en sambandsmängd. ofta finns det flera olika sätt att modellera någonting kan inte alltid säga att något sätt är rätt eller fel, utan en del av dessa beslut är designfrågor Hur man utformar modellen beror mycket på strukturen av det företag eller organisation som man modellerar, och på hurudan roll de saker som man modellerar har i verksamheten saker som är väsentliga för verksamheten får en mera framträdande roll i modellen 39 Entitetsmängd eller attribut för att representera en viss sak? Skall man använda en entitetsmängd eller ett attribut för att representera en viss sak? Exempel: skall man modellera telefonnummer som ett attribut hos eller skall telefoner vara en egen entitet? om man anser att det är viktigt att representera de telefoner som anställda har så kan man skapa en egen entitetsmängd för dessa, samt en sambandsmängd inst_phone som förbinder anställda med telefoner om telefoner inte har en så betydande roll så behövs inte en egen entitetsmängd för dem phone_number inst_phone phone phone_number location 40 20
Entitetsmängd eller sambandsmängd? Skall man använda en entitetsmängd eller en sambandsmängd för att representera en viss sak? En riktlinje för att avgöra om man skall använda entiteter eller samband är att man ofta använder entiteter för att beskriva objekt (eller saker) för vilka man vill lagra information använder ett samband för att beskriva en händelse som kan ske mellan entiteter Entitetsmängders namn är ofta substantiv,, course, classroom, Sambandsmängders namn är ofta härledda från verb som beskriver någon händelse teaches, takes, 41 Binär eller n-värd sambandsmängd? Skall man använda binära eller n-värda sambandsmängder? Det är alltid möjligt att ersätta en n-värd sambandsmängd med ett antal binära sambandsmängder Ibland visar en n-ary sambandsmängd tydligare att flera entiteter deltar i ett och samma samband. Exempel: en anställd som kan ha olika befattningar i olika avdelningar anställd skulle bli svårare att förstå meningen med det här om vi ersatte works_on med tre skilda sambandsmängder En del samband som ser ut att vara n-värda kan i själva verket bättre representeras som binära Exempel: man kunde tänka sig ett ternärt samband parent mellan tre personer, som relaterar ett barn till sina föräldrar men det är bättre att representera det här som två skilda samband, mother och father man kan då bättre representera personer för vilka vi saknar information om den ena föräldern jobb works_on avdelning 42 21
Placering av attribut i entiteter eller samband Var vi väljer att placera attribut (i en entitetsmängd eller en sambandsmängd) har betydelse för vad som kan representeras Antag att advisor är ett samband av typen ett-till-många från till En kan bara ha en handledare, men en lärare kan handleda många er Attributet date, som anger när läraren blev ens handledare, kan då placeras som ett attribut i vi kunde också lika väl lagra det här attributet i sambandet advisor, eftersom det är av typen ett-till-många Men om vi skulle välja att lagra date som ett attribut i så kunde vi inte lagra olika datum för olika er som den läraren handleder 76766 Crick 98988 Tanaka May 2009 45565 Katz 12345 Shankar June 2007 10101 Srinivasan 00128 Zhang June 2006 98345 Kim 76543 Brown June 2009 76543 Singh 76653 Aoi June 2007 22222 Einstein 23121 Chavez May 2007 44553 Peltier May 2006 43 E-R diagram för ett universitet course_dept department dept_ building budget inst_dept stud_dept advisor tot_cred teaches takes grade course_id course course_id title credits prereq prereq_id sec_course section sec_id semester year sec_class sec_time_slot time_slot time_slot_id { day start_time end_time } classroom building room_number capacity 44 22
Nu är det dags att designa ett E-R diagram för ett enkelt exempel: Ett bibliotek vid ett universitet som t.ex. ÅA:s bibliotek 45 Beskrivning av biblioteket Bibliotekets databas lagrar information om böcker, bibliotekskunder, lån och reserveringar av böcker. Böcker identifieras av ett ISBN. Övriga attribut är författarens namn (bestående av förnamn och efternamn) samt bokens titel. Kunder identifieras av ett unikt kundnummer. Övriga attribut är namn (förnamn och efternamn) samt kundens adress, bestående av gata, gatunummer, postnummer och stad. En bok kan finnas i många exemplar. Ett visst exemplar av en bok identifieras av ett exemplarnummer. För varje exemplar lagrar man också information om var den boken finns (Axelia, ASA, huvudbiblioteket, ) En kund kan låna ett visst exemplar av en bok. För varje lån lagras lånedatum och förfallodatum. En kund kan också reservera en bok som är utlånad. Kunder reserverar en viss bok, inte ett specifikt exemplar. För varje reservering lagras datum när den reserverats. 46 23
Entiteter och samband Entiteter: Kunder Böcker Exemplar av en bok Samband Lån (mellan kund och exemplar) Reservering (mellan kund och bok) kund kundnr namn förnamn efternamn adress gata nr postnr stad ISBN namn förnamn efternamn titel Bok_exemplar (mellan en bok och ett exemplar av den boken) Det kan inte finnas ett exemplar om det inte finns en bok bok exemplar ex_nr plats Vad är sambandens kardinalitet? Lån : en bok lånas av en kund, och en kund kan låna många ex av en bok 1 N från kund till exemplar Reservering: En kund kan reservera många böcker, och en bok kan reserveras av många kunder N N Bok_exemplar: En bok kan finnas i många exemplar, men ett exemplar är alltid av en specifik bok 1 N från bok till exemplar Exemplar är en svag entitetsmängd som identifieras av bok 47 E-R diagram för biblioteket exemplar ex_nr plats lånedatum förfallodatum lån bok bok_ex ISBN namn förnamn efternamn titel reservering datum kund kundnr namn förnamn efternamn adress gata nr postnr stad 48 24
Översättning av E-R diagram till relationsschema Man kan översätta ett E-R diagram på ett systematiskt sätt till relationsscheman som representerar databasens struktur. En databas som beskrivs av ett E-R diagram representeras av en samling av scheman som beskriver samma databas. Man genererar ett schema för de entitetsmängder och sambandsmängder som finns i E-R diagrammet Scheman ges samma namn som den motsvarande entitetsmängden eller sambandsmängden i E-R diagrammet Scheman beskriver strukturen på de tabeller som används för att lagra information om entiteterna och sambanden i databasen Varje schema har ett antal kolumner med namn som är unika inom schemat Motsvarar vanligtvis attributen i E-R diagrammet 49 Att representera entitetsmängder som scheman En stark entitetsmängd översätts till ett schema med samma attribut som entitetsmängden. (,, tot_cred) Primärnyckel i schemat blir samma attribut som är primärnyckel i entitetsmängden tot_cred Schemat beskriver att information om -entiteter lagras i en tabell som har tre kolumner:, och tot_credit Efter att vi har satt in data i databasen kan tabellen vid någon tidpunkt ha t.ex. följande värden tot_credit 00128 Zhang 102 19991 Brandt 80 54321 Williams 54 76543 Brown 58 50 25
Svaga entitetsmängder som scheman I exemplet är section en svag entitetsmängd, som har den identifierande starka entitetsmängden course Beskriver att det inte kan existera någon entitet section utan att det finns en entitet course som den hör till. En svag entitetsmängd representeras av ett schema som innehåller attributen för den svaga entitetsmängden, samt primärnyckeln för den identifierande starka entitetsmängden. section (course_id, section_id, semester, year) Man skapar inget eget eget schema för sambandet mellan en identifierande och en svag entitetsmängd. course course_id title credits sec_course section sec_id semester year 51 Exempel E-R diagram: Vi får scheman course course_id title credits course (course_id, title, credits) sec_course section (course_id, section_id, semester, year) section sec_id semester year Databasen kan då t.ex. innehålla följande tabeller: course course_id title credits CS-190 Game design 4 CS-347 Databases 3 BIO-301 Genetics 4 BIO-101 Intro. to biology 3 section course_id section_id semester year CS-190 1 Spring 2009 CS-347 1 Fall 2009 BIO-301 1 Summer 2010 BIO-101 1 Summer 2009 52 26
Sambandsmängder som scheman Sambandsmängder kan antingen representeras av ett eget schema, eller genom att i schemat för den ena entitetsmängden sätta in ett referensattribut till den andra entitetsmängden Vilket alternativ som används beror på typen av sambandet För N:N samband skapar man alltid ett eget schema För 1:N samband sätts ett referensattribut in i många-sidans schema! Referensattributet består av primärnyckeln för 1-sidans entitet För 1:1 samband sätts ett referensattribut in i den ena av de deltagande entiteternas scheman! Man kan välja i vilken av entiteterna man sätter referensattributet! Referensattributet är primärnyckeln för den andra entiteten För 1:1 samband kan man också slå ihop scheman för de två deltagande entiteterna till ett enda schema. 53 N:N sambandsmängder som scheman Många-till-många sambandsmängder representeras som ett eget schema som har som attribut primärnycklarna för de deltagande entitetsmängderna, samt eventuella beskrivande attribut för sambandsmängden. primärnycklarna för de deltagande entitetsmängderna blir främmande nycklar i sambandsmängdens schema Exempel: schema för sambandsmängden advisor, som relaterar entiteterna och med varandra advisor är här ett N:N samband, dvs. en lärare kan handleda många er och en kan ha många handledare Scheman: advisor (_id, _id ) (,, ) (,, tot_credit) advisor tot_cred 54 27
Exempel Vi får scheman advisor (_id, _id ) (,, ) (,, tot_credit) Databasens tabeller kan då vid någon tidpunkt tänkas se ut på följande sätt: tot_credit 45565 Katz 75000 00128 Zhang 102 83821 Brandt 92000 44553 Peltier 56 22222 Einstein 95000 54321 Williams 54 76543 Brown 58 advisor _id _id 00128 45565 76543 45565 44553 22222 55 1:N sambandsmängder som scheman 1:N sambandstyper blir till ett schema med ett referensattribut i N-entitetstypens tabell De båda entitetstyperna representeras av var sitt schema I schemat för entiteten på N-sidan inkluderas primärnyckeln för entiteten på 1-sidan (som en främmande nyckel) Om sambandsmängden har egna attribut så inkluderas de också i schemat på N-sidan Exempel: Vi behöver inte skapa ett eget schema för sambandet inst_dept I stället sätts ett referensattribut dept_ till schemat för t department dept_ building budget inst_dept stud_dept advisor tot_cred 56 28
Exempel E-R diagram: totalt deltagande av i inst_dept inst_dept department dept_ building budget Vi får scheman (,, dept_, ) department (dept_, building, budget) dept_ 12121 Wu Finance 90000 22222 Einstein Physics 95000 45565 Katz Comp.Sci. 75000 83821 Brandt Comp.Sci. 92000 department dept_ building budget Biology Watson 90000 Comp.Sci. ICT 100000 Finance Painter 120000 History Painter 50000 Physics Watson 70000 57 1:N sambandsmängder med partiellt deltagande I exemplet var deltagandet av i sambandet inst_dept totalt dvs. alla lärare måste vara associerade med en institution Likaså är stud_dept ett totalt 1:N samband från till department alla er måste vara associerade med exakt en institution Om deltagande är partiellt kan det vara bättre att skapa en egen tabell för sambandet annars får vi null-värden i tabellerna för de entiteter som inte deltar i något samband t department dept_ building budget inst_dept stud_dept advisor tot_cred 58 29
Exempel Om vi istället skulle ha partiellt deltagande behöver inte alla er höra till en institution Om en stor mängd av entiteterna på N-sidan inte deltar i något samband med en entitet på 1-sidan så får vi null-värden för attributet dept_ i tabellerna I det fallet är det bättre att skapa en egen tabell för sambandet stud_dept department tot_cred stud_dept dept_ building budget tot_credit 00128 Zhang 102 44553 Peltier 56 54321 Williams 54 23121 Chavez 110 55739 Sanchez 38 stud_dept _id dept_ 00128 Comp.Sci. 44553 Physics 23121 Finance 59 1:1 sambandsmängder som scheman Ett-till-ett sambandsmängder representeras som ett referensattribut i den ena sidans schema Man skapar inget eget schema för 1:1 samband De båda entitetstyperna representeras med var sitt schema Välj en av de deltagande entitetsmängderna och sätt till primärnyckeln för den andra entitetsmängden som en främmande nyckel Eventuella attribut för sambandet sätts till i samma schema Man väljer att placera referensattributet i det av de två scheman som har ett mera fullständigt deltagande i sambandet Leder till färre null-värden i tabellerna Om ett av deltagandet i sambandet är totalt så placeras referensattributet i schemat för den entiteten Man får då inga null-värden i relationstabellerna Om deltagande för båda entitetsmängderna i sambandet är totalt så kan vi kombinera de båda entitetstyperna till ett enda schema Varje entitet av den ena typen motsvaras av exakt en entitet av den andra typen 60 30
Exempel Exempel: antag vi har entiteter för personer och rum de sitter i Varje person har ett rum, och varje rum används av högst en person person first last person_room Vi kan då sätta in room_nr som ett referensattribut i schemat för person person (, first, last, room_nr ) room (room_nr, building, floor) Alternativt kan vi sätta in som ett referensattribut i room person (, first, last) room (room_nr, building, floor, ) room room_nr building floor 61 Sammansatta och flervärda attribut Sammansatta attribut blir till ett schema som består av attributets enkla komponenter Plattar ut den hierarkiska strukturen i sammansatta attribut Endast attributen på löv-nivå tas med i schemat Exempel: schema för entitetsmängden (, first_, middle_initial, last_, street_number, street_, apt_number, city, state, zip_code, date_of_birth) För flervärda attribut skapas ett eget schema Består av entitetstypens primärnyckel samt det flervärda attributet inst_phone (, phone_number) Lagrar alla telefonnummer för en viss föreläsare Härledda attribut skall inte representeras i schemat De kan beräknas utgående från andra entiteter och samband first_ middle_initial last_ address street street_number street_ apt_number city state zip { phone_number } date_of_birth age ( ) 62 31
Ternära sambandstyper som schema Ternära sambandsmängder (eller sambandsmängder av högre grad) representeras av ett eget schema Inkluderar primärnyckeln från varje av de deltagande entitetstyperna, samt eventuella egna attribut för sambandet Exempel: sambandet proj_guide beskriver att en arbetar i ett projekt under ledning av en (,, tot_cred) (,, ) project (proj_number,, ) proj_guide (stud_, _, proj_number) project... proj_guide tot_cred 63 Exempel: ett bibliotek Vi genererar relationsscheman för E-R diagrammet över universitetsbiblioteket som vi använde som exempel exemplar ex_nr plats lånedatum förfallodatum lån bok bok_ex ISBN namn förnamn efternamn titel reservering datum kund kundnr namn förnamn efternamn adress gata nr postnr stad 64 32
Relationsscheman för biblioteket Entitetsmängden bok är en vanlig (starkt) entitetsmängd Får ett schema med de samma enkla attributen som i E-R diagrammet:! Bok (ISBN, förnamn, efternamn, titel) kund är också en vanlig (starkt) entitetsmängd Får ett schema som innehåller de enkla attributen! Kund (kundnr, förnamn, efternamn, gata, nr, postnr, stad) Schemat för den svaga entitetsmängden exemplar skall innehålla primärnyckeln för den identifierande entiteten (dvs. ISBN ), diskriminanten ex_nr, samt attributet plats Exemplar (ISBN, ex_nr, plats) bok ISBN namn förnamn efternamn titel kund kundnr namn förnamn efternamn adress gata nr postnr stad exemplar ex_nr plats bok_ex bok ISBN namn förnamn efternamn titel 65 Relationsscheman för biblioteket Sambandsmängden lån mellan exemplar och kund är av typen N:1 (från exemplar till kund ) och kan representeras genom att sätta in ett referensattribut till kund i schemat för exemplar Exemplar (ISBN, ex_nr, plats, kundnr, lånedatum, förfallodatum) exemplar ex_nr plats lånedatum förfallodatum lån kund kundnr namn förnamn efternamn adress gata nr postnr stad Sambandsmängden reservering är av typen N:N och representeras med en egen tabell som innehåller primärnycklarna för de deltagande entiteterna, samt det egna attributet Reservering (ISBN, kundnr, datum) reservering datum bok ISBN namn förnamn efternamn titel 66 33
Exempel på relationstabeller Vid en viss tidpunkt kan relationstabellerna i databasen ha följande innehåll Reservering Bok ISBN namn titel ISBN kundnr datum 0-07-295886-3 A.Silberschatz 9789113029917 21842 25-01-2011 9780099908401 E.Hemmingway Old man and the sea 9780099908401 11265 17-01-2011 9789113029917 K-O.Knausgård Min kamp 1 Kund kundnr förnamn efternamn gata gatunr postnr stad 11265 Mats Aspnäs Backgatan 28 20540 Åbo 12733 Annamari Soini Tavastgatan 12 20520 Åbo 21842 Eija Karsten Sydmovägen 44 21600 Pargas Exemplar ISBN ex_nr plats kundnr lånedatum förfallodatum 0-07-295886-3 1 ASA 0-07-295886-3 2 Axelia 0-07-295886-3 3 Axelia 11265 10-01-2011 30-05-2011 9780099908401 1 ASA 12733 20-12-2010 14-02-2011 9789113029917 1 Arken 11265 24-01-2011 15-02-2011 67 Sambandet lån som en egen tabell N:1 sambandet lån mellan exemplar och kund representerades genom att sätta in ett referensattribut till kund i schemat för exemplar Exemplar (ISBN, ex_nr, plats, kundnr, lånedatum, förfallodatum) De flesta böcker i ett bibliotek är inte utlånade Deltagandet av exemplar i lån är mycket lågt Vi får en massa null-värden på de attribut som lagrar information om vem som lånat en bok och utlåningstiden Därför är det i det här fallet bättre att skapa ett eget schema för sambandet lån Bok (ISBN, förnamn, efternamn, titel) Exemplar (ISBN, ex_nr, plats) Kund (kundnr, förnamn, efternamn, gata, nr, postnr, stad) Lån (ISBN, ex_nr, kundnr, lånedatum, förfallodatum) Reservering (ISBN, kundnr, datum) Notera att kundnr inte hör till primärnyckeln i lån Primärnyckeln skall vara minimal 68 34
Exempel på relationstabeller Bok Vi undviker null-värden i exemplar-tabellen genom att skapa en egen tabell för lån ISBN författare titel 0-07-295886-3 A.Silberschatz 9780099908401 E.Hemmingway Old man and the sea 9789113029917 K-O.Knausgård Min kamp 1 Exemplar ISBN ex_nr plats 0-07-295886-3 1 ASA 0-07-295886-3 2 Axelia 0-07-295886-3 3 Axelia 9780099908401 1 ASA 9789113029917 1 Arken Kund kundnr förnamn efternamn gata gatunr postnr stad 11265 Mats Aspnäs Backgatan 28 20540 Åbo 12733 Annamari Soini Tavastgatan 12 20520 Åbo 21842 Eija Karsten Sydmovägen 44 21600 Pargas Lån Reservering ISBN ex_nr kundnr lånedatum förfallo-datum 0-07-295886-3 3 11265 10-01-2011 30-5-2011 9789113029917 1 11265 24-01-2011 15-2-2011 9780099908401 1 12733 20-12-2010 14-02-2011 ISBN kundnr datum 9789113029917 21842 25-01-2011 9780099908401 11265 17-01-2011 69 Utökade E-R egenskaper: Specialisering Top-down design process; vi identifierar distinkta subgrupper i en entitetsmängd subgrupper som skiljer sig från andra entiteter i mängden. Dessa subgrupper blir lägre-nivås entitetsmängder som har attribut eller deltar i samband som inte gäller för entitetsmängderna på den högre nivån. Beskrivs av en triangel-komponent med beteckningen ISA (t.ex. en is a person). Attributnedärvning entitetsmängder på en lägre nivå ärver alla attribut och deltagande i samband av entitetsmängder på högre nivå till vilka det är länkat. person ISA employee 70 35
Exempel på specialisering En person kan antingen vara en anställd (employee) eller en En anställd (employee) kan antingen vara en lärare () eller en sekreterare person address Alla personer har de tre attributen, och address En anställd har dessutom ett attribut En har dessutom ett attribut tot_credits rank employee secretary hours_per_week tot_credits Entitetsmängden har de 5 attributen,, address, och rank 71 Utökade ER egenskaper: Generalisering En bottom-up design process kombinera ett antal entitetsmängder som delar samma egenskaper till en högre-nivås entitetsmängd. Specialisering och generalisering är direkta inverser av varandra; de representeras i E-R diagram på samma sätt. Termerna specialisering och generalisering används båda för att beteckna samma sak. Kan ha flera specialiseringar av en entitetsmängd baserat på olika egenskaper. T.ex. permanent_employee och temporary_employee, tillsammans med och secretary Varje entitet av typen employee skulle vara antingen en permanent_employee eller temporary_employee, också antingen vara eller secretary Sambandet ISA kallas också ett superklass - subklass samband. 72 36
Att representera specialisering med scheman Metod 1: Gör ett schema för entiteten på högre nivå Gör ett schema för varje entitetsmängd på lägre nivå och inkludera primärnyckeln för entitetsmängden på högre nivå, samt lokala attribut Exempel: person (,, address) employee (, ) (, tot_credit) employee person address tot_credits Nackdel för att få information om en employee måste man accessera två relationer, en som motsvarar låg-nivå schemat employee och en som motsvarar hög-nivå schemat person 73 Att representera specialisering som scheman (forts.) Metod 2: Gör ett schema för varje entitetsmängd med alla lokala och ärvda attribut person = (,, address) employee (,, address, ) (,, address, tot_credit) Om specialiseringen är total behöver schemat för den generaliserade entitetsmängden (person) inte laga information total betyder att varje entitet på högre nivå också måste höra till en av entitetsmängderna på lägre nivå kan definieras som en vy relation (view) som innehåller unionen av de specialiserade relationerna explicita scheman kan fortfarande behövas för begränsningar på främmande nycklar Nackdel:, address kan lagras redundant för de som är både er och anställda 74 37
Sammanfattning av symboler i E-R notationen E R R entity set relationship set identifying relationship set for weak entity set E A1 A2 A2.1 A2.2 {A3} A4() E A1 a ributes: simple (A1), composite (A2) and multivalued (A3) derived (A4) primary key R E total participation of entity set in relationship E A1 discriminating a ribute of weak entity set 75 Sammanfattning av symboler (forts.) R many-to-many relationship R many-to-one relationship R one-to-one relationship R l..h E cardinality limits R role E role indicator E2 E1 E3 ISA: generalization or specialization E1 total total (disjoint) generalization E1 disjoint generalization E2 E3 E2 E3 76 38
Alternativ E-R notation Crows feet notation många-till-många E1 R E2 en-till-en E1 R E2 många-till-en E1 R E2 totalt (E1) och partiellt (E2) deltagande E1 R E2 77 39