Инфологическое моделирование

Вид материалаДокументы

Содержание


Вертикальное представление
Сгруппированные представления
Объединенные представления
Ограничение стандарта SQL1 на обновление представлений
Подобный материал:
1   2   3   4
Горизонтальное представление

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

Например, у нас есть таблица «Сотрудник» (EMPLOYEE) с полями «Табельный но­мер» (Т NUH), «ФИО» (NAME), «должность»(Р051ТШ), «оклад»(SALARY), «надбав­ка» (PREMIUJM), «отдел» (DEPARTMENT).

Для приложения, с которым работает начальник отдела продаж, будет создано представление

CREATE VIEW SALJ3EPT AS

SELECT * FROM EMPLOYEE WHERE DEPARTMENT- "Отдел продаж"

Вертикальное представление

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

Например, для работника табельной службы, который учитывает присутствие сотрудников па работе, информация об окладе и надбавке должна быть закрыта. Для него можно создать следующее вертикальное представление:

CREATE VIEW TABEL AS SELECT TJUM.NAME, POSITION. DEPARTMENT

FROM EMPLOYEE

160 Глава 8. Принципы поддержки целостности в реляционной модели данных

Сгруппированные представления

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

Создадим представление, которое определяет суммарный фон заработной платы и надбавок по каждому подразделению с указанием количества сотрудников» минимальной, максимальной и средней зарплаты и надбавки по подразделению. Такой запрос позволяет сравнить заработную плату и надбавки прямо по всем подразделениям, и он может быть очень эффективно использован администра­цией при проведении сравнительного анализа подразделений фирмы.

CREATE VIEW RATE

DEPARTMENT, COUNTC*). SUM(SALARY), SUM(PREMIUM), MAX(SALARY). MIN(SALARY),

AVERAGE (SALARY), MAX(PREMIUM). MIN(PREMIUM). AVERAGE (PREMIUM) AS SELECT DEPARTMENT, COUNT(*>. SUM(SALARY), SUM(PREMIUM). MAX(SALARY),

MIN(SALARY). AVERAGE (SALARY). MAX(PREMIUM), MIN(PREMIUM).

AVERAGE (PREMIUM) FROM EMPLOYEE GROUP BY DEPARTMENT

Объединенные представления

Часто представления базируются на многотабличных запросах. Такое использо­вание позволяет упростить разработку пользовательского интерфейса сохраняв при этом корректность схемы базы данных. Для примера снова обратимся к базе данных «Библиотека» и создадим представление, которое содержит список чи­тателей-должников с указанием книг, которые у них па руках, и указанных в базе сроков сдачи этих книг. Такое представление может понадобиться для ад­министративного приложения, которое разрабатывается для директора библио­теки или его заместителя, они должны принимать административные меры для наказания нарушителей и возврата книг в библиотеку.

CREATE VIEW DEBTORS

ISBN.TITLE, NUM READER.NAME.ADRES.HOME _PHON, WORK PHON.DATA_OUT

AS

SELECT ISBN .TITLE, NUMREADER, NAME, ADRES. HOME PHON. WORKJHON. DATA ОUT

FROM BOOKS.EXEMPLAR.READERS

WHERE BOOKS.ISBN = EXEMPLAR.ISBN AND

EXEMPLAR,NUM READER = READERS.NUM READER AND

EXEMPLAR.PRESENT = FALSE AND

EXEMPLAR.DATA OUT < GetDate O

Понятие представления операции создания представлений 161

Ограничение стандарта SQL1 на обновление представлений

Несмотря на то, что для пользователей представления выглядят как реальные отношения, существует ряд ограничений на операции модификации данных, свя­занные с представлениями.

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

Согласно стандарту, представление можно обновлять только в том случае, когда его запрос соответствует следующим требованиям;

Q В запросе должен отсутствовать предикат DISTINCT, то есть повторяющиеся строки не должны исключаться из таблицы результатов запроса.

Q В предложении FROM должна быть задана только одна таблица, которую мож­но обновлять, то есть у представления должна быть только одна исходная таблица (это горизонтальное или вертикальное представление), а пользова­тель должен иметь соответствующие права доступа к ней. Если таблица сама является представлением, то она тоже должна удовлетворять данным усло­виям.

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

Q В предложении WHERE не должен стоять вложенный запрос; в нем могут при­сутствовать только простые условия поиска.

Q В запросе не должно присутствовать выражение группировки GROUP BY или HAVING.

Q Однако в ряде коммерческих СУБД эти требования смягчены и операции Модификации разрешены для более широкого класса представлений.