Databázové systémy Cvičení 2
Matematické a databázové relace Matematická relace podmnožina kartézského součinu A = {X, Y}, B = {1,2,3} kartézský součin: A B A B = {(X,1),(X,2),(X,3),(Y,1),(Y,2),(Y,3)} relace R: R A B R = {(X,1),(Y,1)}
kartézský součin: A = {1, 2, 3} A A={(1,1),(1,2),(1,3),(2,1),(2,2),(2,3),(3,1),(3,2),(3,3) } binární relace menší < (poněkud neobvyklé označení množiny, ale nám bližší): < = {(1,2),(1,3),(2,3)} píšeme: (1,2) <, resp. 1 < 2
binární relace větší nebo rovno neoznačíme ji tentokrát, ale jako množinu V, relace jsou přece množiny... V = {(1,1),(2,1),(2,2),(3,1),(3,2),(3,3)} píšeme: (2,1) V, resp. 2 V 1
Některé vlastnosti binární relací nechť relace reflexivní relace R A A x A platí : xrx prvek je v relaci sám se sebou rovnost je reflexivní relace relace menší není reflexivní dvojice (1,1) nepatří do relace relace menší nebo rovno je reflexivní
symetrická relace x, y A platí : rovnost je symetrická relace jestliže relace menší není symetrická dvojice (1,2) patří do relace, ale dvojice (2,1) do ní nepatří relace sourozenectví je symetrická relace relace kamarádství je symetrická relace silně antisymetrická relace slabě antisymetrická relace xry, pak yrx x, y A platí : jestliže xry,pak ( yrx) x, y A platí : jestliže xry yrx, pak x = y
tranzitivní relace x, y, z A platí : jestliže xry yrz, pak relace menší je tranzitivní relace menší nebo rovno (tzv. uspořádání) je tranzitivní relace sourozenectví je tranzitivní relace kamarádství není tranzitivní xrz
Databázová relace Relace R nad množinou atributů A = {A 1 :D 1,,A n :D n } je podmnožina kartézského součinu D 1 D 2 D n A i jsou jména atributů D i jsou domény n je arita relace R(A 1 :D 1,,A n :D n ) je schéma relace prvky relace jsou n-tice (a 1,a 2,,a n ) a i je hodnota atributu A i z domény D i
Příklad: atributy: A 1 : FILM, A 2 : REŽISÉR domény D 1 =D FILMY ={Na samotě u lesa, Amadeus} množina všech filmů na světě D 2 =D REŽISÉŘI ={Menzel, Forman} množina všech režisérů na světě kartézský součin D 1 x D 2 = D FILMY x D REŽISÉŘI = = {(Na samotě u lesa, Menzel), (Na samotě u lesa, Forman), (Amadeus, Menzel), (Amadeus, Forman)}
Příklad: vyberu relaci F smysluplnou podmnožinu kartézského součinu dle pravdy: F = {(Na samotě u lesa, Menzel), (Amadeus, Forman) } relace je arity n = 2 (prvky množiny jsou dvojice) prvky relace jsou dvě dvojice první dvojice (a 1,a 2 ) = (Na samotě u lesa, Menzel) druhá dvojice (a 1,a 2 ) = (Amadeus, Forman a i je hodnota atributu A i z domény D i : Na samotě u lesa je hodnota atributu A 1 : FILM z domény D 1 =D FILMY F (FILM:D FILMY, REŽISÉR:D REŽISÉŘI ) je schéma relace
Tabulková terminologie relace = tabulka schéma relace = záhlaví tabulky arita relace = počet sloupců jméno atributu = jméno sloupce n tice = řádek tabulky
E-R model jiné notace většina současných modelovacích nástrojů case používá jinou grafickou notaci než původní Chenovu nástroj SQL Developer Data Modeler: entity obdélník atributy seznam uvnitř obdélníka primární klíč označen znakem # povinná hodnota (NOT NULL) označena znakem * nepovinná hodnota označena kolečkem
E-R model jiné notace vztahy čára kardinalita a povinnost členství ve vztahu se vyjadřuje typem čáry kardinalita 1:N, resp. M:N : rozvětvení čáry plná: povinný výskyt ve vztahu přerušovaná: nepovinný výskyt ve vztahu
Vztah M:N v modeláři Oracle atribut vztahu rozvětvení vícenásobný výskyt přerušovaná čára nepovinný výskyt ve vztahu vztah: SI_REZERVOVAL (ČTENÁŘ - 0..*:0..* - KNIHA)
Poznámka - vztahy M:N některé nástroje nemají vztahy M:N řešení: dekompozice vztahu M:N mezi entitami E1 a E2 na dva vztahy 1:N vzpomeňme: jak se do relačního modelu transformuje vztah M:N vztah M:N převedu na samostatnou relaci s cizími klíči již do E-R modelu zavedu entitní typ E3 odpovídající relaci M:N a zavedu vztahy 1:N mezi E1-E3, E2-E3
Poznámka - vztahy M:N ČTENÁŘ M SI_REZERVOVAL N KNIHA DATUM_REZ ČTENÁŘ 1 N N 1 REZERVACE CISLO_REZ KNIHA DATUM_REZ
Slabý entitní typ některé entity nemohou být jednoznačně identifikovány svým klíčem, potřebují k identifikaci klíč jiné entity jsou to tzv. slabé entitní typy a jsou identifikačně závislé na jiném entitním typu značí se obdélníkem s dvojitou čarou KOPIE (1,1) JE_OD (0,n) FILM ČÍSLO_KOPIE JMÉNO
Příklad: Slabý entitní typ v kině máme tři kopie filmu Amadeus s čísly kopie 1,2,3 a dvě kopie filmu Piano s čísly 1,2 k jednoznačné identifikaci kopie tedy nestačí její číslo, je nutné připojit identifikaci filmu, od kterého je příslušná kopie
Reprezentace slabého entitního typu v relačním modelu KOPIE (1,1) JE_OD (0,n) FILM ČÍSLO_KOPIE JMÉNO FILM(JMÉNO) KOPIE(ČÍSLO_KOPIE,JMÉNO)
Reprezentace více-árního vztahu IDZ ZÁKAZNÍK DATUM ČERPÁ SLUŽBA PROVOZOVNA IDS ČP
Reprezentace více-árního vztahu ZÁKAZNÍK(IDZ) PROVOZOVNA(ČP) SLUŽBA(IDS) ČERPÁ(IDZ,ČP,IDS,DATUM)
Reprezentace více-árního vztahu IDZ, ČP, IDS jsou cizí klíče klíčem relace ČERPÁ je složený klíč -čtveřice atributů (IDZ, ČP, IDS, DATUM) čtveřice musí být v tabulce (relaci) unikátní pokud by klíčem relace ČERPÁ byla trojice (IDZ, ČP, IDS), mohl by zákazník čerpat službu v provozovně pouze jeden den trojice musí být unikátní, v tabulce nesmí být dva záznamy se stejnou trojicí (IDZ,ČP,IDS) a různým datem je-li klíčem čtveřice, nelze čerpat jednu službu v určité provozovně jedním zákazníkem vícekrát denně někdy to může být pravidlem (integritní omezení)
Jiné řešení místo vztahu ČERPÁ zavedeme entitní typ ČERPÁNÍ s primárním klíčem např. POŘAD_ČÍSLO a binárními vztahy pak lze čerpat jednu službu v určité provozovně jedním zákazníkem vícekrát denně
IDZ Jiné řešení ZÁKAZNÍK (0,n) ČERPÁ DATUM PROVOZOVNA (1,1) ČERPÁNÍ (1,1) (1,1) (0,n) (0,n) POŘAD_ČÍSLO SLUŽBA IDS ČP
Reprezentace více-árního vztahu JMÉNO DODÁVÁ NÁZEV OBCHODNÍK ZBOŽÍ IDO KAT_Č DODÁVÁ(IDO_KDO,IDO_KOMU,KAT_Č)
Reprezentace více-árního vztahu IDO_KDO, IDO_KOMU, KAT_Č jsou cizí klíče klíčem relace DODÁVÁ je složený klíč - trojice atributů (IDO_KDO, IDO_KOMU, KAT_Č) trojice musí být v tabulce (relaci) unikátní
OBCHODNÍK IDO JMÉNO 1 Potkan & syn 2 Návnada, nástraha, past ZBOŽÍ KAT_Č Název 1 Pastička 2 Jed na potkany DODÁVÁ IDO_KDO IDO_KOMU KAT_Č 1 2 1 všechny atributy relace DODÁVÁ jsou cizí klíče
Reprezentace binárního vztahu mezi entitami stejného typu NÁZEV JE_SOUČÁSTÍ N DÍL ID_D 1 SE_SKLÁDÁ vztah 1:N do relace DÍL přidám cizí klíč: DÍL(ID_D,NÁZEV,ID_PATŘÍ)
DÍL ID_D NÁZEV ID_PATŘÍ 1 Čerpadlo NULL 2 Hřídel 1 3 Lopatkové kolo 1 4 Ložisko 6202 1 hřídel s ID=2 je součástí Čerpadla (ID=1) lopatkové kolo s ID=3 je součástí Čerpadla (ID=1)...