Föreläsning 5: Relationsmodellen DVA234 Databaser IDT Akademin för Innovation, Design och Teknik
Innehåll Föreläsningens mål: Att ge en överblick över hur relationsmodellen fungerar Relationsmodellen Relationsalgebra 2
Relationsmodellen Grunden för alla relationsdatabaser Principerna utvecklades av matematikern E. F. Codd (1969-70) Idéerna presenterades i en numera klassisk artikel: A Relational Model of Data for Large Shared Data Banks, CACM 13. No 6 (June 1970) Första databaserna som byggde på denna modell: IBM, System/R Ingres 3
Relationsmodellens tre komponenter Datastruktur Beskrivningen av relationsmodellen för användare Datat i en databas uppfattas som tabeller och inget annat än tabeller Dataintegritet Egenskaper och krav på datat, t ex att tabellrader ska vara unika (m.h.a primär nyckel) referensintegritet (m.h.a främmande nyckel) Datamanipulering Operatorer som tillhandahålls för användaren för att manipulera tabeller, t ex för att hämta data Operatorerna skapar (härleder) nya tabeller utifrån givna Särskilt viktiga operationer är: restrict, project och join 4
Relationsmodellens datastruktur Bygger på följande abstrakta datamodell: Data representeras som rader i en tabell. Varje rad kan utläsas som ett sant påstående (eng. proposition). Exempel: Studenten med login brm02001 heter Bosse i förnamn och Ringholm i efternamn och har 2.7 i medelbetyg Operatorer som tillhandahålls skapar nya (sanna) påståenden utifrån givna påståenden. Exempel: Loffe heter Carlzon i efternamn, eller STUDENT Nisse har högre medelbetyg än Bosse. Login# Förnamn Efternamn Medelbetyg brm02001 Bosse Ringholm 2.7 lcn98005 Loffe Carlzon 3.2 nnn99009 Nisse Nilsson 4.2 mon01002 Mimmi Olsson 4.5 5
Relationsmodellen - dataintegritet Dataintegritet uppnås genom restriktioner: Domänrestriktioner Varje attribut måste ha en given typ (int, float, char, personnr.) Alla data i ett visst attribut måste innehålla värden inom typens domän t.ex. om typen är int så måste alla värden vara heltal. (Domän kan vara annorlunda än datatyp, int månad kan bara vara 1-12) Nyckelrestriktioner Primärnyckel varje rad har en unik primärnyckel Kandidatnycklar = andra möjliga minimala nycklar (se nästa föreläsning) t.ex, en relation med studid som primärnyckel är personnr en kandidatnyckel Entitetsintegritet Alla relationer MÅSTE ha en primärnyckel Referensintegritet Främmande nycklar MÅSTE innehålla värden från en primärnyckel Semantiska restriktioner Ytterligare krav på attribut och förhållanden mellan attribut kan finnas Detta löses med CHECK CONSTRAINTS (t.ex. CHECK CONSTRAINT age>=0) (Pseudokod) 6
Naturlig eller surrogatnyckel Naturlig nyckel tas från verkligheten, t ex: Personnummer, studentid, osv osv CIVILSTÅND Gift Skiljd Surrogatnyckel är fiktiv, t ex: 1,2,3, GUID (112243-11244-6634) (Stöd i SQL Server!!! IDENTITY) CIVIL_ID CIVILSTÅND 1 Gift 2 Skiljd 7
Naturlig eller surrogatnyckel För och nackdelar med båda Fördelar med naturlig nyckel: Naturliga nycklar är lättare ätt förstå och få en överblick över databasen. Datamodellen garanterar unikhet (alla nycklar olika) Med surrogatnyckel kan man peta in skiljd flera gånger Det finns lösningar på detta (check constraint UNIQUE) Kräver ofta fler index (ett på id, samt ett på det man normalt söker CIVIL_ID efter) Surroganycklar genererar ofta fler joinar Nackdelar med naturlig nyckel Kan man garantera unikhet på en naturlig nyckel? Joinar över int är mer effektiva än joinar över strängar Att ändra en nyckel kan vara mycket jobb Dock finns ON UPDATE CASCADE 1 Gift CIVILSTÅND 2 Skiljd 3 Skiljd 8
Formell definition av en relation En Relation kan definieras på flera sätt. Schemat för en relation: R (A1, A2,...An) Relationsschemat R är definierad m.a.p. attributen A1, A2,...An Exempel - KUND (Kund#, Kundnamn, Adress, Telnr) Här är KUND en relation som är definierad för de fyra attributen Kund#, Kundnamn, Adress och Telnr, där varje attribut är associerad med en domän eller en mängd av tillåtna värden. T ex, domänen för Kund# kan vara 6-siffriga nummer. 9
Relationsmodellen - Datamanipulering Data kan manipuleras med hjälp av väldefinierade relationsoperationer. Codd definierade 8 st Operationerna arbetar endast med relationer Indata: en eller flera relationer Utdata: en ny relation Detta ger en CLOSURE-egenskap Utdata från en operation kan bli indata till en annan dvs, operationer kan kaskadkopplas 10
Codds ursprungliga operationer 8 (ursprungliga) operationerna: Restrict/Select Project Product Union Difference Intersection Join (natural) Divide 11
Relationsalgebra Relationsalgebra är en uppsättning (teoretiska) operationer som kan användas för manipulering av relationer. Ett uttryck i relationsalgebran extraherar nya relationer utifrån givna och kan på detta vis användas som ett grundläggande frågespråk i en RDBMS. T ex relationsfrågespråket SQL bygger till stora delar på operationerna i relationsalgebran (ej enbart dock). Relationsalgebra är procedurellt, dvs beskriver steg för steg hur ett resultat (en ny relation) erhålls. 12
Syntax för relationsalgebra Relationer benämns med sitt namn t.ex. STUDENT, EMPLOYEE osv En unär operation tar en relation som indata, och producerar en relation som utdata! "#$$%&' ()*+,-./ En binär operation tar två relationer som indata, och producerar en relation som utdata ()*+,-./1! "#$$%&' ()*+,-./2 där! är en relationsoperation Låt oss se på ett konkret exempel 13
Select-operatorn (Restrict) SELECT-operatorn (kallas även RESTRICT) används för att filtrera bort oönskade tupler i en relation. Generell syntax: σ villkor (R) Där σ står för SELECT-operatorn och villkor är ett booleskt villkorsuttryck över attribut från relationen R. Semantik: Skapa en relation med alla tupler från R som uppfyller villkoret. Informellt skulle vi kunna säga att:! "#$%#&'( ) *+, ) -./012. motsvarar SELECT * FROM STUDENT WHERE program= DVP 14
PROJECT-operatorn PROJECT-operatorn används för att extrahera relationer över utvalda attribut (kolumner). Oftast använd för att skala bort oönskade kolumner. Generell syntax: π attributlista (R) där π står för PROJECT-operatorn och attributlista är en kommaseparerad lista av attribut i relationen R. Semantik: Skapa en ny relation med alla tupler från R projicerade över attributen i attributlistan. Informellt skulle vi kunna säga att:! "#$%&''$, ')*' +,-./0, motsvarar SELECT personnr, namn FROM STUDENT 15
Kaskadkoppling av unära operationer Operationer kan kaskadkopplas (nästlas) Ponera följande SQL fråga: SELECT personnr, namn FROM STUDENT WHERE program= DVP Detta skrivs då: eller:! "#$%&''$, ')*' + "$&,$)*-. /01. 2345673 5892345 + "$&,$)*-. /01. 2345673 ;624<3! "#$%&''$, ')*' 5892345 16
Namnbyte på relationer och attribut Ibland kan det vara bekvämt, i vissa fall nödvändigt, att byta namn på relationer eller attribut. Två sätt: Det icke-formella DVPSTUD ß σ Program= DVP (STUDENT) R(ssn, name) ß π personnr, namn (DVPSTUD) Den formella, genom RENAME-operatorn enligt syntaxen: ρ S (R) relation R döps om till S. ρ S(B1, B2,, Bn) (R) relation R döps om till S och attributen i R döps om till B1, B2,, Bn ρ (B1, B2,, Bn) (R) attributen i R döps om till B1, B2,, Bn 17
UNION operatorn Unionoperatorn slår ihop tuplerna från två tabeller Dubletter elimineras Ett krav är att båda tabellerna har samma attribut Ponera följande tabeller R1 R2 A B A x y B m n A y z B n o!1!2 Ger då: x y z m n o I SQL skrivs detta som: SELECT A, B FROM R1 UNION SELECT A, B FROM R2 18
INTERSECT operatorn Intersectoperatorn tar snittet av tuplerna från två relationer Ett krav är att båda tabellerna har samma attribut Ponera följande tabeller R1 R2 A x y B m n A y z B n o!1!2 Ger då: A y B n I SQL skrivs detta som: SELECT A, B FROM R1 INTERSECT SELECT A, B FROM R2 19
DIFFERENCE operatorn Differenceoperatorn tar alla tupler från R1 minus tuplerna från R2 Ett krav är att båda tabellerna har samma attribut Tupler i R2 som inte finns i R1 ignoreras Ponera följande tabeller R1 R2 A x y B m n A y z B n o!1!2 Ger då: A x B m I SQL skrivs detta som: SELECT A, B FROM R1 EXCEPT SELECT A, B FROM R2 20
PRODUCT-operatorn Product-operatorn är densamma som från matematiken, dvs bildar mängden av tupelkombinationer från två relationer (alltså binär operator). En skillnad mot de binära mängdoperatorerna är att relationerna behöver inte vara av samma typ. Syntax: R 1 R 2 Semantik: Skapa en ny relation som består av tuplerna i R 1 kombinerade med tuplerna i R 2. 21
Exempel PRODUCT operatorn Ponera följande tabeller R1 R2 A B C D x m z o y n v p!1!2 Ger då: I SQL skrivs detta som: A B C D x m z o x m v p y n z o y n v p SELECT A,B,C,D FROM R1 CROSS JOIN R2 22
PRODUCT i sin ensamhet är näst intill meningslös eftersom den lätt genererar falska tupler (bryter mot kravet på sanna påståenden) Ponera följande tabeller Anställd Personnr Namn AvdID 630322-1642 Per Nilsson U 840212-1133 Karin Berg M 720211-7225 Frida Ström U Avdelningar AvdID Avdelning Hus U Utveckling Borgen M Marknad Templet E Ekonomi Bunkern Vad blir Anställd x Avdelningar??? 23
PRODUCT i sin ensamhet Anställd Personnr Namn Anställd.AvdID Avdelningar.AvdID Avdelning Hus 630322-1642 Per Nilsson U U Utveckling Borgen 840212-1133 Karin Berg M U Utveckling Borgen 720211-7225 Frida Ström U U Utveckling Borgen 630322-1642 Per Nilsson U M Marknad Templet 840212-1133 Karin Berg M M Marknad Templet 720211-7225 Frida Ström U M Marknad Templet 630322-1642 Per Nilsson U E Ekonomi Bunkern 840212-1133 Karin Berg M E Ekonomi Bunkern 720211-7225 Frida Ström U E Ekonomi Bunkern Alla röda rader är falska, d 24
(INNER) JOIN-operatorn Istället används Product-operatorn nästan alltid tillsammans med selectoperatorn Denna kombination kallas INNER JOIN R!" joinvillko r Inner join sammanför tupler från två relationer baserat på ett matchande attribut Semantik: Skapa en relation som består av kombinationen av tuplerna i R1 resp. R2. som tillsammans uppfyller joinvillkoret. S 25
Exempel INNER JOIN Nytt försök att sätta ihop våra tabeller men nu med en inner join Anställd Avdelningar Personnr Namn AvdID AvdID Avdelning Hus 630322-1642 Per Nilsson U U Utveckling Borgen 840212-1133 Karin Berg M 720211-7225 Frida Ström U M Marknad Templet E Ekonomi Bunkern!"#$Ä&&' *+,-ä//0.*20345*206/+7+89:.*2034!;'<&"=">!? ger då: Anställd Personnr Namn Anställd.AvdID Avdelningar.AvdID Avdelning Hus 630322-1642 Per Nilsson U U Utveckling Borgen 840212-1133 Karin Berg M M Marknad Templet 720211-7225 Frida Ström U U Utveckling Borgen Motsvarande i SQL är: SELECT * FROM Anställd JOIN Avdelningar ON Anställd.AvdID=Avdelningar.AvdID 26
INNER JOIN-operatorn (forts) INNER JOIN kan alltså skrivas som Product & Select: Där villkor är på formen: Tecknet R!" joinvillko r S ºs joinvillkor (R S) Generellt skrivs joinvillkor som: villkor AND villkor AND... AND villkor Θ =, >, ³, <,, ¹ A i ΘB j (theta) står för ett av jämförelseoperatorerna: En generell JOIN kallas därför THETA-JOIN 27
EQUIJOIN och NATURAL JOIN En EQUIJOIN är en JOIN där jämförelseoperatorn alltid är =, dvs exakt matchning mellan två attribut. R!" A = B i j S Och den vanligaste matchningen är exakt jämförelse mellan attribut med samma namn i bägge relationerna. Detta kallas för NATURAL JOIN och skrivs: R *S Semantik för NATURAL JOIN: Skapa en relation som består av kombinationen av tuplerna i R1 resp. R2 och som uppfyller villkoret att värdena är lika för samtliga attribut med samma namn i R1 resp. R2. 28
Outer join En outer join behåller tuplerna som inte matchas av joinvillkoret De tupler som inte matchas fylls på med null-värden Den finns i 3 varianter Left outer join Behåller tuplerna i den vänstra relationen Right outer join Behåller tuplerna i den högra relationen Full outer join Behåller tuplerna i båda relationerna R > villkor S R < villkor S R >< villkor S 29
Exempel RIGHT OUTER JOIN Ponera följande två tabeller Anställd Personnr Namn AvdID 630322-1642 Per Nilsson U 840212-1133 Karin Berg M 720211-7225 Frida Ström U Avdelningar AvdID Avdelning Hus U Utveckling Borgen M Marknad Templet E Ekonomi Bunkern!"#$Ä&&' < *+,-ä//0.*20345*206/+7+89:.*2034!;'<&"=">!? ger då: Anställd Personnr Namn Anställd.AvdID Avdelningar.AvdID Avdelning Hus 630322-1642 Per Nilsson U U Utveckling Borgen 840212-1133 Karin Berg M M Marknad Templet 720211-7225 Frida Ström U U Utveckling Borgen NULL NULL NULL E Ekonomi Bunkern Motsvarande i SQL är: SELECT * FROM Anställd RIGHT JOIN Avdelningar ON Anställd.AvdID=Avdelningar.AvdID 30
DIVIDE-operatorn Används för att hitta tupler som är kombinerade med samtliga tupler från en viss relation. Syntax: R S Är svår att intuitivt förstå, och direkt motsvarighet i SQL saknas Svarar på frågor av typen: Vilka studenter har gått ALLA kurser givna av läraren xxx? Precis som Division är motsatsen till multiplikation i matematiken är Divide-operatorn motsatsen till Product-operatorn 31
DIVIDE-operatorn Ponera följande relationer A 1 2 3 O x y Så blir ju! #: AxO 1 x 1 y 2 x 2 y 3 x 3 y 32
DIVIDE-operatorn (AxO) A = O då blir : AxO 1 x 1 y 2 x 2 y 3 x 3 y A 1 2 = 3 O x y 33
DIVIDE-operatorn (AxO) O = A Och : AxO 1 x 1 y 2 x 2 y 3 x 3 y O = x y A 1 2 3 34
DIVIDE-operatorn Ponera följande tabeller: Studentreg Anna Anna Anna Pelle DVA234 DVA235 DVA336 DVA234 xxx- Kurser = DVA234 Resultat Anna Linda Pelle Linda Linda Oskar DVA336 DVA234 DVA235 DVA336 DVA235 Kurser givna av lärare xxx Studenter som läser alla kurser som ges av xxx Alla studenters registreringar 35
Kaskadkoppling av binära operationer Naturligtvis kan även binära operation kaskadkopplas Exempel Binär och unär kaskadkoppling:!1 %&''()* + %&''()*!2 Exempel Två binära operationer!1 %&''()*!2!3 Grundregeln är att man evaluerar inifrån och ut genom parenteserna precis som vanligt 36
Summering av föreläsningen Föreläsningens mål: Att ge en överblick över hur relationsmodellen fungerar Relationsmodellen Relationsalgebra 37