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!
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:
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:
DROP VIEW user_spending;Spróbuj
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.
Pokaż wskazówkę
Napisz UTWÓRZ WIDOK nazwa_widoku JAKO WYBIERZ ... OD ... GDZIE ...
Rozwiązanie dostępne po 3 próbach
Wywoływanie widoku
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.
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