Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
110
Добавлен:
15.06.2014
Размер:
10 Mб
Скачать

5.1.6 Организация межтабличных связей

Отношения между таблицами можно задать путем установления постоянных или временных связей между полями таблиц. Межтабличные связи необходимы прежде всего для поддержания целостности БД. Устойчивые связи между полями различных таблиц позволяют работать с несколькими таблицами синхронно. Это значит, что при перемещении указателя во время поиска информации в одной таблице он синхронно перемещается в другой и устанавливается определенным образом в каждой из таблиц. Таким образом, выбирая запись из одной таблицы, мы можем одновременно выбрать согласованную с ней запись из другой.

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

При определении связей одна из таблиц является родительской, а другая – дочерней. Для родительской таблицы должен быть определен первичный ключ или ключ-кандидат, а для дочерней – индекс для связи с родительской таблицей (внешний ключ).

Для установления связей нужно:

  1. Выбрать родительскую таблицу.

  2. Установить курсор мыши на первичный ключ таблицы.

  3. Нажимая и удерживая кнопку мыши, перетащить курсор на индекс дочерней таблицы, по которому устанавливается связь; отпустить кнопку мыши.

  4. Появится диалоговое окно Edit Relationship, в котором слева приведены наименование и список индексов родительской таблицы, а справа – то же для дочерней таблицы. В списках уже выбраны индексы, по которым должна осуществляться связь. Здесь же указывается тип отношений между таблицами «один к одному» или «один ко многим». Для сохранения отношения - кнопка ОК, для отказа - Cancel (отмена).

В окне конструктора БД линии связи показывают отношение между таблицами (рис. 5.12).

Для удаления отношения следует щелкнуть правой кнопкой по линии связи: она утолщится и появится контекстное меню. В меню выбрать команду Remove Relationship, и описание отношения будет удалено из словаря базы данных.

Рис. 5.12. Отображение связей между таблицами

5.1.7 Обеспечение целостности данных

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

Для определения условия целостности данных следует щелкнуть правой кнопкой в диалоговом окне конструктора базы данных и выбрать команду контекстного меню Edit Referential Integrity или соответствующую ей кнопку на панели инструментов Database Designer. Откроется диалоговое окно конструктора условий целостности данных Referential Integrity Builder, которое содержит перечень всех установленных отношений между таблицами. Здесь имеются наименования родительской и дочерней таблицы, имена индексов, используемых для связи, а также типы действий, выполняемых при модификации данных, добавлении и удалении записей.

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

Рассмотрим варианты действий:

  1. при изменении значения первичного ключа или ключа-кандидата в родительской таблице (табл. 5.5);

  2. при удалении записи в родительской таблице (табл. 5.6);

  3. при добавлении новой записи в дочернюю таблицу или редактировании в ней имеющейся записи (табл. 5.7).

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

Таблица 5.5

Тип

Описание

Cascade

Автоматом осуществляется каскадное изменение всех соответствующих значений в дочерней таблице.

Restrict

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

Ignore

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

Таблица 5.6

Тип

Описание

Cascade

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

Restrict

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

Ignore

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

Таблица 5.7

Тип

Описание

Restrict

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

Ignore

При вводе и изменении данных в дочерней таблице индексное выражение не инициализируется.