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 = 'имя_текущей_базы_данных';
SQL MySQL Просмотров: 202
Оценить код:

Комментарии

Ваш комментарий будет первым.
Войдите, чтобы оставить комментарий.