Создание постоянных отношений

Отношения (Relation) могут быть временными и постоянными. Вся разница состоит во времени “жизни” и способа их создания.

Временные отношения создаются командой SET RELATION (имеющей много дополнительных параметров) и существуют только в текущем сеансе Visual FoxPro. После завершения работы созданные таким образом отношения “приказывают долго жить”. Такого же результата можно добиться, введя команду SET RELATION без параметров.

Постоянные же отношения создаются в конструкторе базы данных и сохраняются после сеанса работы.

Для создания отношений между таблицами (а говоря проще, для того чтобы связать их) необходимо, чтобы таблицы были соответствующим образом проиндексированы. Это, как ты уже догадался, обязательное условие! Также нужно соблюдать еще одно правило: таблица, с которой начинаем установку отношений, должна иметь индекс типа Primary или candidate, потому что никак не получится создать отношение, начав с регулярного индекса.

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

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

Таблица countries является родительской таблицей (parent table) по отношению к таблице cities, которая, в свою очередь, является дочерней (child table) по отношению к таблице countries. Но таблица cities является одновременно и родительской по отношению к таблице streets. Сложно? А ты как думал! Здесь только три таблицы, а если бы их было сто тридцать три, знаешь, какое можно “генеалогическое дерево” нарисовать!

Итак, шутки в сторону, что мы имеем? Таблицы связаны, связи отображаются линиями, заканчивающимися тремя штрихами. Эти штрихи показывают, что в данном случае имеет место связь “один-ко-многим” (one-to-many).

Что же будет происходить, когда мы начнем перемещаться по записям таблицы countries? При этом “на другой стороне” отношения, в таблице городов cities, будут отображаться только те города, которые относятся к стране, выбранной в таблице countries. А это и определяется значением индекса idcountry. Так как в любой стране имеется как минимум два города, в данном случае применяется именно отношение “один-ко-многим”.

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

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

Ну вот, все готово и можно с удовлетворением вздохнуть. Ан нет, не все спокойно в мире! Попробуй, измени значение поля idcountry для какой-нибудь записи в таблице countries (теоретически, записей пока нет). Что же тогда произойдет с записями в связанной с ней таблицей cities? В физическом смысле — ничего с ними не случится, а вот что касается отношений — здесь нас поджидает неприятность — Лис просто не найдет эти записи.

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

Для этой цели в Visual FoxPro имеется инструмент, называемый Referential Integrity Builder (Построитель ссылочной целостности).

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100