Przejdź do głównej treści
eLearner.app
Moduł 9 · Lekcja 4 z 436/57 w kursie~12 min
Lekcje modułu (4/4)

Widoki i abstrakcja danych

Podczas naszych lekcji zauważyłeś, że zapytania (szczególnie złożone JOIN lub agregacje, takie jak GROUP BY) zaczynają być długie i pełne reguł i obliczeń.

Co by było, gdyby istniał sposób na mentalne zapisanie wypełnionego zapytania i ukrycie go przed wzrokiem, udając odtąd, że jest to, ogólnie rzecz biorąc, normalna „tabela” bazy danych?

Witamy w świecie Widoków.

UTWÓRZ WIDOK

Widok jest zasadniczo utrwalonym, nazwanym zapytaniem SQL, ale zachowuje się jak „wirtualna” tabela!

SQL
CREATE VIEW user_spending AS
SELECT
  c.id,
  c.first_name,
  SUM(o.amount) as total_spent
FROM customers c
JOIN orders o ON c.id = o.customer_id
GROUP BY c.id;

Zrobione! Teraz zamiast ciągle powtarzać JOIN i GROUP BY, wystarczy napisać idealnie normalne zapytania:

SQL
SELECT * FROM user_spending WHERE total_spent > 100;
-- Postgres dietro le quinte richiamerà automaticamente la grande formula.

Wyświetlenia i „dane w czasie rzeczywistym”

Bardzo powszechnym mitem jest przekonanie, że Wyświetlenia pobierają dane, obliczają kwoty, takie jak ceny lub rankingi, i tworzą smutną, utrwaloną migawkę, na przykład fotografię. Źle (prawie zawsze)! Domyślnie widoki są wirtualne: za każdym razem, gdy umieścisz nazwę widoku w SELECT, Postgres za kulisami łączy twoje żądanie, uruchamiając obliczenia w czasie rzeczywistym na podstawie stanu bazy danych w dokładnie tej milisekundie. Dzięki temu nigdy nie odczytasz nieaktualnych danych.

Do czego służą?

  • Prostota: widoki chronią aplikacje zewnętrzne przed zmianami. Jeśli zespół frontendowy wie, że musi odczytać dane z widoku top_selling, nie musi się martwić, jeśli jutro zmodyfikujemy bazę danych, dodając trzy relacje pośrednie, aby wyciągnąć bestsellery!
  • Bezpieczeństwo i segregacja: w dużych bazach danych widok może wstępnie wybrać i ukryć część danych użytkownika przed zewnętrznymi programistami, przyznając im dostęp (na przykład) tylko do podwidok analityki oczyszczonej z prawdziwych nazwisk.

Porzucanie widoku

Podobnie jak w przypadku tabel, gdy nie są już potrzebne, wykonaj polecenie DROP:

SQL
DROP VIEW user_spending;

Spróbuj

Ćwiczenie#sql.m9.l4.e1
Próby: 0Ładowanie...

Utwórz widok (WIDOK) o nazwie „Produkty o wysokiej_wartości”. Musi zachowywać się jak kontener, który wybiera wszystkie 3 istotne pola (`id`, `name`, `price`) z tabeli „produkty”, ALE tylko i zawsze dla tych produktów, których „cena” jest większa niż 50,00.

Ładowanie edytora...
Pokaż wskazówkę

Napisz UTWÓRZ WIDOK nazwa_widoku JAKO WYBIERZ ... OD ... GDZIE ...

Rozwiązanie dostępne po 3 próbach

Wywoływanie widoku

Ćwiczenie#sql.m9.l4.e2
Próby: 0Ładowanie...

Ponieważ każde ćwiczenie na platformie jest uruchamiane w odizolowanym (i czystym) środowisku, na tym etapie poprzedni widok już nie istnieje. Utwórz ponownie widok „Produkty o wysokiej_wartości” (nadal z produktami o cenie > 50), a następnie w następnym wierszu wykonaj polecenie SELECT całej jego zawartości uporządkowanej według ceny malejącej (DESC), aby sprawdzić, czy działa.

Ładowanie edytora...
Pokaż wskazówkę

Nie zapomnij o ; pomiędzy instrukcjami SQL (umieść go na końcu pierwszej linii)! Dzięki temu Postgres może wykonać 2 zadania po kolei.

Rozwiązanie dostępne po 3 próbach