Опубликован: 05.01.2004 | Уровень: специалист | Доступ: свободно | ВУЗ: Московский государственный университет имени М.В.Ломоносова
Лекция 6:

Работа с представлениями. Типы данных

< Лекция 5 || Лекция 6: 123 || Лекция 7 >
Аннотация: В лекции обсуждаются вопросы создания и применения представлений как объектов баз данных.

Создание представлений

Представление (view), иногда называемое также видом, определяет логическую таблицу, получаемую как результат выполнения сохраненного запроса. Представление - это некоторая логическая (виртуальная) таблица, которая формируется заново каждый раз, когда в SQL-операторе встречается ссылка на конкретное представление. Результирующий набор, создаваемый как результат выполнения запроса, определяющего данное представление, формируется из полей других таблиц базы данных. Таблицы, используемые в запросе для создания представления, называются простыми основными таблицами.

Представление является объектом схемы и используется как логическая таблица базы данных.

Для определения представления применяется оператор CREATE VIEW .

Оператор CREATE VIEW

Оператор CREATE VIEW имеет в стандарте SQL-92 следующее формальное описание:

CREATE VIEW table_name [(field .,:) ]
   AS (SELECT_operator
       [WITH [CASCADED | LOCAL] 
        CHECK OPTION ] );

Список полей (field), указываемый после имени представления, позволяет переименовать столбцы основных таблиц, используемых в запросе. Это может потребоваться в случае совпадения имен столбцов при запросах, использующих объединение таблиц; для именования вычисляемых столбцов; для именования объединенных столбцов, полученных посредством соединения столбцов из двух таблиц, имеющих различные имена полей.

Оператор запроса SELECT , использующийся для построения представления, может иметь две формы:

  • расширяемую;
  • постоянную.

Расширяемая форма оператора SELECT задается как конструкция SELECT *, не ограничивая жестко список полей, извлекаемых в запрос. Это позволяет не менять синтаксис представления при изменении оператором ALTER TABLE структуры таблицы: добавлении новых столбцов или удалении столбцов. Однако это также может являться и недостатком, если SQL-операторы, использующие представление, зависят от числа, типа и имен столбцов.

Постоянная форма оператора SELECT задается как конструкция SELECT список_столбцов, жестко фиксируя имена столбцов, входящих в запрос.

Как будет влиять изменение основных таблиц на представление, можно указать в операторе ALTER TABLE :

  • фраза RESTRICT определяет ограничение, отменяющее изменение таблицы, если на данный столбец есть ссылки в представлениях (а также в ограничениях и предикатах);
  • фраза CASCADE указывает, что все представления, использующие удаляемый столбец, также будут удалены (а также все внешние ключи, имеющие ссылки на удаляемый столбец или ограничения FOREIGN KEY ).

Оператор ALTER TABLE имеет в стандарте SQL-92 следующее формальное описание:

ALTER TABLE table_name
  { ADD [COLUMN] column_name column_type 
        [(size)]
        [column_ constraint] }
  | { ALTER [COLUMN]column_name 
        { SET DEFAULT value } | DROP DEFAULT }
  | { DROP [COLUMN] column_name 
                    RESTRICT | CASCADE }
  | { ADD table_ constraint }
  | { DROP CONSTRAINT constraint_name 
                      RESTRICT | CASCADE };

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

Следующий оператор иллюстрирует изменение таблицы, приводящее к удалению всех представлений, ссылающихся на столбец f2 изменяемой таблицы:

ALTER TABLE tbl1 DROP COLUMN f2 CASCADE;
< Лекция 5 || Лекция 6: 123 || Лекция 7 >