Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
база данных.docx
Скачиваний:
167
Добавлен:
24.03.2015
Размер:
5.83 Mб
Скачать

12.9. Обеспечение ссылочной целостности

Обеспечение ссылочной целостности означает определение допустимых операций над связанными между собой таблицами. Главное требование ссы­лочной целостности заключается в том, чтобы записи дочерних таблиц име­ли ссылки на записи в родительской таблице (дети должны иметь родите­лей). В родительской таблице могут быть записи, не имеющие связанных с ними записей в дочерних таблицах (может быть семья без детей). В Visual FoxPro поддержка ссылочной целостности выполняется с помощью одно­именного Построителя. Чтобы открыть Построитель ссылочной целостнос­ти, достаточно выполнить следующее:

  • открыть БД с таблицами, для которых необходимо установить ссылоч­ную целостность;

  • в контекстном меню Конструктора БД задать команду Referential Integrity (ссылочная целостность),что и приведет к открытию окна Построителя ссылочной целостности данных (рис. 12.6).

' Referential Integrity Builder

R es for t .dating ^?и1еь for 1 dieting Rules ft nsemng

| Wtiic h rule do you want to apply when a new record is inserted or an existing record is ! updated m the child table9

■§•' <♦

BestrioL prohrbits the insert if a match g key value does not exist in the patent table. C Ignore: altows the insert

Parent Table

Child Table

Updatf

!te

Insert

ParentjaB,.

Child Tag

Ж.

rfolgn

t_prep

Cascade

Res'.rict

Restrr

i_dolgn

i eloign

t вгев

t zaar

i ascade

Restrict

Restrict

i fio

i fio

»

t stag

t jorep

Restrict

ignore

: stag

i_stag

■w

OK

Cancel



Hell

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

Таблица 12 7

Правила изменения значений первичного ключа

Наименование

Описание

Cascade

При изменении значений полей первичного ключа или ключа- kjhj [идата в родительской таблице автоматически осуществляется измене! 'ие всех соответ ствующих значений в дочерней таблице — каскадное изменение

Restrict

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

/

Ignore

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

Выбор любого из правил осуществляется установкой соответствующего переключателя. Выбранное правило отображается в соответствующей стро ке столбца Update (обновить).

При удалении записей из связанных таблиц (вкладка Rules for Deleting — правила удаления) требуется использование также трех правчл (табл. 1?.8).

Таблица 12.8

Правила удаления записей из связанных таблиц

Наименование

Описание

Cascade

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

Hestrict

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

Ignore

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

Правила для добавления записей применимы со стороны дочерней табли­цы. Их всего два (табл. 12.9).

Таблица 12.9

Правила добавления записей

Наименование

Описание

Restrict

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

Ignore

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

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

При формировании правил ссылочной целостности (рис. 12.6) мы рассуж­дали следующим образом.

  1. Изменение значений ключевых полей родительских таблиц. Таблица Т_Ргер является дочерней по отношению к таблицам TDolgn иTStag, в свою очередь, для нее дочерней является таблицаT Zagr. Не будем исключать возможность изменения названия должности или фамилии преподавателя. Соответствующие поля являются ключевыми. При не­обходимости такие изменения необходимо произвести в родительских таблицах соответственно: должность в —T Dolgn, а фамилию в — Т Ргер. В этом случае они синхронно (каскадно) изменятся в дочерних таблицах. Запретим изменения значений ключевого поляstag (стаж) в родительской таблицеT_Stag.

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

  3. Изменение (добавление) записей в дочерней таблице. Запретим ввод записей в дочерние таблицы, не соответствующие одной из записей в родительской таблице.

Проверим средства обеспечения ссылочной целостности в дейст вии.

Откроем БД Bdu с помощью командыFile |Open (файл | открыть) систем­ного менюVisual FoxPro (если она закрыта). В появившемся окне Конструк­тора БД откроем для просмотра таблицу Тprep. Для этого установим курсор на эту таблицу и, вызвав всплывающее меню, зададим командуBrowse (про­смотр).

Выполним изменение, например, название должности (преп на ст. преп.) сначала в дочерней, а затем в родительской таблице. Изменения будут видны только после обновления изображения таблиць. (закрытия и повторного от­крытия таблицы).

Замечание.

При необходимости произвести добавление или изменение защищенных данных (режим Restrict) нужно снять защиту и после выполнения требуе­мых действий повторно установить защиту.