Pogledi
Ciljevi Poslije kompletiranja ove lekcije trebalo bi se moći: Opisati pogled Formirati novi pogled Vratiti podatke putem pogleda Izmijeniti postojeći pogled Insertovani, ažurirati i brisati podatke putem pogleda Brisati pogled Opisati inline pogled Izvršiti Top-N analizu
Objekti u bazi podataka Objekti Tabela Pregled jedne ili više tabela Sequence Index Synonym Store procedure Srore function Paketi Trigeri Opis Osnovna jedinica za smještanje podataka. (sastoji se od kolona) Logički skup podataka koji se dobija iz jedne ili više tabela Generator numeričke vrijednosti Unapređenje performansi za neke upite Daje alternativne nazive za ovjekte Procedure u okviru baze podataka Funkcije u okviru baze podataka Kolekcija procedura, funkcija i korisničkih generisanih tipova podataka (npr. struktura kao u C programskom jeziku) Okidači na DML komande
Šta je POGLED (VIEW) EMPLOYEES table EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- -------- --------- ---- --------- ------ ----- ------- EMPNO 7839 ENAME KING JOB PRESIDENT MGR HIREDATE 17-NOV-81 SAL 5000 COMM DEPTNO10 ----- 7782 ------- CLARK --------- MANAGER ----- 7839 --------- 09-JUN-81 ----- 1500 ----- 300 -------10 7934 7839 KING MILLER PRESIDENT CLERK 7782 17-NOV-81 23-JAN-82 5000 1300 10 10 7566 7698 BLAKE JONES MANAGER 7839 01-MAY-81 02-APR-81 2850 2975 3020 7788 7782 CLARK SCOTT MANAGER ANALYST 7839 7566 09-JUN-81 09-DEC-82 2450 3000 1020 7876 7566 JONES ADAMS MANAGER CLERK 7839 7788 02-APR-81 12-JAN-83 2975 1100 20 20 7369 7654 MARTIN SMITH SALESMAN CLERK 7698 7902 28-SEP-81 17-DEC-80 1250 800 1400 3020 EMP_POGLED 7902 7499 ALLEN FORD SALESMAN View ANALYST 7698 7566 20-FEB-81 03-DEC-81 1600 3000 300 30 20 7698 7844 TURNER BLAKE SALESMAN MANAGER 7698 7839 08-SEP-81 01-MAY-81 1500 2850 0 30 30 7654 7900 JAMES MARTIN CLERK SALESMAN 7698 03-DEC-81 28-SEP-81 950 1250 1400 30 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7369 SMITH CLERK 7902 17-DEC-80 800 20 7788 SCOTT ANALYST 7566 09-DEC-82 3000 20 7876 ADAMS CLERK 7788 12-JAN-83 1100 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10 EMPNO ENAME JOB ------ -------- ----------- 7839 KING PRESIDENT 7782 CLARK MANAGER 7934 MILLER CLERK
Zašto koristiti POGLEDE (VIEWS) Korištenjem pogleda ostvaruje se niz pogodnosti putem kojih je moguće izvršiti: Uspostavljanje restrikcije za pristup podacima Pojednostavljivanje kompleksnih upita Stvaranje neovisnosti pri pristupu podataka Mogućnost predstavljanja različitih pogleda nad istim podacima
Jednostavni i složeni pogledi Osobina Jednostavni pogled Složeni pogled Broj tabela Jedna Jedna ili više Sadrži funkcije Ne Da Sadrži grupne podatke Ne Da DML kroz pogled Da Najčešće NE Komanda za kreiranje pogleda: CREATE VIEW <naziv_pogleda> CREATE [OR REPLACE] [FORCE NOFORCE] VIEW view [(alias[, alias]...)] AS subquery [WITH CHECK OPTION [CONSTRAINT constraint]] [WITH READ ONLY]; Podupit može sadržavati kompleksnu SELECT sintaksu Podupit ne može sadržavati ORDER BY klauzulu
Kreiranje pogleda Kreirati pogled koji sadrži sve zaposlene iz odjela 90 SQL> CREATE VIEW emp_pogled 2 AS SELECT employees_id, last_name, job_id 3 FROM employees 4 WHERE deptment_id = 90; View created. Za opisivanje strukture pogleda koristi se komanda DESC[RIBE] SQL> DESCRIBE emp_pogled
Kreiranje pogleda Kreiranje pogleda uz korištenje alijasa za kolone u podupitu pogleda SQL> CREATE VIEW emp_30 2 AS SELECT employee_id EMPLOYEE_NUMBER, 3 last_name NAME, salary SALARY 4 FROM employees 5 WHERE department_id = 30; View created. Kolone pogleda će imate iste nazive kao i definisani alijasi u podupitu pogleda
Vraćanje podataka iz pogleda SQL> SELECT * 2 FROM emp_30; EMPLOYEE_NUMBER NAME SALARY --------------- ---------- --------- 102 BLAKE 2850 103 MARTIN 1250 198 ALLEN 1600 175 TURNER 1500 125 JAMES 3500 156 WARD 1250 6 rows selected.
Izvršavanje pogleda ORACLE DB SQL komanda SELECT * FROM emp_30; 102 KING PRESIDENT 103 CLARK MANAGER 104 MILLER CLERK USER_VIEWS EMP_30 SELECT employee_id, last_name, job_id FROM employees WHERE department_id = 30; EMP
Modifikovanje pogleda Modifikacija pogleda vrši se putem CREATE OR REPLACE VIEW klauzule Moguće je dodavanje i alijasa za kolone pogleda (VIEW) SQL> CREATE OR REPLACE VIEW emp_30 2 (employee_number, employee_name, job) 3 AS SELECT employee_id, last_name, job_id 4 FROM employees 5 WHERE department_id = 30; View created. Alijasi za kolone pogleda su uređeni u ustom porektu kao i kolone u podupitu pogleda
Kreiranje složenih pogleda Složeni pogledi obično sadrže grupne funkcije i podatke iz dvije ili više tabela SQL> CREATE VIEW dept_salary 2 (name, minsal, maxsal, avgsal) 3 AS SELECT d.department_name, MIN(e.salary), 4 AVG(e.salary), MAX(e.salary) 5 FROM employees e, deptartments d 6 WHERE e.department_id = d.department_id 7 GROUP BY d.department_name; View created.
Pravila za izvršavanje DML operacija u pogledu (VIEW) DML operacije mogu se izvršavati samo sa jednostavnim pogledima Nije moguće brisanje slogova ako pogled sadrži sljedeće: Grupne funkcije GROUP BY klauzulu DISTINCT ključnu riječ Pseudo -kolonu kao što je ROWNUM i slično
Pravila za izvršavanje DML operacija u pogledu (VIEW) Ne mogu se ažurirati podaci u pogledu ako pogled sadrži: Neko od pravila spomenutih na prethodnom slide-u Kolone definisane putem izraza ROWNUM pseudo-kolonu Ne mogu se dodavati novi redovi ako: Pogled sadrži neki od uslova sadržan gore ili neki od uslova sadržan na prethodnom slide-u Postoje NOT NULL kolone u baznoj tabeli koje nisu uključene u okviru pogleda (VIEW)
Korištenje WITH CHECK OPTION klauzule Može se osigurati da DML u pogledu ostaje u domeni pogleda pomoću CHECK OPTION klauzule SQL> CREATE OR REPLACE VIEW emp20 2 AS SELECT * 3 FROM employees 4 WHERE department_id = 20 5 WITH CHECK OPTION CONSTRAINT emp20_ck; View created. Svaki pokušaj da se promijeni broj odjela za bilo koji red u pogledu neće uspijeti jer se krši ograničenje definisano putem CHECK OPTION
Osporavnje DML operacije u pogledu (VIEW) Može se osigurati da se prilikom definisanja pogleda (view) ne mogu izvršavati DML operacije putem VIEW READ ONLY opcije SQL> CREATE OR REPLACE VIEW emp_10 2 (employee_number, employee_name, job) 3 AS SELECT employee_id, last_name, job_id 4 FROM employees 5 WHERE department_id = 10 6 WITH READ ONLY; View created. Bilo koji pokušaj primjene DML operacija nad pogledom emp_10 rezultirat će greškom
Brisanje pogleda Brisanje pogleda podrazumijeva samo brisanje pogleda bez brisanja podataka u bazi DROP VIEW view; SQL> DROP VIEW emp_10; View dropped.
INLINE pogledi INLINE pogled je podupit sa alijasom (korelacijski naziv) koji se može koristiti unutar SQL iskaza INLINE - naziv podupita koji se nalazi u FROM klauzuli osnovnog upita INLINE pogled nije objekat šeme
Top N - analiza Top N analiza potrazumijeva pretraživanje prvih N elemata nad odgovarajućom kolonom u svrhu dobijanja najmanjih ili najvećih vrijednosti To su pitanja koja za se najčešće traže odgovori tipa: Kojih deset proizvoda se najbolje prodaje? Kojih dvadeset proizvoda imaju najmanju prodaju? i slično... Najveće i najmanje vrijednosti koje je potrebno dobiti putem upita smatraju se Top-N upitima
Top N - analiza Opći oblik strukture na visokom nivou Top N analize izgleda: SQL> SELECT [column_list], ROWNUM 2 FROM (SELECT [column_list] FROM table 3 ORDER BY Top-N_column) 4 WHERE ROWNUM <= N Npr. pronaći 3 zaposlenika koji razađuju najveću platu u firmi: SQL> SELECT ROWNUM as RANK, ename, sal 2 FROM ( SELECT last_name ename,salary sal 3 FROM employees 4 ORDER BY salary DESC) 4 WHERE ROWNUM <= 3; RANK --------- 1 2 3 ENAME ---------- KING SCOTT FORD SAL --------- 5000 3000 3000
Kratak pregled Pomoću pogleda moguće je uraditi neke do sljedećih aktivnosti: Izvršiti restirkciju prilikom pristupanja bazi podataka Formirati jednostavne upite Predvidjeti nezavinost pri pristupu podacima Formirati različite poglede nad istom skupinom podataka Brisati poglede bez opasnosti da će se izbrisati i podaci u bazi podataka
Pogledi