SQL: Представления
Представление (view) в базах данных — это виртуальная таблица, которая предоставляет результат SQL-запроса как будто это таблица. В отличие от обычных таблиц, представление не хранит данные физически в базе данных. При обращении база данных динамически выполнит ассоциированный с ним SQL-запрос и возращает результаты. Это позволяет абстрагироваться от сложных запросов и предоставить данные в удобном для использования виде.
Представления хранятся в системных таблицах базы данных, подобно объектам, таким как таблицы и индексы. Там же хранится SQL-запрос, ассоциированный с каждым представлением. Cами данные в представлениях не хранятся — представления генерируют данные динамически при каждом обращении к ним на основе сохраненного запроса. Размер занимаемого места самим представлением минимален и зависит от сложности и размера SQL-запроса, а не от объёма данных, на которые этот запрос указывает.
Представления могут быть очень полезны при работе со сложными запросами, а также когда нужно предоставить доступ к определённым данным без предоставления доступа к самим таблицам.
Пример
# тестовая таблица CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL, registration_date DATE NOT NULL ); INSERT INTO users (username, email, registration_date) VALUES ('Alex', 'alex@example.com', '2023-01-01'), ('Maria', 'maria@example.com', '2023-02-01'), ('John', 'john@example.com', '2023-03-01');
Cоздаём представление, которое будет возвращать имена пользователей и их адреса электронной почты, но не будет показывать дату регистрации:
CREATE VIEW view_user_info AS SELECT username, email FROM users;
Созданное представление можно использовать почти так же, как и обычную таблицу:
SELECT * FROM view_user_info;
Редактирование представления:
# Обновление представления DROP VIEW IF EXISTS view_user_info; CREATE VIEW view_user_info AS SELECT username, email FROM users WHERE registration_date > '2023-01-01'; # Удаление представления DROP VIEW IF EXISTS view_user_info;
Примеры использования представлений:
1. Сокрытие сложности
Если в базе данных есть сложный запрос с несколькими соединениями (JOIN), группировками и подзапросами, его можно инкапсулировать в представление.
2. Адаптация данных для аналитики
Представления могут использоваться для предварительной обработки и агрегации данных, что упрощает их последующее использование в аналитике.
3. Обеспечение совместимости после изменений в базе данных
При модификации структуры базы данных (например, при разделении таблицы на две) представления могут помочь сохранить обратную совместимость для существующих приложений. Создав представление, которое имитирует структуру исходной таблицы, можно избежать необходимости вносить изменения в приложение.
4. Ограничение доступа к данным
Создав представления, которые включают только те данные, к которым должен быть доступ у конкретного пользователя или группы пользователей, можно эффективно управлять правами доступа, не прибегая к сложной логике на уровне приложения.
Получить список всех представлений в текущей базе данных:
SELECT TABLE_NAME AS viewName, TABLE_SCHEMA AS viewSchema, IS_UPDATABLE AS isUpdatable FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = 'имя_текущей_базы_данных';
Комментарии