Перейти до основного вмісту
Модуль 9 · Урок 4 із 436/57 у курсі~12 min
Модульні уроки (4/4)

Перегляди та абстракція даних

Під час наших уроків ви помічали, що запити (особливо складні JOIN або агрегації, такі як GROUP BY) стають довгими та повними правил і обчислень.

Що, якби існував спосіб подумки зберегти виконаний запит і приховати його від поля зору, вдаючи, що з цього моменту він є звичайною «таблицею» БД?

Ласкаво просимо до світу Views.

СТВОРИТИ ПЕРЕГЛЯД

Представлення — це, по суті, постійний іменований SQL-запит, але він поводиться так само, як «віртуальна» таблиця!

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;

Готово! Тепер замість того, щоб завжди повторювати ці JOIN та GROUP BY, вам просто потрібно написати абсолютно нормальні запити:

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

Перегляди та «дані в реальному часі»

Дуже поширеним міфом є ​​думка, що Views беруть дані, обчислюють суми, такі як ціни чи рейтинги, і створюють якийсь сумний постійний знімок, як-от фотографію. Неправильно (майже завжди)! За замовчуванням Views віртуальні: кожного разу, коли ви вводите ім’я View у свій SELECT, Postgres за лаштунками об’єднує ваш запит, запускаючи обчислення в реальному часі на основі стану БД у цю точну мілісекунду. Тож ви ніколи не читатимете застарілі дані.

Для чого вони?

  • Простота: перегляди захищають зовнішні програми від змін. Якщо команда інтерфейсу знає, що їй потрібно зчитувати дані з представлення top_selling, їм не доведеться хвилюватися, якщо завтра ми змінимо базу даних, додавши три проміжні зв’язки, щоб витягнути найбільш продаваних товарів!
  • Безпека та відокремлення: у величезних базах даних представлення може попередньо вибирати та приховувати частину даних користувача від зовнішніх розробників, надаючи їм доступ (наприклад) лише до підподання аналітики, очищеного від справжніх імен.

Видалення перегляду

Подібно до таблиць, якщо більше не потрібні, ви виконуєте команду DROP:

SQL
DROP VIEW user_spending;

Спробуйте

вправи#sql.m9.l4.e1
Спроби: 0Завантаження…

Створіть представлення даних (ПЕРЕГЛЯД) під назвою "високоцінні_продукти". Він має вести себе як контейнер, який вибирає всі 3 основні поля (`id`, `name`, `price`) з таблиці 'products', АЛЕ тільки і завжди для тих продуктів, у яких 'price' перевищує 50,00.

Завантаження редактора…
Показати підказку

Напишіть CREATE VIEW view_name AS SELECT ... FROM ... WHERE ...

Рішення доступне після 3 спроб

Виклик перегляду

вправи#sql.m9.l4.e2
Спроби: 0Завантаження…

Оскільки кожна вправа на платформі виконується в ізольованому (і чистому) середовищі, попередній вигляд більше не існує на цьому етапі. Повторно створіть представлення 'high_value_products' (все ще з продуктами, ціна яких перевищує 50), а потім у наступному рядку запустіть SELECT для всього його вмісту, упорядкованого за убуванням ціни (DESC), щоб переконатися, що це працює.

Завантаження редактора…
Показати підказку

Не забувайте про ; між операторами SQL (ставте його в кінці першого рядка)! Це дозволяє Postgres виконувати 2 завдання послідовно.

Рішення доступне після 3 спроб