Создание представлений - Банки и базы данных. Системы управления базами данных

Представлением (View) называется виртуальная таблица, отображающая данные, получаемые из реальных таблиц БД, а также из других представлений. Представление может быть получено как из одной таблицы БД, так и из нескольких. Кроме того, в представлении допускается включение вычисляемых полей. В общем случае представление можно рассматривается как хранимый запрос на выборку.

В отличие от реальной таблицы представление действительно не существует в БД, хотя все представленные в нем данные реально существуют в БД в разных ее таблицах. Эти данные компонуются в удобном для пользователя виде с помощью запроса. При создании представление обязательно получает уникальное имя и его описание хранится в описании схемы БД. СУБД при обращении к представлению выполняет запрос, соответствующий описанию этого представления.

Оператор определения представления имеет следующий формат:

CREATE VIEW <имя представления>

[(<имя столбца> [, <имя столбца>]...)]

AS <оператор SELECT>

[WITH[CASCADED/LOCAL]CHECK OPTIONS]

Выполнение этого оператора приводит к созданию виртуальной таблицы, состав которой определяется оператором SELECT. Пользователь может работать с представлениями как с реальной таблицей не зная даже при этом, что на самом деле он работает с виртуальной таблицей. Понятие виртуальной таблицы означает, что представление не хранится в памяти компьютера в виде физической таблицы данных - сохраняется лишь описание представления, следующее за оператором AS. Сама же виртуальная таблица формируется лишь в момент обращения к представлению.

При необходимости можно задавать любые имена для столбцов виртуальной таблицы, создаваемой представлением. В случае, если список имен столбцов не указывается, то каждый столбец получает имя соответствующего столбца реальной таблицы БД. В явном виде имена столбцов должны задаваться в случаях, когда какой-то столбец представления получается в результате вычисления арифметического выражения, является результатом функции, константой, то есть другими словами тогда, когда в реальной таблице ему не соответствует ни один столбец, чье имя он может наследовать. Имя столбца должно также задаваться в случае, когда без этого два или более столбца имели бы совпадающие имена.

Для уничтожения представления используется стандартный оператор DROP:

DROP VIEW <имя представления>

Представления могут быть использованы для достижения следующих целей:

    1. Скрытие от пользователя не предназначающейся для него информации. 2. Обеспечение улучшенной степени защиты данных: часть данных скрывается от пользователей в соответствии с правами доступа различных категорий пользователей. 3. Упрощение сложных запросов. 4. Предоставление пользователю дополнительной информации, не содержащейся в реальных таблицах: в этом случае значения столбцов в представлении являются вычисляемыми.

Последняя строка в операторе создания представления (WUTH CHECH OPTION) означает, что при создании представления должно проверяться некоторое заданное условие.

Основными базовыми видами представлений, на основе которых строятся более сложные представления, являются горизонтальные, вертикальные, сгруппированные и объединенные представления.

Горизонтальное представление используется, главным образом, для уменьшения объема реальных таблиц и имеет вид:

CREATE VIEW <имя представления>

AS

SELECT *

FROM <имя таблицы>

WHERE <имя столбца> = <значение>

Это представление является фактически аналогом операции выборки реляционной алгебры. В результате его реализации виртуальная таблица будет содержать весь набор столбцов реальной таблицы и столько строк, сколько раз в заданном условием WHERE столбце встречается данное значение.

Аналогом операции проектирования является вертикальное представление, отображающее все строки реальной таблицы и только те столбцы, которые задаются оператором SELECT:

CREATE VIEW <имя представления>

[(<имя столбца> [, <имя столбца>]...)]

AS

SELECT [(<имя столбца> [, <имя столбца>]...)]

FROM <имя таблицы>

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

CREATE VIEW <имя представления>

[(<имя столбца> [, <имя столбца>]...)]

AS

SELECT [([<функция>]<имя столбца> [, <имя столбца>]...)]

FROM <имя таблицы>

GROUP BY [(<имя столбца> [, <имя столбца>]...)]

Объединенные представления используются для представления в одной виртуальной таблице данных из нескольких таблиц БД:

CREATE VIEW <имя представления>

[(<имя столбца> [, <имя столбца>]...)]

AS

SELECT [(<имя столбца> [, <имя столбца>]...)]

FROM [(<имя таблицы> [, <имя таблицы>]...)]

[WHERE <условие>]

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

В соответствии с существующим стандартом SQL данные, содержащиеся в представлении, можно модифицировать только при выполнении следующих условий:

    1. Модифицировать можно только данные, полученные из одной базовой таблицы данных, причем пользователь должен иметь соответствующие права доступа к этой таблице. При этом, если базовая для данного представления таблица сама по себе является представлением, то она также должна удовлетворять этому условию. 2. В корректирующем запросе не должны присутствовать данные, полученные с помощью операторов GROUP BY и HAVING. 3. В корректирующем запросе не должен использоваться оператор DISTINCT. То есть если имеются повторяющиеся строки, то они не должны исключаться из виртуальной таблицы запроса. 4. Столбцы представления должны быть простыми в том смысле, что они не должны быть вычисляемыми, полученными с помощью агрегированных функций или содержать выражения. 5. В представлении не должно содержаться вложенных запросов. 6. В представлении нельзя использовать соединение таблицы "сама с собой". 7. Ни на один столбец в выражении оператора SELECT нельзя ссылаться более одного раза.

Соблюдение перечисленных условий необходимо прежде всего потому, что это позволяет сохранить целостность БД. При этом в ряде СУБД обеспечивается контроль не всех из этих условий, поэтому при использовании представлений необходимо контролировать осуществляемые с помощью них операции.

Похожей на представление конструкцией является курсор, поскольку при его создании используется запрос. Курсор используется только во встроенном SQL и создается следующим образом:

DECLARE <имя курсора> CURSOR

FOR <подзапрос>

Использование курсоров обусловлено необходимостью согласования включающих языков и теоретико-множественного языка SQL.

Курсор может находиться в открытом и закрытом состояниях. Открытие курсора осуществляется командой

OPEN CURSOR <имя курсора>.

При закрытии курсора используется команда

CLOSE CURSOR <имя курсора>.

При выполнении этой команды происходит выполнение запроса, описанного при определении курсора. В открытом состоянии позиция курсора может быть произвольной - перед заданной строкой, в строке, после последней строки. Однако при первом открытии курсора он устанавливается перед первой строкой. Строка, на которой установлен курсор, является текущей строкой курсора.

Курсоры бывают обновляемыми и только для чтения. Обновляемым может быть только такой курсор, который базируется только на одной таблице данных.

Похожие статьи




Создание представлений - Банки и базы данных. Системы управления базами данных

Предыдущая | Следующая