E-R-modellen, Reducering till rel.scheman 6-26 Reducering till relationsscheman En databas som överensstämmer med ett E-R-databasschema kan representeras som en mängd relationsscheman ty E-R-modellen och den relationella databasmodellen grundar sig på liknande designprinciper: För varje entitetsmängd och varje relationskapsmängd i databasen finns ett entydigt relationsschema (tabell) som tillordnas namnet av motsvarande entitets- eller relationskapsmängd. Representation av starka entitetsmängder En stark entitetsmängd E med attributen a 1, a 2,..., a n representeras med ett schema kallat E med n olika attribut svarande mot a 1, a 2,..., a n. Ex.: _number (_number, ) Attribut _number är primärnyckeln i relationsschemat eftersom det är primärnyckel i entitetsmängden. En instans av en relation för detta schema är tabellen nedan. Varje rad i tabellen svarar mot en entitet i E. _number L-11 900 L-14 1500 L-15 1500 L-16 1300 L-17 1000 L-23 2000 L-93 500
E-R-modellen, Reducering till rel.scheman 6-27 Representation av svaga entitetsmängder En svag entitetsmängd A med attributen a 1, a 2,..., a m vars identifierande starka entitetsmängd B har primärnyckeln {b 1, b 2,..., b n } representeras med ett schema kallat A med m+n olika attribut svarande mot {a 1, a 2,..., a m } {b 1, b 2,..., b n } Primärnyckeln utgörs av B:s primärnyckel och A:s diskriminator. En foreignkey-begränsning i A som specificerar att attributen {b 1, b 2,..., b n } refererar till primärnyckeln i B bör anges Ex.: _number pay_number pay_date pay_ -pay. payment payment(_number, pay_number, pay_date, pay_) Attributen _number och pay_number utgör primärnyckeln i relationsschemat och _number främmande nyckel ref.. payment _number pay_number pay_date pay_ L-11 3 10 maj 2006 400 L-14 1 1 jan 2007 75 L-15 10 23 juni 2000 100 SQL-deklaration av payment: create table payment (... primary key (_number, pay_number ) foreign key (_number) references ) )
E-R-modellen, Reducering till rel.scheman 6-28 Representation av identifierande relationskapsmängder En relationskapsmängd som länkar en svag entitetsmängd till en stark är överflödig. Den identifierande relationsskapsmängden har inga deskriptiva attribut och den svaga entitetsmängden innehåller den identifierande starka mängdens primärnyckel. Ex.: attribut: _number och pay_number - finns i payment pay_date _number pay_number pay_ -pay. payment (_number, ) payment(_number, pay_number, pay_date, pay_)
E-R-modellen, Reducering till rel.scheman 6-29 Representation av relationskapsmängder Låt R vara en relationskapsmängd, låt a 1, a 2,..., a m vara mängden av de attribut som utgör primärnycklar i de entitetsmängder som deltar i R, och låt b 1, b 2,..., b n vara R:s deskriptiva attribut om sådana existerar. Då representeras R av ett relationsschema kallat R med ett attribut per medlem i mängden {a 1, a 2,..., a m } {b 1, b 2,..., b n } Primärnyckeln för relationsschemat väljs enl. relationstypen (m-m, 1-m, m-1, 1-1). För varje entitetsmängd E i som är länkad till R och vars primärnyckel ingår i R skapas en foreignkey-begränsning i R för attributen a i till E i. Ex.: type _id _name _street _city _number borrower borrower(_id, _number, type) foreign key (_id) references foreign key (_number) references
E-R-modellen, Reducering till rel.scheman 6-30 Sammansättning av scheman En total många-till-en eller en-till-en relationskapsmängd kan kombineras med den mångvärda entitetsmängden. account-number balance branch_name branch_city assets account account_ branch branch account(account_number, balance) account_branch(account_number, branch_name) branch(branch_name, branch_city, assets) account(account_number, balance, branch_name) branch(branch_name, branch_city, assets) account-number branch_city balance branch_name branch_city assets account branch
E-R-modellen, Reducering till rel.scheman 6-31 Representation av sammansatta attribut Attributen på lägsta nivån ingår som attribut i relationsschema, ej de övriga, ty attributdomänerna är atomära i den relationella modellen. cust._street _name cust_city -id adress (_id, _name, cust_street,cust_city) Representation av flervärda attribut För ett flervärt attribut M i A skapas ett relationsschema R med attributet B som motsvarar M samt attribut S som motsvarar primärnyckeln för den entitetsmängd eller relationskapsmängd som M tillhör. tel_num -id _name adress -id telefon tel_num Enforeignkey-begränsningiRsomspecificerarattattributenSrefererarAskapas. telefon(_id, tel_num) primary key (_id, tel_num) foreign key (_id) references (_id, _name, adress)
E-R-modellen, Reducering till rel.scheman 6-32 Representation av generalisering Metod 1: Bilda ett relationsschema för den generaliserade entitetsmängden (högnivå) och ett för varje entitetsmängd som är generaliserad (lågnivå), där ett attribut för varje attribut i den generaliserade entitetsmängdens primärnyckel ingår. Skapa foreignkey-begränsningar för de generaliserade entitetsmängderna som specificerar att högnivåprimärnyckeln refererar till högnivåentitetsmängden. account(account_number, balance) saving_account(account_number, interest_rate) checking_account(account_number, overdraft_) för både saving_account och checking_account: foreign key (account_number) references account Metod 2: Bilda ett relationsschema för varje generaliserad (lågnivå) entitetsmängd där alla attribut för den generaliserade entitetsmängden ingår. Metod 2 kan användas om generaliseringen är fullständig och disjunkt. saving_account(account_number, balance, interest_rate) checking_account(account_number, balance, overdraft_) account_number balance account interest_rate ISA overdraft_ saving_account check_account
E-R-modellen, Reducering till rel.scheman 6-33 Representation av aggregering Skapa ett schema för relationskapsmängden bunden till högnivåentiteten (_officer) som har ett attribut för varje attribut i primärnyckeln för den entitetsmängd (employee) den är knuten till och varje attribut i primärnyckeln för relationskapsmängden i högnivåentiteten (borrower), samt eventuella deskriptiva attribut. Primärnyckeln skapas av alla utom de deskriptiva attributen. _officer(employ_id_sec, _id, _number) För resten av diagrammet används samma scheman som tidigare. employee(employ_id, emp_name, tel_num) (_id, _name, adress) borrower(_id, _number) (_number, branch_name, ) _id _name adress _number branch_name borrower - officer employee branch_name _id _name _number adress borrower employ_id tel_num - officer emp_name employee employ_id tel_num emp_name