Relationsmodellen 2-1 Relationsmodellen Relations modellen är idag den mest änvända datamodellen för kommersiella applikationer. Relationsdatabasstruktur En relationsdatabas består av en samling tabeller, alla med unika namn. En rad i en tabell representerar ett samband mellan en mängd värden. En tabell är en entitetsmängd och en rad en entitet. Exemplet i boken är ett banksystem tabell, entitetsmängd attribut rad, entitet account account_number branch_name balance A-101 Downtown 500 A-102 Perryridge 400 A-201 Brighton 900 A-215 Mianus 700 A-217 Brighton 750 A-222 Redwood 700 A-305 Round Hill 350 Ett nära samband mellan en tabell och en relation existerar.
Relationsmodellen, 2-2 Grundläggande struktur Givet mängder D 1, D 2,..., D n så är en relation r en delmängd av D 1 D 2... D n En relation är en mängd av n-tupler (a 1, a 2,..., a n ) ) där varje a i D i D i är domänen = mängden av alla tillåtna värden för attribut i Ex.: Låt customer_name = {Jones, Smith, Curry, Brown} customer_street = {Main, North, Park} customer_city = {Rye, Pittsfield, Harrison} Då är r = { (Jones, Main, Harrison), (Smith, North, Harrison), (Curry, North,Rye), (Brown,Park, Rye) } en relation över customer_name customer_street customer_city Enda skillnad från definitionen av en relation i matematiken är att varje attribut i en relation har namn istället för att vara numrerade (nummer 1 för domänen som listas först, osv.).
Relationsmodellen 2-3 Attributtyper Attributvärden måste (normalt) vara atomiska; dvs. odivisibla. Obs! Multivärda attributvärden är inte atomiska. Sammansatta attributvärden är inte atomiska. Det speciella värdet null är medlem av varje domän. Null-värdet orsakar komplikationer vid definition av många operationer. Tupelvariabler En tupelvariabel t är en variabel vars domän är mängden av alla tupler Notation: värdet för tupel t:s attribut customer_name: t[customer_name] alt.: t[1] dvs.: t[customer_name] = t[1] = Jones Notation: t r anger att tupeln t är i relationen r Obs! Eftersom en relation (tabell) är en mängd av tupler har tuplernas (radernas) ordningsföljd ingen betydelse.
Relationsmodellen 2-4 Databasscheman Databasschema = logisk uppbyggnad av databasen. Databasinstans = innehållet i databasen vid en viss tidpunkt. Begreppet relation motsvarar variabeln i ett programmeringsspråk och begreppet relationsschema således typdeklarationen i ett programmeringsspråk. Ett relationsschema ges ett namn (konvention: relationsnamn består av bara små bokstäver, medan namnen på relationsscheman börjar med en stor bokstav). Ett relationsschema består av en lista attribut med motsvarande domäner: A 1, A 2,..., A n är attribut R = (A 1, A 2,..., A n ) är ett relationsschema Ex.: Ex.: Customer_schema = (customer_name, customer_street, customer_city) r(r) är en relation på relationsschemat R customer(customer_schema)
Relationsmodellen 2-5 Databasinstans Relationsinstans är det aktuella värdet för en relation (kan förändras) och anges m.h.a. en tabell. (Begreppet relationsinstans motsvarar värdet för en variabel i ett programmeringsspråk.) Ett element t i r är en tupel, representerad av en rad i en tabell Exempel på en relationsinstans för relation customer customer = { (Jones, Main, Harrison), (Smith, North, Harrison), (Curry, North,Rye), (Brown,Park, Rye) } med schemat Customer_schema = (customer_name, customer_street, customer_city) tupel, rad relation, tabell attribut, kolonner customer customer_name customer_street customer_city Jones Main Harrison Smith North Harrison Curry North Rye Brown Park Rye Schemadiadram för Customer_schema Customer_schema customer_name customer_street customer_city
Relationsmodellen 2-6 Databas En databas består av flere relationer. Informationen om en organisation bryts upp i delar, varje del lagras i en relation. Ex.: account: lagrar information om konton depositor: lagrar information om vilken kund äger vilket konto customer: lagrar information om kunder Att lagra all information som en enda relation, bank (account_number, balance,,customer_name,...) resulterar i: repetition av information behov av nullvärden Hur uppdelningen bäst sker, dvs. hur man designar relationsscheman bygger på normaliseringsteori (kap 7)
Relationsmodellen 2-7 Nycklar (key) Tupler i en relation måste kunna identifieras unikt två tupler i en relation får ej ha samma värde på alla attribut. En supernyckel är en mängd av ett eller flera attribut som tillsammans unikt identifiera tuplerna i en relation. Ex.: customer customer_id customer_name customer_street customer_city 192-83-7465 Johnsson 12 Alma St. Palo Alto 677-899011 Hayes 3 Main St. Harrison 182-73-6091 Turner 123 Putnam Ave. Stamford 321-12-3123 Jones 100 Main St. Harrison 336-66-9999 Brown 175 Park Ave. Pittsfield 019-28-3746 Smith 72 North St. Rye supernycklar: {customer_id } {customer_name, customer_id} {customer_name} om kunder ej tillåts ha samma namn i banken Def.: Låt R vara ett relationsschema och K R. K är en supernyckel för R om värden på K räcker till att identifiera en entydig tupel för varje möjlig relation r i R, dvs. om t 1 t 2 r och t 1 t 2 så t[k 1 ] t[k 2 ]. En supernyckel är ej lämplig om den innehåller onödiga attribut. En kandidatnyckel är en minimal supernyckel, dvs. en supernyckel för vilken ingen äkta delmängd är en supernyckel. Ex.: {customer_id } är en kandidatnyckel för customer ty den är en supernyckel för customer och ingen äkta delmängd av den är en supernyckel. Men {customer_name, customer_id} är ej en kandidatnyckel ty customer_id är en supernyckel för customer.
Relationsmodellen 2-8 Primärnyckel för en relation är den kandidatnyckel som främst används av databassystemet för att identifiera tupler i relationen. Önskade egenskaper: värdet ändras aldrig eller mycket sällan. Man brukar lista primärnyckel-attributen först i ett relationsschema. Ett attribut i en relation r 1 kallas en främmande (forein) nyckel i r 1 refererande r 2 om det är en primärnyckel i r 2. Relationen r 1 kallas en refererande relation och r 2 en refererad relation för den främmande nyckeln ifråga. Primär- och fämmandenyckel beroenden kan avbildas i ett schemadiagram. Schemadiagram branch account depositor customer branch_name branch_city assets account_number branch_name balance customer_name account_number customer_name customer_street customer_city loan loan_number branch_name amount borrower customer_name loan_number
Relationsmodellen 2-9 Bankexemplet Customer_schema = (customer_name, customer_street, customer_city) Branch_schema = (branch_name, branch_city, assets) Account_schema = (account_number, branch_name, balance) Loan_schema = (loan_number, branch_name, amount) Depositor_schema = (customer_name, account_number) Borrower_schema = (customer_name, loan_number) Obs! I ett verkligt system skulle kunderna identifieras med ett idnummer ej namn. branch branch_name branch_city assets Brighton Brooklyn 7100000 Downtown Brooklyn 9000000 Mianus Horseneck 400000 North Town Rye 3700000 Perryridge Horseneck 1700000 Pownal Bennington 300000 Redwood Palo Alto 2100000 Round Hill Horseneck 8000000 account account_number branch_name balance A-101 Downtown 500 A-102 Perryridge 400 A-201 Brighton 900 A-215 Mianus 700 A-217 Brighton 750 A-222 Redwood 700 A-305 Round Hill 350 customer customer_name customer_street customer_city Adams Spring Pittsfield Brooks Senator Brooklyn Curry North Rye Glenn Sand Hill Woodside Green Walnut Stamford Johnsson Alma Palo Alto Hayes Main Harrison Turner Putnam Stamford Jones Main Harrison Lindsay Park Pittsfield Smith North Rye Williams Nassau Princeton loan loan_number branch_name amount L-11 Round Hill 900 L-14 Downtown 1500 L-15 Perryridge 1500 L-16 Perryridge 1300 L-17 Downtown 1000 L-23 Redwood 2000 L-93 Mianus 500 depositor customer_name account_number Hayes A-102 Johnsson A-101 Johnsson A-201 Jones A-217 Lindsay A-222 Smith A-215 Turner A-305 borrower customer_name loan_number Adams L-16 Curry L-93 Hayes L-15 Jackson L-14 Jones L-17 Smith L-11 Smith L-23 Williams L-17
Relationsmodellen 2-10 Frågespråk Ett frågespråk är ett språk med vilket en användare begär information från en databas. Klasser av språk procedurala språk, användaren anger den sekvens av operationer som skall göras på databasen för att producera önskat resultat. icke-procedurala språk, användaren behöver bara specifiserar vilken data som skall produceras. Rena språk Relationsalgebra - proceduralt (kap 2) Tupelrelationskalkyl - icke-proceduralt (kap 5) Domänrelationskalkyl - icke-proceduralt (kap 5)