Databázové systémy II Přednáška č. 8 – Pohledy (Views)
Pohledy Základní relace je pojmenovaná relace, která odpovídá typu entit reálného světa v konceptuálním modelu a jejíž n-tice jsou fyzicky uloženy v databázi. Pohled je dynamický výsledek jedné nebo více relačních operací aplikovaných na základní relace - změny v základních tabulkách se promítnou do pohledů. Pohled je virtuální relace, která fyzicky v databázi neexistuje, ale vytváří se na vyžádání.
Význam pohledů Poskytují silný a flexibilní nástroj bezpečnostního mechanismu, protože umožňují skrýt části databáze před některými uživateli. Umožňují uživatelům přistupovat k datům diferencovaně - tatáž data se mohou jevit různě různým uživatelům v témž čase. Umožňují zjednodušit složitější operace nad základními tabulkami.
Modifikace pohledů Všechny úpravy základní tabulky by se měly okamžitě promítnout do všech pohledů, které se odkazují do dané základní tabulky. Modifikuje-li se pohled, příslušná základní tabulka by měla reflektovat změnu
Modifikace pohledů Typ modifikací, které lze realizovat prostřednictvím pohledů je omezen: – Modifikace je povolena když dotaz obsahuje jednu základní tabulku a obsahuje primární a kandidátní klíč základní relace. – Modifikace není povolena, když dotaz obsahuje více základních relací. – Modifikace není povolena, obsahuje-li dotaz agregační nebo skupinové operace.
CREATE VIEW CREATE VIEW jméno_pohledu [(jméno_sloupce [,...]) ] AS subselect [WITH [CASCADED | LOCAL] CHECK OPTION] Může přiřadit jméno každému sloupci pro každý sloupec v pohledu. Je-li seznam sloupců specifikován, musí mít stejný počet položek jako je počet sloupců produkovaný v rámci poddotazu. Chybí-li, každý sloupec má jméno příslušného sloupce z poddotazu. Seznam musí být specifikován, může-li vzniknout nejasnost týkající se jména sloupce. Poddotaz se nazývá definující dotaz. WITH CHECK OPTION zajišťuje, že když řádek nesplňuje WHERE klauzuli definujícího dotazu, tak se nepřidá do příslušné základní tabulky.
DROP VIEW DROP VIEW jméno_pohledu [RESTRICT | CASCADE] Odstraní definici pohledu z databáze. Je-li dáno CASCADE, všechny příslušné závislé objekty jsou smazány např. všechny pohledy, definované nad daným pohledem. Je-li dáno RESTRICT (default), jsou-li další objekty závislé na smazaném pohledu, příkaz se nevykoná
SQL-92 do určité míry omezuje vytváření a použití pohledů. Je-li sloupec v pohledu založen na agregátní funkci, tak: – Sloupec může být použit pouze v SELECTu a ORDER BY klauzuli dotazu, který přistupuje k pohledu. Sloupec se nemůže použít v rámci WHERE, ani nemůže být argumentem v agregátní funkci dotazu nad daným pohledem. – Skupinový pohled nesmí být propojený se základní tabulkou.
Modifikace v rámci pohledů Všechny modifikace základní tabulky se projeví ve všech pohledech definovaných nad danou tabulkou. Podobně očekáváme, že každá modifikace dat v rámci pohledu se promítne do základní tabulky.
Pohledy Vytvoř pohled tak, aby manager pobočky P3 mohl vidět detaily pracovníků pouze pobočky ve které sám pracuje: CREATE VIEW zam3 AS SELECT * FROM zamestnanec WHERE c_pob = ‘P3'