Без индексов в Visual FoxPro не обойтись. Однако при их создании вы должны помнить, что если вы используете индекс, в состав которого входят поля большой ширины, индексный файл может оказаться очень больших размеров. Visual FoxPro не разрешает при создании индексов использовать Memo-поля и поля, содержащие графические изображения.
Отношения между таблицами
Между таблицами существует четыре типа отношений. Это "один-к-одному", "один-ко-многим", "много-к-одному", "много-ко-многим". Все эти типы отношений поддерживаются в Visual FoxPro.
Отношение "один-к-одному" означает, что каждая запись в одной таблице соответствует только одной записи в другой таблице. В качестве примера можно рассмотреть отношения между списком служащих предприятия и таблицей, содержащей их служебные характеристики.
Наиболее часто встречающимся является тип отношения "один-ко-многим". В качестве примеров могут быть рассмотрены отношения между покупателем и купленными им товарами, между предприятием и работающими на нем сотрудниками.
|
|
Отношение "много-к-одному" можно сравнить с отношением "один-ко-многим", рассматриваемое с другой точки зрения. Например, между клиентами и сделанными им заказами существует отношение "один-ко-многим". С другой стороны, если в качестве исходной точки рассматривать заказы, то между сделанными заказами и клиентами получается отношение "много-к-одному".
В качестве примера отношения "много-ко-многим" можно привести пример магазина оптовой торговли. Данный тип отношений существует между списком товаров, производимых предприятиями-поставщиками, и списком товаров, заказанных потребителями.
Создание отношений между таблицами
Как правило, в Visual FoxPro при создании форм, отчетов и запросов используется несколько таблиц, между которыми установлены постоянные отношения. Такие таблицы называются связанными. Из двух связанных таблиц одна является главной, а другая — подчиненной. Главную таблицу называют родительской, а подчиненную — дочерней. При создании индексов для родительской таблицы должен быть определен ключ типа Primary
(Первичный) или типа Candidate (Кандидат), а для дочерней таблицы — индекс для связи с родительской таблицей типа Regular (Обычный).
Рассмотрим, например, отношения между таблицей Customer, содержащей список клиентов, и таблицей Phoncust, в которой размещены данные о телефонах, по которым можно связываться с клиентами. Таблица customer является родительской по отношению к таблице PhonCust. В свою очередь, таблица PhonCust является дочерней по отношению к таблице Customer. При создании отношений между этими таблицами для customer должен быть определен первичный ключ, а для таблицы PhonCust — создан индекс по полю, содержащему код клиента, по которому осуществляется связь между таблицами.
|
|
Для создания отношений между таблицами customer и PhonCust выполните следующие действия:
- Откройте окно конструктора базы данных, в которой эти таблицы размещены.
- Откройте таблицу customer в конструкторе таблицы. Для этого щелкните на ней правой кнопкой мыши и в контекстном меню выберите команду Modify (Модифицировать).
- На вкладке Indexes (Индексы) создайте первичный ключ для поля icdCustomer. Для этого в поле столбца Name (Имя) введите наименование индекса icdCustomer. Для простого индекса в качестве его имени удобно использовать наименование поля, по которому индекс создается.
- В столбце Туре (Тип) выберите из списка значение Primary (Первичный).
- В столбце Expression (Выражение) нажмите кнопку построителя. В открывшемся диалоговом окне Expression Builder (Построитель выражения) в списке Fields (Поля) дважды щелкните мышью на поле icdCustomer. Оно будет перенесено в поле Expression (Выражение). Нажмите кнопку ОК для закрытия диалогового окна.
- Индекс для таблицы customer создан. Нажмите кнопку ОК для закрытия окна конструктора таблицы.
- Откройте в конструкторе таблицу PhonCust.
- Перейдите на вкладку Indexes (Индексы) и создайте ключ типа Regular
(Обычный) для поля icdCustomer.
- Нажмите кнопку ОК для закрытия окна конструктора таблицы.
- Выберите родительскую таблицу. В нашем примере это таблица Customer.
- Установите курсор мыши на первичный ключ таблицы icdCustomer.