Виртуальные таблицы в SQL
Представление (VIEW) – это объект базы данных (БД), который хранит в себе запрос SELECT. При обращении к данному объекту будет возвращен результирующий набор данных (результат выполнения запроса).
Представления бывают двух видов.
Ссылка на статью с разбором системных представлений
Преставление также называют псевдонимами запросов или виртуальными таблицами. Это связано с тем, что представление не хранит в себе информацию, но при этом вы можете обращаться к нему как к обычной таблице, указав после оператора FROM название представления. Каждый раз при обращении к представлению, выполняется запрос заключённый в представлении и возвращается результат выполнения этого запроса.
Для создания представлений могут использоваться как таблицы, так и представления. То есть представления могут быть вложенными.
Преимущества представлений
- Гибкая настройка прав доступа
Представление может включать в себя отдельные строки, столбцы таблиц или результат действия с данными. Тем самым появляется возможность ограничить доступ пользователей к базовым таблицам.
- Предотвращение дублирования запросов
Как функции в программировании помогают избежать дублирования кода, так и представления в SQL помогают избежать дублирования запросов. Вы можете обращаться к одному и тому же представлению несколько раз, в различных запросах. И если нужно что-то поменять в запросе, который используется неоднократно, то нужно изменить только лишь само определение представления.
- Сокрытие реализации
Пользователь имеет доступ к представлениям, но не имеет доступа к базовым таблицам, из которых извлекаются данные. А значит администратор/ разработчик БД может менять схему хранения данных так как ему необходимо при этом обновляя определения представлений.
Создание представлений
Синтаксис создания представления следующий:
Для создания представления используется оператор CREATE VIEW. view_name – это название представления. После оператора AS следует сам запрос.
Обновление определения представления
Синтаксис данной операции следующий:
Обновление применимо, например, в том случае, если вам необходимо что-то изменить в запросе.
Если представления не существует, то оно будет создано.
Удаление представления
Синтаксис удаления представления следующий:
Материализованные представления
Как уже говорилось ранее, представления не хранят данные. При запросе к представлениям данные извлекаются из таблиц. Но здесь существует исключение – это материализованные представления.
Синтаксис создания такого представления представлен ниже:
Данный тип представлений один раз выполняет запрос и хранит данные. Тем самым повышается быстродействие, но данные в представлении необходимо обновлять вручную.
Для этого применяется следующая команда:
Материализованные представления не являются частью стандарта ANSI SQL и поддерживаются не всеми системами управления базами данных (СУБД). PostgreSQL и Oracle Database поддерживают данный тип представлений.
Практическая часть
Для примера создадим небольшую базу данных, в которой будет хранится информация о договорах страхования.
Схема БД представлена ниже.
Весь код далее был написан в pgAdmin. Соответственно в качестве СУБД использовалась PostgreSQL.
Код создание таблиц приведён ниже.
Далее заполняем таблицы данными на своё усмотрение. Данные из таблиц, приведённые в статье, являются случайными и не имеют никакой связи с реальностью.
Сделаем тестовый запрос к БД.
Результат выполнения запроса:
Всё в порядке, всё работает. Можем приступать к работе с представлениями.
Создадим представление.
Попробуем обратится к представлению как к обычной таблице.
Результат:
Таким образом, пользователь сможет обращаться к представлению как к обычной таблице. Тем самым можно ограничить доступ к некоторым полям в таблице страховых агентов. Например, не показывать номера телефонов агентов.
Также не нужно переписывать данной запрос несколько раз, достаточно обратиться к представлению.
Теперь, изменим представление – добавим почты агентов. Удалять столбцы из представления нельзя.
Результат:
Удалим представление и создадим материализованное представление.
Удаление:
Создание материализованного представления:
Обратимся к представлению как к таблице:
Результат:
Попробуем изменить данные и вновь вызовем представление. Удалим запись о договоре страхования с серией и номером 0567412354.
Информация о договоре:
Удаление:
Вызов обращения:
Выполним отдельно запрос из представления, чтобы сверить результаты.
По скриншотам видно, что данные в материализованном представлении не обновились (данные за 2015 год).
Однако скорость выполнения операций отличается.
Представление:
Запрос:
Обработка операции с обращением к материализованному представлению происходит быстрее.
В этом посте я рассмотрел тему представлений в SQL. Что они из себя представляют, какие бывают, для чего и как используются. Если остались вопросы, задавайте их в комментариях.
Надеюсь материал был полезен. Удачи в использовании представлений!