Zarządzanie widokami

Projektowanie baz danych

Lis Sulmont

Curriculum Manager

Tworzenie bardziej złożonych widoków

  • Agregacja: SUM(), AVG(), COUNT(), MIN(), MAX(), GROUP BY itp.
  • Złączenia: INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN
  • Warunki: WHERE, HAVING, UNIQUE, NOT NULL, AND, OR,>,< itp.
Projektowanie baz danych

Przyznawanie i odbieranie dostępu do widoku

GRANT privilege(s) lub REVOKE privilege(s)

ON object

TO role lub FROM role

  • Uprawnienia: SELECT, INSERT, UPDATE, DELETE itp.
  • Obiekty: tabela, widok, schemat itp.
  • Role: użytkownik bazy danych lub grupa użytkowników
Projektowanie baz danych

Przykład przyznawania i odbierania uprawnień

$$

GRANT UPDATE ON ratings TO PUBLIC;  

$$

REVOKE INSERT ON films FROM db_user;
Projektowanie baz danych

Aktualizowanie widoku

UPDATE films SET kind = 'Dramatic' WHERE kind = 'Drama';

Nie wszystkie widoki umożliwiają aktualizację danych

  • Widok oparty jest na jednej tabeli
  • Nie używa funkcji okna ani funkcji agregującej
1 https://www.postgresql.org/docs/9.5/sql-update.html
Projektowanie baz danych

Wstawianie danych do widoku

INSERT INTO films (code, title, did, date_prod, kind)
    VALUES ('T_601', 'Yojimbo', 106, '1961-06-16', 'Drama');

Nie wszystkie widoki umożliwiają wstawianie danych

1 https://www.postgresql.org/docs/9.5/sql-insert.html
Projektowanie baz danych

Wstawianie danych do widoku

INSERT INTO films (code, title, did, date_prod, kind)
    VALUES ('T_601', 'Yojimbo', 106, '1961-06-16', 'Drama');

Nie wszystkie widoki umożliwiają wstawianie danych

Wniosek: należy unikać modyfikowania danych przez widoki

1 https://www.postgresql.org/docs/9.5/sql-insert.html
Projektowanie baz danych

Usuwanie widoku

DROP VIEW view_name [ CASCADE | RESTRICT ];
  • RESTRICT (domyślnie): zwraca błąd, jeśli istnieją obiekty zależne od widoku
  • CASCADE: usuwa widok oraz wszystkie zależne od niego obiekty
Projektowanie baz danych

Redefiniowanie widoku

CREATE OR REPLACE VIEW view_name AS new_query
  • Jeśli widok o nazwie view_name istnieje, zostanie zastąpiony
  • new_query musi zwracać te same nazwy kolumn, kolejność i typy danych co poprzednie zapytanie
  • Dane wyjściowe kolumn mogą być inne
  • Nowe kolumny można dodawać na końcu

Jeśli te warunki nie mogą być spełnione, należy usunąć istniejący widok i utworzyć nowy

1 https://www.postgresql.org/docs/9.2/sql-createview.html
Projektowanie baz danych

Modyfikowanie widoku

ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name SET DEFAULT expression
ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name DROP DEFAULT
ALTER VIEW [ IF EXISTS ] name OWNER TO new_owner
ALTER VIEW [ IF EXISTS ] name RENAME TO new_name
ALTER VIEW [ IF EXISTS ] name SET SCHEMA new_schema
ALTER VIEW [ IF EXISTS ] name SET ( view_option_name [= view_option_value] [, ... ] )
ALTER VIEW [ IF EXISTS ] name RESET ( view_option_name [, ... ] )
1 https://www.postgresql.org/docs/9.2/sql-alterview.html
Projektowanie baz danych

Czas na ćwiczenia!

Projektowanie baz danych

Preparing Video For Download...