Relační databázová technologie Klíč: množina (možná jednoprvková) atributů (sloupců), jež jednoznačně idetifikuje danou entitu. Poznámky: 1. Daný entitní typ (tabulka) může mít více klíčů může být více. Například (i) rodné číslo, (ii) osobní číslo zaměstnance, (iii) syntetický klíč. 2. Každá tabulka má alespoň jeden klíč. V (opravdové) relační databázi nemůže tabulka obsahovat více řádků s týmiž hodnotami v jednortlivých sloupcích.
Relační databázová technologie Cizí klíč: množina (možná jednoprvková) atributů (sloupců), jejichž hodnota určuje hodnotu klíče jiné tabulky. Poznámky: 1. Datový typ jednotlivých atributů musí být kompatibilní s datovým typem odpovídajících atrinutů klíče referencované tabulky. 2. Cizí klíč není (nemusí být) v dané tabulce klíčem. 3. Vztah mezi entitami se realizuje asociativní vazbou cizí klíč -> primární klíč. 4. Vzhledem k tomu, že tabulka může mít více klíčů, je dobré jeden z nich zvolit a systematicky ho používat k realizaci vztahů s ostatními tabulkami. Takto zvolený klíč nazýváme klíčem primárním.
http://www.sybase.com/products/modelingmetadata/powerdesigner
Převod konceptuální model -> logický model Entitní typ -> tabulka Atribut entitního typu -> sloupec tabulky Vztah: 1:1 nebo 1:N: vztah->cizí klíč na straně N atribut vztahu -> sloupec tabulky na straně N N:M: Vztah -> vazební tabulka Atribut vztahu -> sloupec vazební tabulky
Konceptuální model Logický model
VA30 <M> ma-linky <pi> <M> 1 Slabý entitní typ 1 Notace Crow's Foot
VA30 <M> ma-linky <pi> <M> 1 Slabý entitní typ 1 Notace Crow's Foot
VA30 <M> Slabý entitní typ 1 Notace Crow's Foot DECIMAL(8,0) <pk> VARCHAR(30) DECIMAL(9,0) ma-linky FK_LINKY_RELATIONS_ORGANIZA <pi> <M> 1 1 DECIMAL(9,0) <pk> DECIMAL(8,0) <pk> DECIMAL(8,0) <fk> CHAR(15) CHAR(20)
VA30 <M> Slabý entitní typ 1 Notace Crow's Foot DECIMAL(8,0) <pk> VARCHAR(30) DECIMAL(9,0) ma-linky FK_LINKY_RELATIONS_ORGANIZA Není to divné? <pi> <M> Sloupec IČO<M> tu 1 <pi> DC8,0 2x máme Tento sloupec tu bude 2x 1 DECIMAL(9,0) <pk> DECIMAL(8,0) <pk> DECIMAL(8,0) <fk> CHAR(15) CHAR(20)
VA30 <M> Slabý entitní typ 1 Notace Crow's Foot DECIMAL(8,0) <pk> VARCHAR(30) DECIMAL(9,0) ma-linky FK_LINKY_RELATIONS_ORGANIZA <pi> <M> 1 1 DECIMAL(9,0) <pk> DECIMAL(8,0) <pk> DECIMAL(8,0) <fk> CHAR(15) CHAR(20)
Slabý entitní typ 2 VA30 <M> ma-linky <pi> <M> 1
Slabý entitní typ 2 VA30 <M> <pi> <pi> DC8,0 DC8,0 <M> <M> VA30 VA30 <M> <M> ma-linky <pi> <M> 1 ma-linky <pi> <pi> <M> <M>
Řídící entitní typslabý entitní typ 2 VA30 <M> <pi> <pi> DC8,0 DC8,0 <M> <M> VA30 VA30 <M> <M> ma-linky ma-linky Slabý entitní typ <pi> <M> 1 11111111 Nemocnice Motol 224 43 22222222 Honda Motol 234 09 Identifikující vztah (vazba) <pi> <pi> <M> <M> 11111111 11111111 11111111 22222222 22222222 1111 2920 2101 1111 6690 Ústředna Kardiocentrum Novorozenecké oddělení Recepce Prodej nových vozů
Slabý entitní typ 3 VA30 <M> ma-linky DECIMAL(8,0) <pk> VARCHAR(30) DECIMAL(9,0) FK_LINKY_MA-LINKY_ORGANIZA <pi> <M> DECIMAL(8,0) <pk,fk> DECIMAL(9,0) <pk> CHAR(15) CHAR(20)
Slabý entitní typ 4 DECIMAL(8,0) <pk> VARCHAR(30) DECIMAL(9,0) FK_LINKY_MA-LINKY_ORGANIZA DECIMAL(8,0) <pk,fk> DECIMAL(9,0) <pk> CHAR(15) CHAR(20)
Reflexivní vztah 1 matka ma-matku Osoba Rodne-cislo <pi> DC10,0 <M> Jmeno Prijemni dítě dítě FK_OSOBA_RELATIONS_OSOBA Osoba Rodne-cislo Oso_Rodne-cislo Jmeno Prijemni DECIMAL(10,0) <pk> DECIMAL(10,0) <fk> CHAR(15) CHAR(20) matka
Reflexivní vztah 1 matka ma-matku Osoba Rodne-cislo <pi> DC10,0 <M> Jmeno Prijemni dítě Reflexive mandatory reference A reflexive reference exists should not have a mandatory FK_OSOBA_RELATIONS_OSOBA parent which could lead to inconsistent joins. dítě Osoba Rodne-cislo Oso_Rodne-cislo Jmeno Prijemni DECIMAL(10,0) <pk> DECIMAL(10,0) <fk> CHAR(15) CHAR(20) matka
Reflexivní vztah 2 dítě ma-matku Osoba Rodne-cislo <pi> DC10,0 <M> Jmeno Prijemni matka Nepovinná hodnota cizího klíče matka FK_OSOBA_RELATIONS_OSOBA Osoba Rodne-cislo Oso_Rodne-cislo Jmeno Prijemni DECIMAL(10,0) <pk> DECIMAL(10,0) <fk> CHAR(15) CHAR(20) dítě
Reflexivní vztah 2 dítě Nepovinná hodnota cizího klíče ma-matku Osoba Rodne-cislo <pi> DC10,0 <M> Jmeno Prijemni matka matka FK_OSOBA_RELATIONS_OSOBA Osoba Rodne-cislo Oso_Rodne-cislo Jmeno Prijemni DECIMAL(10,0) <pk> DECIMAL(10,0) <fk> CHAR(15) CHAR(20) dítě
Reflexivní vztah 2 dítě ma-matku Osoba Rodne-cislo <pi> DC10,0 <M> Jmeno Prijemni matka matka FK_OSOBA_RELATIONS_OSOBA Osoba Rodne-cislo Oso_Rodne-cislo Jmeno Prijemni DECIMAL(10,0) <pk> DECIMAL(10,0) <fk> CHAR(15) CHAR(20) dítě
Referenční integrita 1 Mějme dvě tabulky A a B takové, že tabulka B obsahuje cizí klíč odkazující to tabulky A. V databázi nesmí dojít k tomu, že pro nějaký řádek tabulky B odkazuje jeho hodnota cizího klíče na neexistující řádek tabulky A.
Referenční integrita 2 Strelna_zbran Osoba Rodne_cislo <pi> <UNDEF> <M> Jmeno <UNDEF> Prijmeni <UNDEF> drzitel Vyrobni_cislo <pi> <UNDEF> <M> Vyrobce <pi> <UNDEF> <M> T yp <UNDEF> Popis <UNDEF> Jak může dojít k porušení referenční integrity? a) Zrušíme záznam v tabulce Osoba => cizí klíč příslušného řádku tabulky Zbran bude odkazovat na neexistující řádek tabulky Osoba. b) Změníme hodnotu primárního klíče některého řádku v tabulce Osoba => cizí klíč příslušného řádku tabulky Zbran bude odkazovat na neexistující řádek tabulky Osoba.
Referenční integrita 3 Strelna_zbran Osoba Rodne_cislo <pi> <UNDEF> <M> Jmeno <UNDEF> Prijmeni <UNDEF> drzitel Vyrobni_cislo <pi> <UNDEF> <M> Vyrobce <pi> <UNDEF> <M> T yp <UNDEF> Popis <UNDEF>
Referenční integrita 4