Хомоненко А.Д., Цыганков В.М., Мальцев М.Г. - Базы данных. Учебник для высших учебных заведений (6-е изд.) - 2009 (1084484), страница 96
Текст из файла (страница 96)
Межтабличные связи БД BdutJ12. СУБД Visual FoxPro 8.0457Для установления постоянной связи между родительской и дочерней таблицей необходимо:• установить указатель мыши на первичный ключ родительской таблицы;• нажав левую кнопку мыши, переместить указатель на индекс дочернейтаблицы, по которому устанавливается связь;• отпустить кнопку.На экране появится диалоговое окно Edit Relationship (правка связей),содержащее имена связываемых таблиц с раскрывающимися списками индексов.
В списках уже выбраны индексы, по которым должна осуществляться связь. Здесь же указывается тип связи между таблицами «один к одному»или «один ко многим». Для сохранения связи нажмем ОК, а при отказе —Cancel (отмена).Для удаления межтабличной связи требуется выполнить следующее:• навести указатель мыши на линию связи таблиц;• нажать правую кнопку мыши, что приведет к утолщению линии и появлению всплывающего меню;• выполнить команду Remove Relationship (удалить связь) всплывающего меню.В результате выделенная связь будет удалена. Напомним, что установленные постоянные связи между таблицами используются прежде всего для обеспечения ссылочной целостности (непротиворечивости) БД при обновленииее содержимого. Для снижения возможных потерь данных рекомендуетсясначала устанавливать правила ссылочной целостности, а затем вводить данные в таблицы.12.9.
Обеспечение ссылочной целостностиОбеспечение ссылочной целостности означает определение допустимыхопераций над связанными между собой таблицами. Главное требование ссылочной целостности заключается в том, чтобы записи дочерних таблиц имели ссылки на записи в родительской таблице (дети должны иметь родителей). В родительской таблице могут быть записи, не имеющие связанных сними записей в дочерних таблицах (может быть семья без детей). В VisualFoxPro поддержка ссылочной целостности выполняется с помощью одноименного Построителя.
Чтобы открыть Построитель ссылочной целостности, достаточно выполнить следующее:• открыть БД с таблицами, для которых необходимо установить ссылочную целостность;• в контекстном меню Конструктора БД задать команду ReferentialIntegrity (ссылочная целостность), что и приведет к открытию окнаПостроителя ссылочной целостности данных (рис.
12.6).Часть 3. Современные458СУБД и ихприменениеR e f e r e n t i a l Integrity BuilderRules for Updating | Rules for DeletingRules for Inserting jWhich rule do you want to apply when a new record is inserted or an existing record isupdated in the child table?С Restrict: prohibits the insert if a matching key value does not exist in the parent table,ignore: allows the insert.Parent Tablet_dolgnt_prep* t_stagChild Tablet_prept_zagrt_prepUpdateCascadeCascadeRestrictDeleteRestrictRestrictIgnoreInsertRestrictRestrictШ Я ЕParent Tagi_dolgni_fioi_stagChild Tagi_dolgni fioi_stag•HelpOKCancelРис. 12.6. Диалоговое окно Referential Integrity BuilderВ окне Построителя перечислены все постоянные связи между таблицамиБД Bdu. Информация по каждой связи размещена в отдельной строке.
Первыедва столбца содержат имена родительских и дочерних таблиц. Следующие тристолбца содержат правила поддержания ссылочной целостности в случае редактирования, удаления и добавления записей соответственно. Изначально всеправила содержат Ignore, но они определяются для каждой связи и каждой изтрех перечисленных операций. Последние два столбца содержат индексы (теги)родительской и дочерней таблиц, по которым осуществляется связь.В диалоговом окне Построителя ссылочной целостности коррективам могут быть подвергнуты только столбцы с правилами. Наша задача — для каждой связи (пары родительской и дочерней таблицы) определить правила поддержания ссылочной целостности при выполнении каждой из трех возможныхопераций с данными этих таблиц (редактирования, добавления и удаления).Этот выбор можно осуществить двумя способами:• при выборе поля одного из столбцов с правилами Update (обновить),Delete (удалить) и Insert (вставить) появляется кнопка, нажатие которой приводит к появлению списка возможных правил;• при выборе одной из вкладок Rules for Updating (правила обновления), Rules for Deleting (правила удаления), Rules for Inserting (правила вставки) в верхней части таблицы появляются переключатели скомментариями для каждого из правил.Например, при выборе вкладки Rules for Updating (правила обновления)выбираются правила, связанные с изменениями значения первичного ключа12.
СУБД Visual FoxPro 8.0459или ключа-кандидата в родительской таблице. При этом возможен выбор одного из трех правил, приведенных в табл. 12.7.Т а б л и ц а 12.7Правила изменения значений первичного ключаНаименованиеОписаниеCascadeП р и и з м е н е н и и з н а ч е н и й полей первичного ключа или ключакандидата в родительской таблице автоматическиосуществляется и з м е н е н и е всех соответствующих значений вдочерней таблице — каскадное изменение.RestrictЗ а п р е щ а е т с я и з м е н е н и е п е р в и ч н о г о ключа или к л ю ч а - к а н д и д а т ав родительской таблице, если в д о ч е р н е й таблице и м е е т с я хотябы о д н а з а п и с ь , в н е ш н и й к л ю ч к о т о р о й с о д е р ж и т и з м е н я е м о езначение.IgnoreДопускается произвольное изменение значений полейпервичного ключа или ключа-кандидата родительской таблицы.Целостность данных не поддерживается.Выбор любого из правил осуществляется установкой соответствующегопереключателя.
Выбранное правило отображается в соответствующей строке столбца Update (обновить).При удалении записей из связанных таблиц (вкладка Rules for Deleting —правила удаления) требуется использование также трех правил (табл. 12.8).Таблица 12.8Правила удаления записей из связанных таблицОписаниеНаименованиеCascadeУдалениеприводиттаблицы,внешнегозаписей в родительской таблице автоматическик каскадному удалению всех записей дочернейимеющих аналогичные значения соответствующегоключа.RestrictЗ а п р е щ а е т с я удаление записи в родительской таблице, если вд о ч е р н е й т а б л и ц е и м е е т с я х о т я бы о д н а з а п и с ь , в н е ш н и й ключкоторой содержит значение, совпадающее со значениемпервичного ключа или ключа-кандидата в удаляемой записи.
Припопытке удаления записи выдается с о о б щ е н и е об ошибке,которую можно обработать программно.IgnoreДопускается неограниченное удаление записей родительскойтаблицы. Целостность данных не поддерживается.Часть 3. Современные СУБД и их применение460Правила для добавления записей применимы со стороны дочерней таблицы. Их всего два (табл. 12.9).Т а б л и ц а 12.9Правила добавления записейНаименованиеОписаниеRestrictЗапрещается добавление записи к дочерней таблице, если вродительской таблице отсутствует запись, значение первичногоключа или к л ю ч а - к а н д и д а т а к о т о р о й н е с о в п а д а е т со з н а ч е н и е мвнешнего ключа добавляемой записи.IgnoreДопускается неограниченное добавление записей в дочернюютаблицу.
Целостность данных не поддерживается.По окончании выбора правил выйдем из Построителя, нажав ОК. Привыходе появляется запрос подтверждения сделанных изменений. В случаеподтверждения в БД создается ряд хранимых процедур и триггеров. Если такие процедуры и триггеры уже существуют, то перед их перезаписью создается резервная копия. Теперь все наши требования по обеспечению ссылочнойцелостности данных сохраняются в словаре БД и реализуются при работе сней.При формировании правил ссылочной целостности (рис. 12.6) мы рассуждали следующим образом:1. Изменение значений ключевых полей родительских таблиц. ТаблицаТ Р г е р является дочерней по отношению к таблицам T D o l g n и T_Stag,в свою очередь, для нее дочерней является таблица T Z a g r . Не будемисключать возможность изменения названия должности или фамилиипреподавателя.
Соответствующие поля являются ключевыми. При необходимости такие изменения необходимо произвести в родительскихтаблицах соответственно: должность в — T_Dolgn, а фамилию в —Т Ргер. В этом случае они синхронно (каскадно) изменятся в дочернихтаблицах. Запретим изменения значений ключевого поля stag (стаж) вродительской таблице T Stag.2. Удаление записей в родительских таблицах. Запретим удаление записей в родительских таблицах, имеющих в дочерних таблицах записи ссовпадающими значениями внешних ключевых полей.3. Изменение (добавление) записей в дочерней таблице. Запретим вводзаписей в дочерние таблицы, не соответствующие одной из записей вродительской таблице.Проверим средства обеспечения ссылочной целостности в действии.12.
СУБД Visual FoxPro 8.0461Откроем БД Bdu с помощью команды File | Open (файл | открыть) системного меню Visual FoxPro (если она закрыта). В появившемся окне Конструктора БД откроем для просмотра таблицу Т_ргер. Для этого установим курсорна эту таблицу и, вызвав всплывающее меню, зададим команду Browse (просмотр).Выполним изменение, например, название должности (преп па сг. преп.)сначала в дочерней, а затем в родительской таблице. Изменения будут виднытолько после обновления изображения таблицы (закрытия и повторного открытия таблицы).Замечание.При необходимости произвести добавление или изменение защищенныхданных (режим Restrict) нужно снять защиту и после выполнения требуемых действий повторно установить защиту.12.10.
Создание запросовПосле создания таблиц БД и ввода в них данных требуется организоватьдоступ к хранящейся в БД информации для просмотра и обработки. Одним изосновных способов решения названной задачи является создание запросов.СредстваформированиязапросовВыборка информации из БД может осуществляться: с помощью командыSELECT SQL языка Visual FoxPro, которая является аналогом соответствующей команды языка SQL; с помощью Мастера запросов и с помощью Конструктора запроса.Команда SELECT имеет множество возможностей (опций).