Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка№2 15.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
1.52 Mб
Скачать

3.2. Организация связей в Visual FoxPro

После анализа структуры БД и установления типа отношений между таблицами необходимо установить эти связи в Visual FoxPro.Свяжем таблицы DoctorTab, PatientTab с таблицей VisitTab для того, чтобы знать пациентов, посещающих того или иного врача. В таблицах DoctorTab и PatientTab для идентификации врачей и пациентов используются коды, которые имеют уникальные значения и не должны повторяться. Такие же коды используются в таблице VisitTab.

Убедитесь в том, что по полям ID_doc и ID_Pat созданы первичные индексы для таблиц DoctorTab и PatientTab соответственно. Если это не так, создайте эти индексы в Конструкторе таблиц. Если вы посмотрите на таблицы DoctorTab и PatientTab в Конструкторе БД, то увидите, что внизу списка полей прибавилась часть под названием Indexes, и в этой части списка появилось название нового индекса с изображением ключика слева, что свидетельствует о том, что данный индекс является первичным. В таблице VisitTab создадим два регулярных (обычных) индекса по полям ID_doc и ID_pat. Для создания связей между таблицами в Конструкторе БД нажмем кнопку мыши на первичном индексе ID_doc таблицы DoctorTab и, не отпуская ее, переместим указа­тель мыши на индекс ID_doc таблицы VisitTab. В окне Конструктора БД мы увидим созданную связь визуально. Точно так же надо связать таблицу PatientTab с таблицей VisitTab. Установленные после этого связи хорошо видны на рис. 2. Аналогично можно установить связи в базе данных аэропорта, результат работы представлен на рис. 3.

Для изменения типа отношений между парой таблиц необходимо:

  1. Установить курсор мыши на линию, соединяющую таблицы, и жважды нажать курсор мыши;

  2. В открывшемся окне Edit Relationship установить требуемый тип отношений между родительской и дочерней таблицей;

  3. Нажать ОК – для сохранеия отношения, либо Cansel - для отказа от него.

Р ис. 2. Связанные таблицы в Конструкторе БД

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

Изображения таблиц в окне Конструктора БД мы можем легко перемещать, изменять их размеры для наиболее удобной работы или вообще свернуть до размера заголовка. Для выполнения последней операции и ее отмены нам помогут команды Collapse и Expand в контекстном меню, появляющемся после щелчка правой кнопки мыши.

3. 3. Поддержание целостности данных

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

В Visual FoxPro мы можем предотвращать такие ситуации, воспользовавшись специальным инструментом, Построителем целостности данных (Referential Integrity Builder).

Откроем Конструктор БД и в меню Database выберем команду Referential Integrity. Появиться окно Построителя целостности данных, приведенное на рис.3.

Р ис. 3. Построитель целостности в БД

С помощью имеющихся в нем средств мы можем установить один из стандартных наборов правил для поддержания целостности нашей системы данных. Для каждого отношения в БД мы можем выбрать:

  1. Для изменения записей (Rules for Updating):

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

  • Restrict – запрет на изменение, если есть зависимые записи в дочерней таблице.

  • Ignore – разрешить изменение и допустить появление несвязанных дочерних записей.

  1. Для удаления записей (Rules for Deleting):

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

  • Restrict – запрет на удаление, если есть зависимые записи в дочерней таблице.

  • Ignore – разрешить удаление, дочерние записи остаются несвязанными.

  1. Для добавления записей (Rules for Inserting):

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

  • Ignore – разрешить добавление.

Сделанный выбор используется для создания кода триггеров, которые размещаются в хранимой процедуре БД. Созданный код можно посмотреть, если на вкладке Date раскрыть содержание заголовка Stored Procedures.

Триггер – это специальный механизм, существующий в Visual FoxPro, который позволяет реализовать ограничение целостности, имеющие отношение к записям, таблицам или связям между ними. Триггер выполняется в зависимости от выполняемых действий с таблицей. Основная сфера использования триггеров это:

  • учет изменений, выполняемых с данными;

  • поддержание целостности данных;

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