Обеспечение ссылочной целостности БД
Понятие ссылочной целостности определяет допустимые операции над связанными между собой таблицами. Главное требование ссылочной целостности заключается в том, чтобы записи дочерних таблиц имели ссылки на записи в родительской таблице (дети должны иметь родителей). В родительской таблице могут быть записи, не имеющие связанных с ними записей в дочерних таблицах (может быть семья без детей). В Visual FoxPro поддержка ссылочной целостности выполняется с помощью одноименного Построителя. Чтобы открыть Построитель ссылочной целостности, достаточно выполнить следующее:
открыть БД с таблицами, для которых необходимо установить ссылочную целостность;
в контекстном меню Конструктора БД задать команду Referential Integrity (ссылочная целостность), что и приведет к открытию окна Построителя ссылочной целостности данных (рис. 21.5).
Рис. 21.5 Диалоговое окно Referential Integrity Builder
В окне Построителя перечислены все постоянные связи между таблицами БД Bdu. Информация но каждой связи размещена в отдельной строке. Первые два столбца содержат имена родительских и дочерних таблиц. Следующие три столбца содержат правила поддержания ссылочной целостности в случае редактирования, удаления и добавления записей соответственно. Изначально все правила содержат Ignore, но они определяются для каждой связи и каждой из трех перечисленных операций. Последние два столбца содержат индексы (теги) родительской и дочерней таблиц, по которым осуществляется связь.
В диалоговом окне Построителя ссылочной целостности коррективам могут быть подвергнуты только столбцы с правилами. Пагпа задача - для каждой связи (пары родительской и дочерней таблицы) определить правила поддержания ссылочной
266
целостноети при выполнении каждой из трех возможных операций с данными этих таблиц (редактирования, добавления и удаления). Этот выбор можно осуществить двумя способами:
при выборе поля одного из столбцов с правилами Update (обновить), Delete (удалить) и Insert (вставить) появляется кнопка, нажатие которой приводит к появлению списка возможных правил;
при выборе одной из вкладок Rules for Updating (правила обновления), Rules for Deleting (правила удаления), Rules for Inserting (правила вставки) в верхней части таблицы появляются переключатели с комментариями для каждого из правил.
Например, при выборе вкладки Rates for Updating (правила обновления) выбираются правила, связанные с изменениями значения первичного ключа или ключа-кандидата в родительской таблице. При этом возможен выбор одного из трех правил, приведенных в табл. 21.6.
Таблица 21.6
Правила изменения значений первичного ключа
Наименование |
Описание |
Cascade |
При изменении значений полей первичного ключа или ключа-кандидата в родительской таблице автоматически осуществляется изменение всех соответствующих значений в дочерней таблице - каскадное изменение. |
Restrict |
Запрещается изменение первичного ключа или ключа-кандидата в родительской таблице, если в дочерней таблице имеется хотя бы одна запись, внешний ключ которой содержит изменяемое значение. |
Ignore |
Допускается произвольное изменение значений полей первичного ключа или ключа-кандидата родительской таблицы. Целостность данных не поддерживается. |
Выбор любого из правил осуществляется установкой соответствующего переключателя. Выбранное правило отображается в соответствующей строке столбца Update (обновить).
При удалении записей из связанных таблиц (вкладка Rules for Deleting - правила удаления) требуется использование также трех правил (табл. 21.7).
Таблица 21.7
Правила удаления записей из связанных таблиц
Наименование |
Описание |
Cascade |
Удаление записей в родительской таблице автоматически приводит к каскадному удалению всех записей дочерней таблицы, имеющих аналогичные значения соответствующего внешнего ключа. |
Restrict |
Запрещается удаление записи в родительской таблице, если в дочерней таблице имеется хотя бы одна запись, внешний ключ которой содержит значение, совпадающее со значением первичного ключа или ключа-кандидата в удаляемой записи. При попытке удаления записи выдается сообщение об ошибке, которую можно обработать программно. |
Ignore |
Допускается неограниченное удаление записей родительской таблицы. Целостность данных не поддерживается. |
<
/p>
Правила для добавления записей применимы со стороны дочерней таблицы. Их всего два (табл. 21.8).
267
Таблица 21.8
Правила добавления записей
Наименование |
Описание |
Restrict |
Запрещается добавление записи к дочерней таблице, если в родительской таблице отсутствуем запись, значение первичного ключа или ключа-кандидата которой не совпадает со значением внешнего ключа добавляемой записи |
Ignore |
Допускается неограниченное добавление записей в дочернюю таблицу. Целостность данных не поддерживается. |
По окончании выбора правил выйдем из Построителя, нажав ОК. При выходе появляется запрос подтверждения сделанных изменений. В случае подтверждения в БД создается ряд хранимых процедур и триггеров. Если такие процедуры и триггеры уже существуют, то перед их перезаписью создается резервная копия. Теперь все наши требования по обеспечению ссылочной целостности данных сохраняются в словаре БД и реализуются при работе с пей.
При формировании правил ссылочной целостности (рис. 21.5) мы рассуждали следующим образом:
Изменение значений ключевых полей родительских таблиц. Таблица Т_Ргер является дочерней по отношению к таблицам T_Dolgn и T_Stag; в свою очередь, для нее дочерней является таблица T_Zagr. He будем исключать возможность изменения названия должности или фамилии преподавателя. Соответствующие поля являются ключевыми. При необходимости такие изменения необходимо произвести в родительских таблицах соответственно: должность - в T_Dolgn, а фамилию -в Т_Ргер. В этом случае они синхронно (каскадом) изменятся в дочерних таблицах. Запретим изменения значений ключевого поля Stag (стаж) в родительской таблице T_Stag.
Удаление записей в родительских таблицах. Запретим удаление записей в родительских таблицах, имеющих в дочерних таблицах записи с совпадающими значениями внешних ключевых полей.
Изменение (добавление) записей в дочерней таблице. Запретим ввод записей в дочерние таблицы, не соответствующие одной из записей в родительской таблице.
Проверим средства обеспечения ссылочной целостности в действии.
Откроем БД Bdu с помощью команды File Open (файл \ открыть) системного меню Visual FoxPro (если она закрыта). В появившемся окне Конструктора БД откроем для просмотра таблицу Т_ргер. Для этого установим курсор на эту таблицу и, вызвав всплывающее меню, зададим команду Browse (просмотр).
Выполним изменения, например, название должности (преп на ст. преп.) сначала в дочерней, а затем в родительской таблице. Изменения будут видны только после обновления изображения таблицы (закрытия и повторного открытия таблицы).
Замечание. При необходимости произвести добавление или изменение защищенных данных (режим Restrict) нужно снять защиту и после выполнения требуемых действий повторно установить защиту.
После создания таблиц БД и ввода в них данных требуется организовать доступ к хранящейся в БД информации для просмотра и обработки. Одним из основных способов решения названной задачи является создание запросов.
268
266 :: 267 :: 268 :: Содержание
Содержание раздела