Autor:29.07.2024
Widoki to wirtualne tabele, które są tworzone na podstawie zapytań do istniejących tabel w bazie danych. Mają trzy główne zalety:
Tabela przechowuje dane fizycznie na dysku. Na tabeli można wykonywać wszelkie operacje typu zapis, odczyt, modyfikację oraz usuwanie danych.
Widok nie przechowuje danych, tylko samo zapytanie SQL, które umożliwia odczyt danych z tabeli. Widoki zazwyczaj używane są do odczytywania danych. Są to swego rodzaju predefiniowane zapytania, które można zapisać i potem ich używać wiele razy.
Popracujemy na przykładowej tabeli employees. Tabela wygląda tak:
Chcielibyśmy utworzyć trzy widoki, osobno dla każdego działu pracowników (Department)
W jaki sposób tworzymy widok?
CREATE VIEW [nazwa widoku] AS [zapytanie];
W jaki sposób możemy użyć takiego widoku?
SELECT * FROM [nazwa widoku];
Zajmijmy się teraz praktycznym przykładem. Tworzymy trzy widoki dla każdego z działów:
CREATE VIEW developer AS SELECT * FROM employees WHERE department = 'DEVELOPER';
CREATE VIEW finance AS SELECT * FROM employees WHERE department = 'FINANCE';
CREATE VIEW boss AS SELECT * FROM employees WHERE department = 'BOSS';
O teraz mamy do dyspozycji 3 widoki. Możemy ich używać tak jak zwykłe tabele i wykonywać na nich standardowe zapytania SELECT.
Możemy swobodnie odnieść się do widoku:
SELECT * FROM boss;
Efekt działania zapytania:
Możemy wybierać odpowiednie kolumny z widoku:
SELECT id, name, salary, department FROM finance;
Możemy filtrować dane:
SELECT id, surname, salary FROM developer WHERE salary > 5000;
Czyli z widoków korzystamy tak jak z tabel - przynajmniej jeśli chodzi o odczytywanie danych. Różnica polega na tym, że widok zawiera jedynie zapytanie a tabela zawiera fizyczne dane.
Jeżeli chcesz zmienić definicję widoku, możesz użyć polecenia CREATE OR REPLACE VIEW.
Jeżeli widok nie jest już potrzebny, można go usunąć za pomocą polecenia DROP VIEW.
Do tej pory skupiliśmy się na standardowych widokach, które nie są przechowywane fizycznie w bazie danych, lecz są generowane na podstawie zapytań do istniejących tabel.
Teraz przyjrzymy się bardziej zaawansowanej formie widoków –widokom zmaterializowanym. Te widoki, w odróżnieniu od standardowych, przechowują wyniki zapytań fizycznie na dysku, co może znacząco zwiększyć wydajność w niektórych scenariuszach. Kiedy wykonujesz zapytanie do widoku zmaterializowanego, dane są pobierane z fizycznie zapisanych wyników, a nie generowane na nowo.
Takie widoki są szczególnie przydatne w sytuacjach, gdy mamy do czynienia z bardzo czasochłonnymi zapytaniami. W takich przypadkach, wyniki mogą być przechowywane i odświeżane według ustalonego harmonogramu, co pozwala użytkownikom na szybki dostęp do danych.
Widoki zmaterializowane mogą być odświeżane np. raz dziennie w godzinach nocnych lub co godzinę, w zależności od tego, jak często zmieniają się dane źródłowe. Widoki zmaterializowane są idealnym rozwiązaniem w środowiskach hurtowni danych, gdzie operacje analityczne są priorytetem, a gdzie rzadziej aktualizuje się dane
Spójrz w jaki sposób możemy utworzyć widok zmaterializowany.
CREATE MATERIALIZED VIEW order_customer_view AS
SELECT
o.order_id,
o.order_date,
o.total_amount,
c.first_name,
c.last_name,
c.email
FROM
orders o
JOIN
customers c ON o.customer_id = c.customer_id;
Aby odświeżyć widok zmaterializowany wystarczy wykonać następujące polecenie.
REFRESH MATERIALIZED VIEW order_customer_view;
Widoku to swego rodzaju wirtualne tabele, które przechowują samo zapytanie. Dzięki widokom możemy uprościć i lepiej kontrolować dostęp do danych przechowywanych w tabelach.