Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы и банки данных.doc
Скачиваний:
10
Добавлен:
12.11.2019
Размер:
745.98 Кб
Скачать

Тема 10.

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

2. Определение правд доступа к данным.

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

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

Представление – это описание запроса, сохранённое под некоторым именем. Представление определяется с помощью следующей команды:

CREATE VIEW имя_представления [список_столбцов_представления] AS запрос_выборки

Пример:

Определить представление для получения сведений о преподавателях кафедры К-1.

CREATE VIEW имя_представления Кафедра1 AS SELECT * FROM Преподаватель WHERE pcaf = «K-1»;

Следует отметить, что запрос по команде CREATE VIEW не выполняется, а происходит запоминание описания запроса.

Если список столбцов представления не определён, то столбцы получают имена столбцов базовой таблицы, перечисленных в предложении SELECT. Запрос выборки в представлении может быть любой сложности, содержать подзапросы и сам использовать представления вместо базовых таблиц. Уничтожить представление можно с помощью следующей команды:

DROP VIEW имя_представления;

Представления очень удобно использовать по следующим причинам:

  1. Часто используемые запросы можно сохранить в виде представлений, что упрощает получение выходных данных и конструирования новых запросов на основе представлений.

Пример:

Если определено представление Кафедра1, то, в дальнейшем, список сотрудников кафедры можно получить по следующим запросам:

SELECT * FROM Кафедра1;

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

CREATE VIEW Дипломы AS SELECT pcaf, pname, sname FROM Преподаватель WHEREdfgkjdlfjgdlkjgdklg

Теперь возможны различные запросы к этому представлению.

Пример 1:

Получить список дипломников определённой кафедры:

SELECT * FROM Дипломы WHERE pcaf = «K-1»;

Пример2:

Получить количество дипломников у преподавателя:

SELECT pname, COUNT(*) FROM Дипломы GROUP BY pname;

  1. Возможность открывать доступ пользователям только к той части информации, которую вы посчитаете нужной для пользователей. Т.е. базовые таблицы можно целиком сделать недоступными, а через представления дать пользователю доступ и обновление только части определённой информации в таблице. Следует отметить, что использование представлений для получения данных вызывает определённые проблемы производительности. Одним из наиболее сложных и неоднозначных аспектов представлений является применение их в командах обновления данных. Т.к. сами представления не содержат данных, то обновляться должны базовые таблицы. Если команду обновления данных можно применить к представлению, то такое представление является обновляемым, если нет – читаемым. Рассмотрим основные критерии, по которым представление считается обновляемым:

    1. Оно должно базироваться на базовой таблице (на одной) и включать её в первичный ключ.

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

    3. Оно не должно содержать DISTINCT или GROUP BY .

    4. Оно не должно использовать подзапросы (это ограничение стандарта ANSI, но некоторые системы это позволяют).

    5. Оно может основываться на представлении, но это представление само должно быть обновляемым.

    6. Для INSERT оно должно включать все поля базовой таблицы, имеющие ограничение NOT NULL.

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

INSERT INTO Кафедра1 VALUES («004», «П-4», «К-2»)

Однако, добавленная таким образом запись для преподавателя К-2 не будет отображена в представлении. Такая ситуация, как правило, недопустима.

Для того, чтобы обеспечить проверку условия запроса для вновь добавляемых записей, в запросах следует указывать предложение WITH CHECK OPTION. Для нашего примера это выглядит следующим образом:

CREATE VIEW Кафедра1 AS SELECT * FROM Преподаватель WHERE pcaf = «K-1» WITH CHECK OPTION;