Введение

Набор результатов запроса, хранящегося в базе данных

В базе данных, представление (вид) – это набор результатов сохраненного запроса, который может быть запрошен таким же образом, как объект коллекции постоянной базы данных. Эта предварительно установленная команда запроса хранится в словаре данных. В отличие от обычных базовых таблиц в реляционной базе данных, представление не является частью физической схемы: как набор результатов, это виртуальная таблица.

Представления могут объединять и упрощать несколько таблиц в одну виртуальную таблицу. Представления могут выступать в качестве агрегированных таблиц, где движок базы данных агрегирует данные (сумма, среднее значение и т. д.) и представляет вычисленные результаты как часть данных. Представления могут скрывать сложность данных. Например, представление может отображаться как Sales2020 или Sales2021, прозрачно разделяя фактическую базовую таблицу. Представления занимают очень мало места для хранения; база данных содержит только определение представления, а не копию всех данных, которые оно представляет. Представления структурируют данные таким образом, чтобы пользователи находили их естественными и интуитивно понятными. Подобно тому, как функция (в программировании) может обеспечить абстракцию, так же может поступить и представление базы данных. В аналогии с функциями, пользователи баз данных могут манипулировать вложенными представлениями, таким образом, одно представление может агрегировать данные из других представлений. Без использования представлений нормализация баз данных выше второй нормальной формы стала бы гораздо сложнее. Представления могут облегчить создание безпотерьного разложения соединений. Так же, как строки в базовой таблице не имеют определенного порядка, строки, доступные через представление, не отображаются с какой-либо сортировкой по умолчанию. Представление – это реляционная таблица, а реляционная модель определяет таблицу как набор строк. Поскольку множества не упорядочены по определению, то и строки представления не упорядочены. Поэтому предложение ORDER BY в определении представления не имеет смысла; стандарт SQL (SQL:2003) не допускает предложение ORDER BY в подзапросе команды CREATE VIEW, так же как оно не допускается в инструкции CREATE TABLE. Однако отсортированные данные можно получить из представления так же, как и из любой другой таблицы, – как часть запроса к этому представлению. Тем не менее, некоторые СУБД (например, Oracle Database) не соблюдают это ограничение стандарта SQL.

Просмотры только для чтения против обновляемых

Виды могут быть определены как только для чтения или обновляемые. Если система управления базами данных (СУБД) может определить обратное отображение от схемы вида к схеме базовых таблиц, то вид является обновляемым. Операции INSERT, UPDATE и DELETE могут выполняться над обновляемыми видами. Виды, предназначенные только для чтения, не поддерживают такие операции, поскольку СУБД не может сопоставить изменения базовым таблицам. Обновление вида выполняется с сохранением ключей. Некоторые системы поддерживают определение триггеров INSTEAD OF для видов. Эта техника позволяет определить другую логику для выполнения вместо операций вставки, обновления или удаления в видах. Таким образом, системы управления базами данных могут реализовывать изменение данных на основе видов, предназначенных только для чтения. Однако, триггер INSTEAD OF не изменяет свойство вида – только для чтения или обновляемый.

Материализованные взгляды

Различные системы управления базами данных расширили возможности представлений, изначально предназначенных для работы с подмножествами данных только для чтения, особенно материализованные представления: предварительно вычисленные, не виртуальные представления, широко используемые в хранилищах данных. Они предоставляют статический снимок данных и могут включать данные из удаленных источников. Точность материализованного представления зависит от частоты срабатывания механизмов, отвечающих за его обновление. Материализованные представления были впервые внедрены в Oracle Database, а IBM Db2 предоставляет так называемые "материализованные таблицы запросов" (MQT) для решения той же задачи. Microsoft SQL Server представил в версии 2000 года индексированные представления, которые хранят только отдельный индекс для таблицы, но не сами данные. PostgreSQL реализовал материализованные представления в версии 9.3.