История развития баз данных. Основные понятия и определения. Архитектура базы данных. Физическая и логическая независимость, страница 23

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

zavcaf char (3) FEFERENCES преподаватель (pnum);

При определении таблицы с внешним ключом можно определить или ограничить выполнение действий над таблицей с родительским ключом:

  1. Запретить удаление записи или обновление родительского ключа при наличии связанных записей в таблице с внешним ключом.

UPDATE/DELETE OF родительская_таблRESTRICTED;

  1. При удалении записи или обновлении родительского ключа автоматически удалять или обновлять записи с тем же внешним ключом.

UPDATE/DELETE OF родительская_таблCASCADES;

  1. При удалении записи или обновлении родительского ключа, значение внешнего ключа автоматически устанавливается в NULL.

UPDATE/DELETE OF родительская_таблNULLS;

Пример:

CREATETABLE студент (… spdpchar (3) REFERENS преподаватель (pnum), UPDATEOF преподаватель CASCADE, DELETEOF преподаватель NULLS);

Тема 9.

Вопросы темы:

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

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

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

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

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

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

Пример:

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

CREATEVIEW имя_представления Кафедра1 ASSELECT * FROM Преподаватель WHEREpcaf = «K-1»;

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

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

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

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

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