Poslední úpravy - Vyhledat:

SQL

O modelování

Power Designer

Oracle Data Modeler

Krátká videa DM

Zdroje...

edit SideBar

SQL /

CREATE VIEW

< ALTER TABLE | SQL postupně | DROP >

Pohled neboli VIEW je virtuální tabulka definovaná jako výsledek vyhodnocení dotazu. S pohledy je v mnoha ohledech možno pracovat jako se skutečnými tabulkami: je možno nad nimi formulovat dotazy, za určitých okolností je možno manipulovat s "jejich" daty. Syntaxe:

 
      create view <jméno_pohledu> as <poddotaz> [with check option];

Klauzule with check option rozhoduje o tom, zda se bude kontrolovat vstup dat do virtuální tabulky: pokud je tato klauzule součástí definice pohledu, nelze do něj vložit data tak, že by vzniklý záznam "vyskočil" z pohledu. Přesněji, že by pak vzniklý záznam nepatřil do výsledku vyhodnocení definičního dotazu pohledu.

Pohledy dělíme na aktualizovatelné a ne, podle toho, zda je možno s daty manipulovat jejich prostřednictvím.

Hlavní využití pohledů je k jemnému řízení přístupových práv k datům. Dále je eventuálně můžeme využít následně po změnách provedených v návrhu databáze k tomu, aby alespoň některé aplikace nemusely být přizpůsobovány: pod jmény starých tabulek se mohou nacházet nově definované virtuální tabulky. Pohledy můžeme také definovat k tomu, aby vývoj aplikací byl intelektuálně snazší – definujeme lépe pochopitelné objekty.


Příklad: Definujme pohled pro osoby, které mají SKYPE. Tímto pohledem umožněme přístup jen k ID, jménu, příjmení, skype loginu a poznámce. Skype login ať je dostupný pod jménem "LOGIN". Zabraňme vymazání skype loginu skrz tento pohled.

        create view SKYPE_OSOBY as
        select ID, JMEN, PRIJM, SKYPE as LOGIN, POZN from OSOBA
        where SKYPE is not null
        with check option;
Nyní můžete vyzkoušet dotaz:
        select JMEN, PRIJM, LOGIN
        from SKYPE_OSOBY;

Příklad: Vložte novou SKYPE_OSOBU.

        insert into SKYPE_OSOBA (ID,JMEN, PRIJM, LOGIN)
        values (<nové_ID>,'<nové_jméno>','<nové_příjmení>','<nový_skype>');
Vyzkoušejte dvě varianty, zadejte neprázdný LOGIN, a pak se pokuste vložit novou osobu s LOGINEM NULL. V obou případech se pak přesvědčte o výsledku příkazem SELECT, nad SYKPE_OSOBY i nad tabulkou OSOBY.

Příklad: Pokuste se smazat LOGIN nějaké SKYPE_OSOBY.

         update SKYPE_OSOBY
         set SKYPE=NULL where ID=<nějaké_ID>;
Přesvědčte se o výsledku příkazem SELECT.

Pohled z předchozích příkladů byl aktualizovatelný. Přesné rozlišení, které pohledy jsou aktualizovatelné, a které nikoli, můžete nalézt v referenční příručce jazyka, smysl je ten, aby při pokusu vložit data skrz pohled bylo jasné, do kterých tabulek, do kterých řádků, a do kterých sloupců se mají data zapsat.

Například pohled definovaný na základě dotazu vypočítávajícího souhrny není aktualizovatelný.

Příklad: Definujte pohled poskytující přehled o tom, kolik je osob ve kterém městě.

         create view POCTY_VE_MESTECH as
         select MEST, count(*) as POCET_OSOB
         from OSOBA
         group by MEST;
Vložit nový záznam nebo upravit stávající v tomto pohledu nejde. Takový pohled by se mohl využít pro někoho, kdo nesmí vidět osobní data osob, ale má mít přístup ke statistikám.

Pohledy definované na základě dotazů propojujících více tabulek jsou aktualizovatelné jen výjimečně; pokud taková potřeba nastane, dá se eventuálně využít "instead of" trigger (v systému Oracle).

< ALTER TABLE | SQL postupně | DROP >

Upravit - Historie - Tisk - Poslední úpravy - Vyhledat
Poslední úprava stránky: 20.10.2009, 19:44