
- •Индексирование баз данных и организация связей в Visual FoxPro
- •"Автоматизированные базы данных"
- •Цель работы
- •Индексирование баз данных
- •2.1. Понятие индекса
- •Создание простых и составных индексов
- •2.3. Активизация и деактивизация индексов
- •Организация связей в Visual FoxPro
- •3. 1. Понятие отношений в бд
- •3.2. Организация связей в Visual FoxPro
- •3. 3. Поддержание целостности данных
- •Порядок выполнения работы
- •Контрольные задания
- •Контрольные вопросы
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.
Для изменения типа отношений между парой таблиц необходимо:
Установить курсор мыши на линию, соединяющую таблицы, и жважды нажать курсор мыши;
В открывшемся окне Edit Relationship установить требуемый тип отношений между родительской и дочерней таблицей;
Нажать ОК – для сохранеия отношения, либо Cansel - для отказа от него.
Р
ис.
2. Связанные
таблицы в Конструкторе БД
Для удаления установленной связи щелкнете на линии мышкой и нажмите клавишу Del, либо установить курсор на удаляемую линию и нажать правую кнопку мыши; в появившемся контекстном меню выбрать команду Remove Relationship.
Изображения таблиц в окне Конструктора БД мы можем легко перемещать, изменять их размеры для наиболее удобной работы или вообще свернуть до размера заголовка. Для выполнения последней операции и ее отмены нам помогут команды Collapse и Expand в контекстном меню, появляющемся после щелчка правой кнопки мыши.
3. 3. Поддержание целостности данных
Возможность поддержки целостности данных необходима, если наша система включает несколько связанных друг с другом таблиц. Представим простейшую ситуацию, когда в системе начисления заработной платы мы удаляем из справочника работников запись, имеющую отношение к уволенному сотруднику. Тогда во всех остальных таблицах, в которых была ссылка на эту удаленную запись, данные как бы зависнут в воздухе. При составлении любого отчета они останутся невостребованными, и баланс не сойдется. Очевидно, что удалить запись можно только тогда, когда в системе не будет на нее ссылки из других таблиц.
В Visual FoxPro мы можем предотвращать такие ситуации, воспользовавшись специальным инструментом, Построителем целостности данных (Referential Integrity Builder).
Откроем Конструктор БД и в меню Database выберем команду Referential Integrity. Появиться окно Построителя целостности данных, приведенное на рис.3.
Р
ис.
3. Построитель
целостности в БД
С помощью имеющихся в нем средств мы можем установить один из стандартных наборов правил для поддержания целостности нашей системы данных. Для каждого отношения в БД мы можем выбрать:
Для изменения записей (Rules for Updating):
Cascade – вначале требуется изменить все соответствующие записи в дочерней таблице, после чего будет записано новое ключевое значение.
Restrict – запрет на изменение, если есть зависимые записи в дочерней таблице.
Ignore – разрешить изменение и допустить появление несвязанных дочерних записей.
Для удаления записей (Rules for Deleting):
Cascade – удаление всех дочерних записей, определяемых по связанному полю, перед удалением записи из родительской таблицы.
Restrict – запрет на удаление, если есть зависимые записи в дочерней таблице.
Ignore – разрешить удаление, дочерние записи остаются несвязанными.
Для добавления записей (Rules for Inserting):
Restrict – запрет на добавление записи, если в ключевом поле родительской таблицы отсутствует подходящая запись.
Ignore – разрешить добавление.
Сделанный выбор используется для создания кода триггеров, которые размещаются в хранимой процедуре БД. Созданный код можно посмотреть, если на вкладке Date раскрыть содержание заголовка Stored Procedures.
Триггер – это специальный механизм, существующий в Visual FoxPro, который позволяет реализовать ограничение целостности, имеющие отношение к записям, таблицам или связям между ними. Триггер выполняется в зависимости от выполняемых действий с таблицей. Основная сфера использования триггеров это:
учет изменений, выполняемых с данными;
поддержание целостности данных;
выполнение функционально необходимых действий, связанных с величиной заносимой в таблицу.