Связывание таблиц

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

Возможность связи между таблицами для проверки целостности информации в базе данных будет рассмотрена в разделе «Контроль целостности базыданных».

Попробуем разобраться с возможностью связывать таблицы так, чтобы приперемещении указателя по записям одной таблицы указатель в другой таблице(или нескольких таблицах) автоматически перемещался на соответствующиезаписи. Например, в одной таблице хранятся фамилии работников и номерасмен, в которые эти люди должны выходить на текущей неделе, а в другой таблице хранятся номера смен и соответствующие им периоды рабочего времени(табл. 2.5 и 2.6). Если мы свяжем эти две таблицы по полю «Смена», при переходе от одной записи к другой в таблице с фамилиями работников (например, припросмотре по команде BROWSE) указатель в таблице с периодами рабочего времени тоже будет перемещаться на записи с номерами смены, соответствующиминомерам смены в таблице с фамилиями работников. Мы делаем текущей в таблице с фамилиями работников запись о Васечкине А.Н., в таблице с периодамирабочего времени автоматически станет текущей запись о второй смене с диапазоном рабочего времени 9:00-18:00. Как же установить связь между таблицами?

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



>    <Выражение1> - поле главной таблицы или действие над полями главнойтаблицы, соответствующее индексному выражению в таблице, с которойсвязывается главная таблица;

>    <Рабочая_область1> | <Имя_таблицы1> - указывается либо номер (илиимя) рабочей области, либо имя таблицы, с которой устанавливаетсясвязь;

>    <Выражение2> INTO <Рабочая_область2>|<Имя_таблицы2>...-если таблиц, с которыми вы хотите связать главную таблицу, несколько, соответствующие индексные выражения и имена таблиц или номера рабочихобластей перечисляются через запятую (между каждым выражением иименем таблицы ставится ключевое слово INTO);

>    IN <Ра6очая_о6ласть> | <Имя_та6лицы> - указывается либо номер (илиимя) рабочей области, либо имя таблицы, которая является главной, еслиона не является текущей (расположена не в текущей рабочей области);

> ADDITIVE - при создании новой сохраняет все существующие связи главной таблицы (если не указывать этот параметр, все существовавшие доэтого момента связи главной таблицы будут разорваны).

Если требуется разорвать связь текущей таблицы со всеми таблицами, можно воспользоваться командой SET RELATION ТО без параметров. Если же необходимо разорвать соединение текущей таблицы с конкретной таблицей, следует использовать команду SET RELATION OFF.

<Рабочая_область> | <Имя_таблицы> - указывается либо номер (или имя)рабочей области, либо имя таблицы, с которой требуется разорвать связь.

Установленные связи таблиц довольно удобно наблюдать в окне Data Session(Сессия работы с данными), вызываемом с помощью последовательности команд Window > Data Session (Окно > Сессия работы с данными) или посредством щелчка по кнопкена стандартной панели инструментов. Связь междутаблицами отображается в поле Relations (Связи), как это показано на рис. 2.23,

Попробуем попрактиковаться в связывании таблиц на примере созданныхнами ранее списков сотрудников и должностей. Индексы для этих таблиц также уже созданы нами.

1. Смените текущую папку, выполнив в окне Command команду

CD ?

Откроется окно, в котором нужно найти созданную нами ранее папкуexample.

2.    Выполните в окне Command команду

Если Visual FoxPro выдаст ошибку, значит, таблица в текущей папке ненайдена, следует закрыть окно с ошибкой щелчком мышью по кнопке ОКи еще раз выполнить команду CD ?, как указано в п.1. При успешном открытии таблицы никакого сообщения не появится. Проверить, что таблица открылась, нужно, выполнив команду BROWSE. Окно с именем таблицы в заголовке появится на экране.

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

Откроем таблицу persons, используя команду

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

4.    Установим связь между нашими таблицами по полю ID. Главной таблицей пусть будет persons. Таблица staff проиндексирована нами ранее пополю ID. Выполните следующую команду:

Здесь ID - поле таблицы persons, которое соответствует индексному выражению индекса id_staff таблицы staff (индекс по полю ID таблицы staff).

5.    Расположите окна с таблицами так, чтобы они были видны одновременно (рис. 2.24).

6.    Щелкните мышью по любой записи в таблице persons. Обратите внимание, какая запись показывается в этот момент в таблице staff. Соответствует ли значение поля ID в таблице staff значению поля ID в текущейзаписи таблицы persons? Если в таблице staff не видна ни одна запись,значит, не найдено ни одного соответствия (стоит проверить, правильно ли вы ввели значения ID).

7.    Откройте окно Data Session (Сессия работы с данными), выполнив команды Window > Data Session (Окно > Сессия работы с данными) цлищелкнув по кнопкена стандартной панели инструментов. Связь между таблицами должна отображаться в поле Relations (Связи), как этопоказано на рис. 2.23.

8. Закройте окно Data Session (Сессия работы с данными). Закройте таблицы с помощью команды

SQL-запросы. Грамотное решение

Для того чтобы из любой программы, на каком бы языке она ни была написана, можно было обращаться к любой базе данных, придумали язык структурированных запросов SQL (Structured Query Language). Существует стандарт насинтаксис этого языка. Приложения, работающие с БД, пишутся на выбранномязыке программирования, а для формирования запросов к БД используются«внедренные» конструкции языка SQL. Все известные СУБД в той или иноймере поддерживают стандарт SQL. Visual FoxPro имеет поддержку языка SQL.Для работы с базами данных Visual FoxPro можно вводить команды SQL прямо

в окне Command. Для обращения к удаленным БД используется более хитрыйспособ, но конструкции SQL те же.

Реализация технологии «клиент/сервер» производится именно с использованием запросов SQL. По всем этим причинам в программах при работе сБД более грамотно отдавать предпочтение, например, SQL-команде UPDATE,а не REPLACE, или SQL-команде INSERT, а не связке команд APPEND BLANK иREPLACE.