Представления, VIEW
Хорошо спроектированные приложения обычно предоставляют открытый интерфейс, скрывая детали реализации, что позволяет вносить изменения в дизайн без влияния на конечных пользователей.
При разработке вашей базы данных вы можете достичь аналогичного результата, закрывая таблицы и предоставляя доступ к данным только через набор представлений.
В этой статье мы рассмотрим, что такое представления, как они создаются и для чего они могут быть полезными.
Что такое представление
Представления иногда называют «виртуальными таблицами». Это связано с тем, что представление для пользователя выглядит как таблица, но фактически не хранит данных, а извлекает их из других таблиц в момент обращения.
Если данные в основной таблице меняются, пользователь получает актуальные данные при обращении к представлению, использующему эту таблицу. При этом представления не кэшируют результаты выборки из таблицы в процессе работы.
Пример создания представления
В качестве простого примера предположим, что вы хотите частично скрыть адреса электронной почты в таблице пользователей (Users).
Это может быть полезно, например, если политика вашей компании не позволяет всем использовать конфиденциальную информацию о пользователях. Поэтому вместо того, чтобы разрешить прямой доступ к таблице пользователей (Users), вы определяете представление с именем ViewUsers и требуете, чтобы все использовали его для доступа к данным о пользователях.
Вот пример определения этого представления:
MySQL 8.4CREATE VIEW ViewUsers AS SELECT id, name, CONCAT(SUBSTR(email, 1, 2), '****', SUBSTR(email, -4)) AS email FROM Users;
Вот пример определения этого представления:
MySQL 8.4CREATE VIEW ViewUsers AS SELECT id, name, CONCAT(SUBSTR(email, 1, 2), '****', RIGHT(email, 4)) AS email FROM Users;
Представление в SQL-запросе выглядит и используется как обычная таблица:
MySQL 8.4SELECT * FROM ViewUsers;
Если вы хотите узнать, какие столбцы доступны в представлении, вы можете использовать оператор DESCRIBE:
MySQL 8.4DESCRIBE ViewUsers;
Если вы хотите узнать, какие столбцы доступны в представлении, вы можете использовать запрос к information_schema:
MySQL 8.4SELECT column_name, data_type, is_nullable FROM information_schema.columns WHERE table_name = 'viewusers';
Общий синтаксис представления
CREATE [OR REPLACE]
VIEW имя_представления [(поле_представления [, ...])]
AS select_выражение;- [ ]необязательная часть
- ...можно повторить
- OR REPLACE
Если представление с таким именем уже есть, оно будет заменено новым. Без OR REPLACE попытка создать представление с занятым именем завершится ошибкой.
Ключевое словоНеобязательный- имя_представления
Имя нового представления. По нему к представлению обращаются в запросах, как к таблице.
- поле_представления
Имена столбцов представления. Если их не указать, столбцы получат имена из запроса SELECT.
Необязательный- select_выражение
Запрос SELECT, результат которого показывает представление.
Подзапрос
CREATE [OR REPLACE] VIEW имя_представления [(поле_представления [, ...])]
AS select_выражение;- [ ]необязательная часть
- ...можно повторить
- OR REPLACE
Если представление с таким именем уже есть, оно будет заменено новым. Без OR REPLACE попытка создать представление с занятым именем завершится ошибкой. Новый запрос должен вернуть те же столбцы в том же порядке, новые столбцы можно добавить только в конец.
Ключевое словоНеобязательный- имя_представления
Имя нового представления. По нему к представлению обращаются в запросах, как к таблице.
- поле_представления
Имена столбцов представления. Если их не указать, столбцы получат имена из запроса SELECT.
Необязательный- select_выражение
Запрос SELECT, результат которого показывает представление.
Подзапрос
Зачем нужны представления
Упрощение сложных запросов
Представления используются для упрощения сложных запросов и создания абстракции между пользователем и базой данных. Они могут скрывать сложность структуры данных и предоставлять упрощённый интерфейс для доступа к данным.
Улучшение производительности
Создание представлений, которые инкапсулируют сложные запросы, может помочь оптимизировать выполнение этих запросов. Это может привести к более быстрому выполнению запросов и улучшению общей производительности базы данных.
Создание представлений, которые инкапсулируют сложные запросы, может помочь оптимизировать выполнение этих запросов. PostgreSQL поддерживает материализованные представления (MATERIALIZED VIEW), которые физически хранят результаты запроса и периодически обновляются, что может значительно улучшить производительность для сложных запросов.
Обеспечение безопасности
Представления могут использоваться для обеспечения безопасности конфиденциальных данных. Создание представлений, которые ограничивают доступ к определённым столбцам или строкам данных, позволяет администраторам ограничить доступ к чувствительной информации. Это помогает гарантировать, что только авторизованные пользователи имеют доступ к конфиденциальным данным.
Итоги
Представления являются важным инструментом в SQL, который позволяет упростить сложные запросы, стандартизировать доступ к данным, повысить производительность и обеспечить безопасность данных.
Давайте проверим, как вы усвоили тему: выберите правильное утверждение на вопрос «Что такое представление в базе данных?»