Прежде всего следует написать процедуру, инициализирующую основные поля, названия ключей, а также позволяющую определить вид отношения, связывающего ключи с полями. Кроме этого, процедура инициализации должна в случае необходимости обеспечить добавление новых полей, ключей и даже отношений. При этом не следует забывать о простоте доступа к информации базы данных.
Модернизируем программу 5.4 так, чтобы можно было с ее помощью осуществлять инициализацию базы данных. Текст новой программы 5.5 приводится ниже.
Данную программу [с последней строкой QN fields keys zeroes rels)) вместо rels))] следует оформить в виде отдельного модуля, Для чего необходимо загрузить модель MODULES, после чего выполнить команду "wrap BEGIN". Последние четыре отношения из включенных в список импорта обеспечивают генерацию произвольной базы данных.
После этого рабочая область будет очищена. Затем полученный модуль нужно заново загрузить, выполнив команду "load BEGIN". Теперь можно создавать базу данных, но сначала с помощью команды "KILL modules-mod" необходимо очистить память.
В качестве примера создадим базу данных, содержащую информацию о состоянии хозяйства.фермеров: Хилл (Hill), Дейл (Dale), Мидоуз (Meadows) и Роке (Rocks). В эту базу данных будут вводиться сведения о численности птицы и поголовья скота этих фермеров. Ниже приводится пример диалога при инициализации указанной базы данных:
all (x: begin x)
[определить все (х: инициализировать х)]
X list all fields ? just (cows pigs sheep fowl)
[X перечислить все поля? последний-ответ (коровы свиньи овцы птица)]
(cows pigs sheep fowl)
[(коровы свиньи овцы птица)]
X list all keys ? just (Hill Dale Meadows Rocks)
[X перечислить все ключи? последний-ответ (Хилл Дейл Мидоуз Роке)]
(Hill Dale Meadows Rocks)
[(Хилл Дейл Мидоуз Роке)]
X list all relations ? just (in out)
[перечислить все отношения? последний-ответ (in out)]
(in out)
(Hill in ( ∅ ∅ ∅ ∅))
(Hill out ( ∅ ∅ ∅ ∅))
(Dale in ( ∅ ∅ ∅ ∅))
и т. д.
В результате выполнения данной программы будет создана следующая база данных:
list all
fields (cows pigs sheep fowl)
zeroes ( ∅ ∅ ∅ ∅)
keys (Hill Dale Meadows Rocks)
in rels out
Нill in ( ∅ ∅ ∅ ∅)
Meadows in ( ∅ ∅ ∅ ∅)
Hill out ( ∅ ∅ ∅ ∅)
Dale out ( ∅ ∅ ∅ ∅)
Meadows out ( ∅ ∅ ∅ ∅)
Итак, с помощью модуля BEGIN сгенерирована база данных с нулевыми начальными значениями полей. Теперь перейдем к созданию модуля, позволяющего модифицировать эту базу данных. Но сначала остановимся на некоторых особенностях процесса модификации.
1. Отношения in и out могут быть определены иначе, чем было предложено раньше,- с помощью команды микроПролога accept. В этом случае при вводе данных каждый ключ и каждое поле должны набираться на клавиатуре полностью, например, как показано ниже:
accept in
in (Hill ( ∅ ∅ ∅ ∅))
in (Dale ( ∅ ∅ ∅ ∅))
и т. д.
Таким образом, прежний вариант позволяет избежать лишней работы по вводу данных. Хотя значения полей рано или поздно должны быть введены, при генерации базы данных для большей части полей они часто бывают еще не известны. Модуль BEGIN обеспечивает ввод нулевых значений для неопределенных данных и, таким образом, формируег базу данных полностью.
2. Первые четыре предложения программы 5.5 служат для определения структуры записей базы данных, а также способов доступа к этим записям. С помощью этих предложений пользователь может самостоятельно добавлять или уничтожать отдельные ключи, поля или отношения. При этом от него не требуется знать, где в базе данных размещены указанные элементы.
3. Модуль, полученный из программ 5.5, позволяет создавать различные базы данных, в которых для одного ключа устанавливается связь с определенным набором полей о помощью отношения, задаваемого пользователем.
4. С помощью обобщенной формы модуля BEGIN пользователь может определять отношения, наиболее подходящие для его целей. Так, например, два отношения in и out, заданные пользователем в приведенном выше примере, предназначены для внесения в базу данных изменений об увеличении или, соответственно, уменьшении численности птицы и поголовья скота.
5. Отношение rels, описанное в программе 5.5, аналогично во многом встроенному отношению микроПролога diet, но в отличие от последнего содержит только имена отношений без указания ключей и полей.
Упражнение 5.7
С помощью модуля BEGIN постройте базы данных, содержащие следующую информацию:
1) отметки студентов по различным предметам;
2) имена игроков различных команд;
3) число книг в вашей библиотеке по каждой тематике отдельно;
4) число растений в вашем саду (по каждому виду отдельно);
5) номера автобусных маршрутов (по каждой улице отдельно). При выполнении указанных упражнений следует ограничиться небольшим количеством ключей и полей и избегать громоздких примеров. Базы данных должны содержать лишь начальные нулевые значения.