Что такое представления (VIEW) в SQL и каковы их плюсы и минусы?

«Что такое представления (VIEW) в SQL и каковы их плюсы и минусы?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Представление (VIEW) — это виртуальная таблица, результат сохраненного SQL-запроса. Данные физически не хранятся в VIEW; она каждый раз вычисляется при обращении.

Основные цели использования:

  1. Безопасность: Скрыть сложность схемы или ограничить доступ пользователей только к определенным столбцам/строкам.
  2. Абстракция: Упростить сложные запросы с джойнами и агрегациями.
  3. Согласованность: Обеспечить единую бизнес-логику для доступа к данным.

Пример создания и использования:

-- Создание представления
CREATE VIEW high_earners AS
SELECT e.id, e.name, d.name AS department_name
FROM employees e
JOIN departments d ON e.department_id = d.id
WHERE e.salary > 100000;

-- Запрос к представлению как к обычной таблице
SELECT * FROM high_earners WHERE department_name = 'Engineering';

Преимущества:

  • Упрощает сложные запросы.
  • Обеспечивает уровень безопасности.
  • Логическая независимость от структуры базовых таблиц.

Недостатки и ограничения:

  • Производительность: Сложные VIEW без индексов могут работать медленно. В некоторых СУБД есть материализованные представления (Materialized Views) для кэширования результата.
  • Обновляемость: Не все VIEW допускают операции INSERT, UPDATE, DELETE (например, если в запросе есть DISTINCT, GROUP BY, агрегатные функции).
  • Зависимость от схемы: При изменении базовых таблиц VIEW может стать невалидной.