
- •Уровни представления данных в бд
- •Языки баз данных
- •Логическая структура данных
- •Операции над данными
- •10. Иерархическая модель данных
- •Реляционная модель данных
- •Основные понятия реляционной модели данных
- •Таким образом, отношение - это совокупность кортежей, т.Е. Таблица со всеми своими строками.
- •Ключи отношений
- •Поставщик изделие
- •Первичный ключ никогда не должен принимать нулевого значения, а в составном ключе ни одна из компонент никогда не должна быть нулевой.
- •Контроль ссылочной целостности
- •Нормализация отношений реляционной бд
- •Первая нормальная форма
- •Поставки1 поставки
- •Поставщик1 поставки
- •Операции над отношениями
- •Теоретико-множественные операции
- •Запрос 4
- •Язык sql - общие сведения
- •Язык запросов qbe
- •Запрос 1
- •Запрос 2
Поставщик изделие
-
П#.
Имя поставщ.
Город
И#
Наименование
Вес
П1
Восход
Тула
И1
Болт
12
П2
Заря
Самара
И2
Гайка
8
П3
Салют
Тула
И3
Гвоздь
6
И4
Винт
14
ПОСТАВКИ
-
П#
И#
Количество
П1
И1
300
П1
И2
200
П1
И3
200
П2
И1
200
П2
И2
500
П3
И4
80
В таблице ПОСТАВЩИК первичным ключом является атрибут П#, а в таблице ИЗДЕЛИЕ - И#.
Если в отношении нет атрибута, который можно принять в качестве первичного ключа (т.е. среди свойств объекта не нашлось ни одного свойства, однозначно идентифицирующего каждый экземпляр объекта), то в качестве первичного ключа можно использовать некоторую совокупность атрибутов. Например, в отношении ПОСТАВКИ в качестве первичного ключа выступает совокупность атрибутов П#, И#, т.к. сведения об объеме поставок конкретного изделия конкретным поставщиком можно получить только тогда, когда известен номер поставщика и номер поставляемого им изделия. Каждая комбинация значений этих атрибутов уникальна для каждого кортежа и однозначно его идентифицирует. Такой ключ называется составным.
Первичный ключ никогда не должен принимать нулевого значения, а в составном ключе ни одна из компонент никогда не должна быть нулевой.
Для реляционных БД очень важным является также понятие внешнего ключа отношений. Атрибут, являющийся первичным ключом одного отношения и входящий в составной первичный ключ другого отношения является внешним ключом этих отношений. Так, например, внешним ключом отношений ПОСТАВЩИК и ПОСТАВКИ является атрибут П#, а внешним ключом отношений ИЗДЕЛИЕ и ПОСТАВКИ является атрибут И#. Через внешний ключ между этой парой отношений устанавливается связь 1:М.
Отношение ПОСТАВКИ является связующим для отношений ПОСТАВЩИК и ИЗДЕЛИЕ, между которыми устанавливается связь М:М.
Все отношения реляционной модели должны быть связаны через внешние ключи. На практике в качестве внешнего ключа отношения, находящегося на стороне М, может использоваться и не ключевой атрибут.
Контроль ссылочной целостности
Контроль ссылочной целостности обычно заключается в анализе содержимого ключевых полей связанных таблиц при выполнении операций ведения БД.
При создании связи 1:М таблица, находящееся на стороне 1, считается главной (родительской) или мастер-таблицей, а таблица, находящаяся на стороне М – подчиненной (дочерней). Каждой записи мастер-таблицы может соответствовать нуль или более записей подчиненной таблицы. Поле внешнего ключа подчиненной таблицы должен содержать только те значения, которые уже имеются среди значений первичного ключа мастер-таблицы. Это значит, что в подчиненной таблице не могут присутствовать записи, не имеющие родительских записей в мастер-таблице.
Ссылочная целостность контролируется:
при вводе записей в подчиненную таблицу;
при удалении записи из родительской таблицы;
при модификации (изменении значения) первичного ключа в мастер-таблице и внешнего ключа подчиненной таблицы.
В подчиненную таблицу новую запись можно добавить лишь в том случае, если значение ее внешнего ключа совпадает с одним из значений первичного ключа в мастер-таблице. В противном случае ввод записи должен блокироваться. В мастер-таблицу новые записи добавляются без контроля ссылочной целостности. Контролируется лишь отсутствие дубликатов значений первичного ключа.
Удаление записей из подчиненной таблицы не требует контроля ссылочной целостности. При удалении записей из мастер-таблицы удалять можно только те записи, которые не имеют подчиненных записей. При наличии подчиненных записей удаление родительской записи необходимо блокировать, либо удалять ее вместе со всеми подчиненными записями, т.е. необходимо выполнять каскадное удаление.
При редактировании поля внешнего ключа подчиненной записи допустимо, чтобы подчиненная запись сменила родителя, но нельзя, чтобы она осталась без родителя. Можно редактировать значение первичного ключа записи мастер-таблицы в том случае, если эта запись на имеет подчиненных записей. В противном случае изменение значения ключевого поля должно блокироваться или сопровождаться соответствующим изменением значений внешнего ключа всех подчиненных записей. Эта операция называется каскадным обновлением.
При любых манипуляциях с записями мастер-таблицы необходим контроль уникальности значений их первичного ключа.
В СУБД последних поколений контроль ссылочной целостности осуществляется системой. При выполнении некорректных манипуляций с записями система блокирует операцию и генерирует соответствующее сообщение.