Databases. Part V

Databases. Part V

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

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

Представьте такие ситуации:

Клиент заказал товар, который не значится в прайс-листе. Зарплату начислили сотруднику, который не работает на предприятии. В график движения включили локомотив, которого нет в депо. В карточку читателя вписали книгу, которой никогда не было в библиотеке. Пассажиру продали билет на место, которого нет в самолете… неудачник :D

Как такое могло произойти??

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

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

Рассмотрим следующее средство ограничения целостности – ссылочную целостность данных.

ССЫЛОЧНАЯ ЦЕЛОСТНОСТЬ ДАННЫХ

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

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

Абстрактный пример:

Для проверки успеваемости проводится тестирование учащихся. Если ученик справляется с заданием, добавляется запись с номером выполненного задания.

Чтобы реализовать такие действия, нам потребуется три таблицы: Учащиеся (Код_учащегося, Фамилия), Задания (Номер_задания, Описание) и Результаты (Код_учащегося, Номер_задания).

Таблицы «Учащиеся» и «Задания» - главные. Таблица «Результаты» зависимая, связывается по коду учащегося с таблицей «Учащиеся» и по номеру задания с таблицей «Задания». Выполнять задания могут только зарегистрированные ученики, то есть в таблице учащихся должна быть соответствующая запись, а в поле номер задания, отмечаются только те задания, которые были предложены в списке заданий.

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

Практика в MS Access:

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


Карта сайта


Информационный сайт Webavtocat.ru