- •5 Работа в системе visual foxpro
- •5.1 Базовые концепции Visual FoxPro
- •5.1.1 Общая характеристика субд
- •5.1.2 Элементы проекта
- •5.1.3 ИнтерфейсVisualFoxProи создание проекта
- •5.1.4 Принципы создания проекта и его основных компонентов
- •5.1.5 Создание базы данных, таблиц и индексов
- •5.1.5.1 Создание базы данных
- •5.1.5.2 Создание таблиц
- •5.1.5.3 Типы данных вVisualFoxPro
- •5.1.5.4Создание индексов вVisualFoxPro
- •5.1.6 Организация межтабличных связей
- •5.1.7 Обеспечение целостности данных
- •5.2 Извлечение и представление информации средствами интерфейсаVisualFoxPro
- •5.2.1 Средства формирования запросов
- •5.2.2 Организация многотабличных запросов и вычисляемого поля
- •5.2.3 Представление результатов запросов
- •Основы программирования вVisualFoxPro
- •5.3.1 Общие положения и соглашения о синтаксисе команд
- •5.3.2 Разновидности, объявление, инициализация и отображение переменных и массивов
- •5.3.3 Взаимодействие программ вVisualFoxPro
- •5.3.4 Команды структурного программирования
- •5.3.5 Команды обработки особых ситуаций
- •5.3.6 Команды установки программной среды
- •5.3.7 Некоторые важные функции языкаVisualFoxPro
- •5.3.8 Визуальное объектно-ориентированное программирование в Visual FoxPro
- •5.3.8.1 Базовые понятия
- •5.3.8.2 Создание объектов на основе базовых классов и задание свойств объектов
- •5.3.8.3 Определение событий и методов для объектов класса
- •5.3.8.4 Вложенность объектов
- •5.3.9 Команды для работы с меню
- •5.3.10 Пример совместного использование программных файлов, формы и меню
5.1.6 Организация межтабличных связей
Отношения между таблицами можно задать путем установления постоянных или временных связей между полями таблиц. Межтабличные связи необходимы прежде всего для поддержания целостности БД. Устойчивые связи между полями различных таблиц позволяют работать с несколькими таблицами синхронно. Это значит, что при перемещении указателя во время поиска информации в одной таблице он синхронно перемещается в другой и устанавливается определенным образом в каждой из таблиц. Таким образом, выбирая запись из одной таблицы, мы можем одновременно выбрать согласованную с ней запись из другой.
Постоянные связи можно установить в Конструкторе БД. Временные связи между таблицами могут устанавливаться при создании экранных форм (для ввода и редактирования данных) и отчетов. Обычно это делается в случаях, когда имеющиеся постоянные связи по каким-либо причинам не подходят для создаваемой формы или отчета.
При определении связей одна из таблиц является родительской, а другая – дочерней. Для родительской таблицы должен быть определен первичный ключ или ключ-кандидат, а для дочерней – индекс для связи с родительской таблицей (внешний ключ).
Для установления связей нужно:
Выбрать родительскую таблицу.
Установить курсор мыши на первичный ключ таблицы.
Нажимая и удерживая кнопку мыши, перетащить курсор на индекс дочерней таблицы, по которому устанавливается связь; отпустить кнопку мыши.
Появится диалоговое окно Edit Relationship, в котором слева приведены наименование и список индексов родительской таблицы, а справа – то же для дочерней таблицы. В списках уже выбраны индексы, по которым должна осуществляться связь. Здесь же указывается тип отношений между таблицами «один к одному» или «один ко многим». Для сохранения отношения - кнопка ОК, для отказа - Cancel (отмена).
В окне конструктора БД линии связи показывают отношение между таблицами (рис. 5.12).
Для удаления отношения следует щелкнуть правой кнопкой по линии связи: она утолщится и появится контекстное меню. В меню выбрать команду Remove Relationship, и описание отношения будет удалено из словаря базы данных.
Рис. 5.12. Отображение связей между таблицами
5.1.7 Обеспечение целостности данных
Установленные отношения между таблицами могут быть использованы для заданий условий целостности данных. Целостность – это взаимная увязка и непротиворечивость информации в полях таблиц базы данных.
Для определения условия целостности данных следует щелкнуть правой кнопкой в диалоговом окне конструктора базы данных и выбрать команду контекстного меню Edit Referential Integrity или соответствующую ей кнопку на панели инструментов Database Designer. Откроется диалоговое окно конструктора условий целостности данных Referential Integrity Builder, которое содержит перечень всех установленных отношений между таблицами. Здесь имеются наименования родительской и дочерней таблицы, имена индексов, используемых для связи, а также типы действий, выполняемых при модификации данных, добавлении и удалении записей.
В нижней части диалогового окна отображается краткая справка о возможном выборе действий и два переключателя для установки типа выполняемого действия. Тип действия можно выбрать из списка в полях Update, Delete, Insert.
Рассмотрим варианты действий:
при изменении значения первичного ключа или ключа-кандидата в родительской таблице (табл. 5.5);
при удалении записи в родительской таблице (табл. 5.6);
при добавлении новой записи в дочернюю таблицу или редактировании в ней имеющейся записи (табл. 5.7).
После завершения определения условий целостности данных следует нажать ОК. В результате вся введенная информация будет сохранена в словаре базы данных. Теперь независимо от приложений при изменении, добавлении и удалении записей будут выполняться указанные действия, обеспечивающие целостность данных.
Таблица 5.5
Тип |
Описание |
Cascade |
Автоматом осуществляется каскадное изменение всех соответствующих значений в дочерней таблице. |
Restrict |
Не позволяет изменять значения полей первичного ключа или ключа-кандидата в родительской таблице, если в дочерней таблице есть хотя бы одна запись, содержащая ссылку на изменяемую запись. |
Ignore |
Позволяет изменять значения полей первичного ключа или ключа-кандидата в родительской таблице, независимо от существования связанных записей в дочерней таблице. Целостность данных при этом не поддерживается. |
Таблица 5.6
Тип |
Описание |
Cascade |
Автоматом удаляются каскадно все записи дочерней таблицы, связанные с основной удаляемой записью. |
Restrict |
Не позволяет удалять записи в родительской таблице, если в дочерней таблице есть хотя бы одна запись, содержащая ссылку на удаляемую запись. При попытке удаления возникает ошибка, которую можно обработать программно. |
Ignore |
Позволяет удалять любые записи в родительской таблице, независимо от связанных записей из дочерней таблицы. Целостность данных при этом не поддерживается. |
Таблица 5.7
Тип |
Описание |
Restrict |
Не позволяет вводить запись, если значение индексного выражения дочерней таблицы не соответствует одной из записей в родительской таблице. |
Ignore |
При вводе и изменении данных в дочерней таблице индексное выражение не инициализируется. |