230 likes | 355 Views
Úvod do databázových systémů. Cvičení 05. Ing. Pavel Bednář pavel.bednar.st1@vsb.cz http://pavelbednar.aspone.cz. Relační datový model. Relační schéma
E N D
Úvod do databázových systémů Cvičení 05 Ing. Pavel Bednář pavel.bednar.st1@vsb.cz http://pavelbednar.aspone.cz
Relační datový model • Relační schéma Relační schéma R je výraz tvaru R(A,f), kde R je jméno schématu, A={A1,A2,...,An} je konečná množina jmen atributů, f je zobrazení přiřazující každému jménu atributu Ai neprázdnou množinu, kterou nazýváme doménou atributu Di, tedy f(Ai)=Di. • Relace Relace R s relačním schématem R je konečná podmnožina kartézského součinu domén Di, příslušejících jednotlivým atributům Ai, tedy R D1 x D2 x ... x Dn. • Orelaci R říkáme, že je typu R nebo že je instancí relačního schématu R. • Stupeň relace
Relační datový model • Schéma relační databáze Je konečná množina relačních schémat R1(A1,f1), R2(A2,f2), ... , Rm(Am,fm).. • Relační databáze V daném časovém okamžiku je konečná množina relací R1, R2, ..., Rm, tzv. aktuálních relací, kde Rije typu Ri.
Relační datový model • Homogenita sloupců • Atomické atributy • Nezáleží na pořadí řádků a sloupců • Každý řádek (záznam) je jednoznačně identifikovatelný.
Relační algebra • Pro formulaci požadavků na výběr dat z relační databáze • Pracuje s celými relacemi • Operátory RA se aplikují na relace, výsledkem jsou opět relace.
Relační algebra • Operace • Sjednocení R ∪ S = { x | x R ∨ x S } • Průnik R ∩ S = { x | x R ∧ x S } • Rozdíl R - S = { x | x R ∧ x S } • Kartezský součin R × S = { rs| r R ∧ sS} rs= { r1, …,rm,s1, …, sn} • Operace sjednocení a průnik musí být mezi shodnými relacemi • Výsledek operace v RA je bez duplicit.
Relační algebra • Příklad: R ∪ S • Nelze udělat sjednocení, protože to nejsou shodné relace ∪ =
Relační algebra • Příklad: R ∪ S ∪ =
Relační algebra • Příklad: R ∩ S ∩ =
Relační algebra • Příklad: R - S - =
Relační algebra • Příklad: X × Y = ×
Relační operace • Projekce • Selekce • Spojení • Přirozené spojení
Relační algebra • Z tabulky studentů, vybereme login a příjmení. • T = Student [login,příjmení] T
Relační algebra • Z tabulky studentů, vybereme studenty, kteří jsou ve druhém a vyšším ročníku • T = Student(ročník >= 2) T
Relační algebra • Obecné spojení X [A>C] Y X Y X × Y X [ A > C] Y 3 > 2
Příklady Clen(rc,jmeno,prijmeni,email) Titul(cislo_titulu,nazev_cez, nazev_angl, delka) Pujceno(rc,cislo_titulu,datum) • Číslo titulu, který byl alespoň jednou půjčen Pujceno[cislo_titulu] • Číslo titulu, který dosud nebyl půjčen Titul[cislo_titulu] – Pujceno[cislo_titulu] • RČ člena, který si půjčil film číslo 123 (Pujceno(cislo_titulu=123))[rc] • RČ člena, který si půjčil alespoň jeden film, ale ne film 123 Pujceno[rc]-((Pujceno(cislo_titulu=123))[rc]) • RČ člena, který si nepůjčil film 123 Clen[rc]-((Pujceno(cislo_titulu=123))[rc])
Příklady Clen(rc,jmeno,prijmeni,email) Titul(cislo_titulu,nazev_cez, nazev_angl, delka) Pujceno(rc,cislo_titulu,datum) • RČ člena, který si půjčil jiný film než 12 (Pujceno(cislo_titulu<>123))[rc] • RČ člena, který si půjčil pouze film 123 Pujceno[rc]-((Pujceno(cislo_titulu<>123))[rc]) • Najděte názvy filmů, které byly alespoň jednou půjčeny (Pujceno[cislo_titulu][*]Titul)[nazev_cesky] • Najděte jména členů, kteří si dosud nepůjčili žádný film ((Clen[rc]-Pujceno[rc])[*]Clen)[jmeno, prijmeni] • Najděte názvy filmů, které si půjčili členové s příjmením Novák ((((Clen(prijmeni=‘Novák‘))[*]Pujceni)[cislo_titulu])[*]Titul)[nazev_cesky]
Příklady LÉKAŘ(licence,jménoL,specializace) PACIENT(ČP,jménoP,adresa,telefon,narození) NÁVŠTĚVA((licence,ČP,typ,datum,diagnóza,cena) • seznam všech specializací lékařů Lekar[specializace] • jmenný seznam všech ortopédů Lekar(specializace=‘ortoped‘)[jmenoL] • jmenný seznam pacientů starších 65 let Pacient(narozeni<1943)[jmenoP] • seznam licencí lékařů, které navštívila paní Marie Nová (Pacient(jmenoP=‘Marie Nova‘)[cp][*]Navsteva)[licence] • jména lékařů, kteří byli na návštěvě domů na zavolání (Navsteva(typ=‘domu na zavolani‘)[licence][*]Lekar)[jmenoL]
Příklady LÉKAŘ(licence,jménoL,specializace) PACIENT(ČP,jménoP,adresa,telefon,narození) NÁVŠTĚVA((licence,ČP,typ,datum,diagnóza,cena) • jména a adresy pacientů, kteří byli vyšetřeni dr. Lomem dne 23.5.93 ((Lekar(jmenoL=‘Lom‘)[licence][*]Navsteva)(datum=’23.5.1993‘)[cp][*]Pacient)[jmenoP,adresa] • jména a adresy pacientů, kterým byla určena diagnóza HIV+ (Navsteva(diagnoza=‘HIV+‘)[cp][*]Pacient)[jmenoP, adresa] • jména a specializace lékařů, kteří určili diagnózu vřed na dvanácterník (Navsteva(diagnoza=‘vred na Dvanacterniku‘)[licence][*]Lekar)[jmenoL, specializace] • jména a adresy pacientů, kteří byli vyšetřováni pouze dr. Čermákem (((Lekar(jmenoL=‘Cermak‘)[licence][*]Navsteva)[cp])- ((Lekar(jmenoL<>Cermak)[licence][*]Navsteva)[cp]))[*]Pacient)[jmenoP, adresa]
Příklady LÉKAŘ(licence,jménoL,specializace) PACIENT(ČP,jménoP,adresa,telefon,narození) NÁVŠTĚVA((licence,ČP,typ,datum,diagnóza,cena) • jména a adresy pacientů, kteří byli vyšetřováni dr. Čermákem. (Lekar(jmenoL=Cermak)[licence][*]Navsteva)[cp][*]Pacient)[jmenoP,adresa] • jména a adresy pacientů, kteří nebyli vyšetřováni dr. Čermákem (Pacient[cp]-(Lekar(jmenoL=Cermak)[licence][*]Navsteva)[cp]) [*]Pacient)[jmenoP, adresa] • Seznam jmen pacientů i lékařů Lekar[jmenoL] ∪ Pacient[jmenoP]
Modelovací nástroje • Oracle SQL Data Modeler • Download – nutná registrace • Výukové video • Toad data modeler • Download – omezení 25 tabulek