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

Создание связей между таблицами

Подведем итоги. База данных имеется. Таблицы доведены до третьей нормальной формы и помещены в базу. Первичный ключ есть у каждой таблицы. Индексы созданы. Типы связей между таблицами определены. Настало время создания связей между таблицами непосредственно в базе данных. Связи между таблицами назначают и просматривают в окне базы данных (рис. 2.1). Открыть его можно следующим образом. В главном меню Visual FoxPro щелкните пункт File и выберите команду Open. В открывшемся окне в ячейке Тип файлов выберите пункт Database (*.dbc). Перейдите в папку DBF. Выберите нашу базу данных Real Estate.dbc Обязательно поставьте флажок 0 в ячейке Open exclusive. Если этого не сделать, то вам будут доступны не все опции по работе с базой данных.

Из двух связанных таблиц одна является главной (родительской), а другая подчиненной (дочерней). Для главной таблицы нужен индекс Primary (в окне базы данных он отмечен значком ? и его имя выделено жирным шрифтом), а для подчиненной - Regular.

Установим связь между таблицами District (главная) и Building (подчиненная). Поместите указатель мыши на первичный ключ главной таблицы District. Нажмите левую кнопку мыши и, не отпуская ее, «перетащите» появившийся символ перечеркнутой окружности на обычный индекс District таблицы Building. Значок перечеркнутой окружности превратится в маленький прямоугольник с надписью внутри. Отпустите левую кнопку мыши. Связь установлена. Имейте ввиду, что попытка проделать эти действия, начиная с подчиненной таблицы Building, закончится неудачей. Значок перечеркнутой окружности никогда не превратится в прямоугольник с надписью.

Обеспечение ссылочной целостности данных

Вернемся к рис. 2.1. Важной особенностью Microsoft Visual FoxPro является автоматическое обеспечение ссылочной целостности данных. Если на связь между таблицами наложены условия ссылочной целостности, то добавление в связанную таблицу записи, для которой нет соответствующих записей в главной таблице, становится невозможным.

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

Несколько дополнительных возможностей. Откройте окно базы данных. В главном меню Visual FoxPro щелкните пункт File и выберите команду Open. В открывшемся окне в ячейке Тип файлов выберите пункт Database (*.dbc). Перейдите в папку DBF. Выберите нашу базу данных Real Es-tate.dbc. Обязательно поставьте флажок 0 в ячейке Open exclusive. Если этого не сделать, то вам будут недоступны опции по работе с базой данных, которые мы сейчас рассмотрим. Щелкните по кнопке OK. Появится окно базы данных. В главном меню Visual FoxPro выберите пункт Database, а в открывшемся подменю пункт Edit Referential Integrity. Появится окно конструктора ссылочной целостности (рис. 1.16).

Рис. 1.16. Конструктор ссылочной целостности базы данных

В нижней части конструктора перечислены все связи между таблицами (каждая на отдельной строке). В первых двух столбцах приводятся назва­ния родительской и дочерней таблиц. В следующих трех - Update (Обновить), Delete (Удалить) и Insert (Вставить) - указаны правила соблюдения целостности. В начале работы все эти три столбца содержат элемент Ignore (Игнорировать). Однако вы можете сами определить правила пове­дения для каждой связи и выполняемого действия. Наконец, в последних двух столбцах определены родительский и дочерний индексы, участвующие в отношении.

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

Для каждого действия (обновления, удаления и вставки) отведена отдельная вкладка, на которой перечислены доступные варианты поведения. При обновлении ключевого значения в родительской таблице можно применить следующие правила поведения.

Cascade (Последовательно выполнить). При выборе этой опции обновляются все «дочерние» записи в соответствии с новым значением ключа в родительской таблице, если у них совпадало старое значение «родительского» ключа.

Restrict (Ограничить). Если в дочерней таблице есть связанные записи (т. е. существуют записи с текущим значением родительского ключа), то FoxPro запрещает обновление родительского ключа.

Ignore (Игнорировать). При выборе этой опции система прекращает следить за соблюдением правил ссылочной целостности и разрешает обновление родительского ключа независимо от наличия связанных записей в дочерних таблицах.

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

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

Restrict. Запрещается вставка дочерней записи, если нет родительской записи с таким же значением ключа.

Ignore. He выполняется никаких проверок в целях сохранения ссылочной целостности, т.е. вставка заведомо разрешается.

Определив правила ссылочной целостности для каждой связи между таблицами и действия, щелкните на кнопке ОК, чтобы выйти из конструктора. Что касается нашего примера, то, скорее всего, нам стоит разрешить последовательное выполнение обновлений ключа в таблице Flat после того, как он обновится в таблице Building. С другой стороны, сле­дует запретить удаление записей таблицы Building, если существуют связанные записи в таблице Flat. И наконец, имеет смысл запретить вставку записи в таблицу Flat, если в таблице Building нет записи с таким же значением ключа.

При щелчке на кнопке ОК отображается диалоговое окно с вопросом о сохранении внесенных изменений и генерируется код ссылочной целостности, после чего построитель завершает свою работу. При этом в базе данных создается набор триггеров и хранимых процедур. Если в базе данных ранее были определены триггеры или хранимые процедуры, то перед их перезаписью создается резервная копия. Она помещается в файл Risp.old в текущую папку. Хранимые процедуры, созданные ранее для других целей (например, для соблюдения правил контроля данных), придется вручную скопировать из резервной копии.

После того как построитель ссылочной целостности завершит свою работу, можно открыть окно Table Designer (рис. 1.14) и выбрать в нем третью вкладку Table, чтобы просмотреть добавленные триггеры. В качестве альтернативного варианта можно просмотреть хранимые процедуры, щелкнув на кнопке Edit Stored Procedure (Редактировать хранимую процедуру), расположенной на панели инструментов Database Designer в окне конструктора баз данных. Приведем текст хранимой в базе данных процедуры _ri_update_flat(). Она будет запущена на выполнение автоматиче­ски при изменении значения первичного ключа.