Основы современных компьютерных технологий

Обеспечение ссылочной целостности БД


Понятие ссылочной целостности определяет допустимые операции над связанными между собой таблицами. Главное требование ссылочной целостности заключается в том, чтобы записи дочерних таблиц имели ссылки на записи в родительской таблице (дети должны иметь родителей). В родительской таблице могут быть записи, не имеющие связанных с ними записей в дочерних таблицах (может быть семья без детей). В 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 :: Содержание


    Содержание раздела