6. Модификация базовых отношений

Для успешной и продуктивной работы с различными базовыми отношениями очень часто разработчикам необходимо каким-либо образом модифицировать это базовые отношения.

Какие основные необходимые варианты модификации встречаются чаще всего в практике проектирования баз данных? Перечислим их:

1) вставка кортежей.

Очень часто нужно в уже сформированное базовое отношение вставить новые кортежи;

2) обновление значений атрибутов.

А необходимость этой модификации в практике программирования встречается еще чаще, чем предыдущая, ведь при поступлении новой информации об аргументах вашей базы данных неминуемо придется какую-то старую информацию обновлять;

3) удаление кортежей.

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

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

1) оператор вставки в базовое отношение новых кортежей. Это оператор Insert. Выглядит он следующим образом:

Insert into имя базового отношения (имя атрибута,..)

Values (значение атрибута,..);

Металингвистический символ «,..», поставленный после имени атрибута и значения атрибута, говорит нам, что этот оператор допускает одновременное добавление нескольких атрибутов в базовое отношение. В этом случае необходимо имена атрибутов и значения атрибутов перечислять через запятую в согласованном порядке.

Ключевое слово into в сочетании с общим названием оператора Insert означает «вставить в» и показывает, в какое отношение необходимо вставить указанные в скобках атрибуты.

Ключевое слово Values в этом операторе и означает «значения», «величины», которые и присваиваются этим вновь объявленным атрибутам;

2) теперь рассмотрим оператор обновления значений атрибутов в базовом отношении. Этот оператор называется Update, что в переводе с английского и означает буквально «обновить». Дадим полный общий вид этого оператора в записи на псевдокоде и расшифруем ее:

Update имя базового отношения

Set {имя атрибута – значение атрибута},..

Where условие;

Итак, в первой строчке оператора после ключевого слова Update записывается имя базового отношения, в котором необходимо произвести обновления.

Ключевое слово Set переводится с английского «задать», и в этой строчке оператора указываются имена атрибутов, которые необходимо обновить, и соответствующие новые значения атрибутов.

В одном операторе можно обновить сразу несколько атрибутов, что следует из применения металингвистического символа «,..».

В третьей строке после ключевого слова Where записывается условие, показывающее, какие именно атрибуты данного базового отношения необходимо обновить;

3) оператор Delete, позволяющий удалять какие-либо кортежи из базового отношения. Запишем его полный вид на псевдокоде и разъясним значение всех отдельных синтаксических единиц:

Delete from имя базового отношения

Where условие;

Ключевое слово from в сочетании с названием оператора Delete переводится как «удалить из». И после этих ключевых слов в первой строчке оператора указывается имя базового отношения, из которого необходимо удалить какие-либо кортежи.

А во второй строчке оператора после ключевого слова Where («где») указывается условие, по которому отбираются кортежи, более не требующиеся в нашем базовом отношении.

Лекция № 9. Функциональные зависимости

1. Ограничение функциональной зависимости

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

Для объяснения понятия функциональной зависимости, рассмотрим следующий пример.

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

Сессия (№ зачетной книжки, Фамилия, Имя, Отчество, Предмет, Оценка);

Атрибуты «№ зачетной книжки» и «Предмет» образуют составной (так как ключом объявлены два атрибута) первичный ключ этого отношения. Действительно, по двум этим атрибутам можно однозначно определить значения всех остальные атрибутов.

Однако, помимо ограничения уникальности, связанной с этим ключом, на отношение непременно должно быть наложено то условие, что одна зачетная книжка выдается обязательно одному конкретному человеку и, следовательно, в этом отношении кортежи с одинаковым номером зачетной книжки должны содержать одинаковые значения атрибутов «Фамилия», «Имя» и «Отчество».

Базы данных: конспект лекций - i_072.png

Если у нас имеется следующий фрагмент какой-то определенной базы данных студентов учебного заведения после какой-то сессии, то в кортежах с номером зачетной книжки 100, атрибуты «Фамилия», «Имя» и «Отчество» совпадают, а атрибуты «Предмет» и «Оценка» – не совпадают (что и понятно, ведь в них речь идет о разных предметах и успеваемости по ним). Это значит, что атрибуты «Фамилия», «Имя» и «Отчество» функционально зависят от атрибута «№ зачетной книжки», а атрибуты «Предмет» и «Оценка» функционально не зависят.

Таким образом, функциональная зависимость – это однозначная зависимость, затабулированная в системах управления базами данных.

Теперь дадим строгое определение функциональной зависимости.

Определение: пусть X, Y – подсхемы схемы отношения S, определяющие над схемой S схему функциональной зависимости XY (читается «X стрелка Y»). Определим ограничения функциональной зависимости invY> как утверждение о том, что в отношении со схемой S любые два кортежа, совпадающие в проекции на подсхему X, должны совпадать и в проекции на подсхему Y.

Запишем это же определение в формулярном виде:

InvY> r(S) = t1, t2r(t1[X] = t2[X] t1[Y] = t2 [Y]), X, Y ⊆ S;

Любопытно, что в этом определении использовано понятие унарной операции проекции, с которым мы сталкивались раньше. Действительно, как еще, если не использовать эту операцию, показать равенство друг другу двух столбцов таблицы-отношения, а не строк? Поэтому мы и записали в терминах этой операции, что совпадение кортежей в проекции на какой-то атрибут или несколько атрибутов (подсхему X) непременно влечет за собой совпадение этих же столбцов-кортежей и на подсхеме Y в том случае, если Y функционально зависит от X.

Интересно заметить, что в случае функциональной зависимости Y от X, говорят также, что X функционально определяет Y или что Y функционально зависит от X. В схеме функциональной зависимости X → Y подсхема X называется левой частью, а подсхема Y – правой частью.

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

Конец определения.