46. Базы данных в прологе. Предикаты динамическое бд.
СУБД являются компьютеризованной системой хранения информации. Данные в БД представляют собой набор фактов и цифр, записанных в доступной для компьютера форме. Эта упорядоченная совокупность и является содержимым базы данных. СУБД должны предоставлять возможность добавления, удале-
ния и корректировки данных. Эти функции реализуются специальными программами. Совокупность базы данных и функциональных
программ образует систему управления базой данных. Существуют три хорошо известные модели организации БД. Это иерархическая модель, сетевая модель и реляционная модель. В иерархической модели данные хранятся в иерархии кластеров. В сетевой данные содержатся в виде связанных агрегатов, образующих сеть. В реляционной данные хранятся в виде таблиц. В Турбо-Прологе имеются специальные средства для организации баз данных. Эти средства рассчитаны на работу с реляционными базами данных. Внутренние унификационные процедуры языка осуществляют автоматическую выборку фактов с нужными значениями известных параметров и присваивают значения еще не определенным. К тому же механизм отката позволяет находить все имеющиеся ответы на сделанный запрос.
Чтобы понять, как в Турбо-Прологе реализуется обращение к БД, рассмотрим запрос dplayer("Bernie Kosar",Team,Pos).
В этом утверждении Team и Pоs есть переменные, значения которых нужно найти. Когда этот запрос (цель) испытывается, процедуры Турбо-Пролога просматривают утверждения БД на предмет сопоставления с утверждением, содержащим Bernie Kosar. Так
как в базе данных такое утверждение присутствует, то переменной Team присваивается значение Cleveland Browns, а переменной Pos - QB.
Если трактовать dplayer как предикат БД Турбо-Пролог, то отсюда следует с необходимостью такое его описание database
dplayer(name,team,position)
Раздел database в Турбо-Прологе предназначен для описания предикатов базы данных, таких как dplayer. Все различные утверждения этого предиката составляют динамическую базу данных Турбо-Пролога. База данных называется динамической, так во время работы программы из нее можно удалять любые содержащиеся в ней утверждения, а также добавлять новые. В этом состоит ее отличие от "статических" баз данных, где утверждения являются частью кода программы и не могут быть изменены во
время счета. Другая важная особенность динамической базы данных состоит в том, что такая база может быть записана на диск, а также считана с диска в оперативную память. Иногда бывает предпочтительно иметь часть информации базы данных в виде утверждений статической БД; эти данные заносятся в динамическую БД сразу после активизации программы.(Для этой цели используются предикаты asserta и assertz, которые будут рассмотрены ниже.) В общем, предикаты статической БД имеют другое имя, но ту же самую форму представления данных, что и предикаты динамической. Предикат статической
БД, соответствующий предикату dplayer динамической базы данных, есть predicates
player(name,team,position)
clauses
player("Dan Marino","Miami Dolphins","QB").
player("Richart Dent","Chicago Bears","DE").
Заметим, что все отличие предиката dplayer по сравнению с player заключается лишь в одной лишней букве терма. Добавление латинской буквы d - обычный способ различать предикаты
динамической и статической баз данных.
Предикаты динамической базы данных.
При создании динамической базы данных Турбо-Пролога используются как стандартные предикаты, так и специальные.
Таковыми являются asserta, assertz, retract, save, consult, readterm и
findall.
* Предикаты для работы с утверждениями динамической базы данных.
Предикаты asserta, assertz и retract позволяют занести факт в заданное место динамической БД и удалить из нее уже имеющийся факт.
Предикат asserta заносит новый факт в базу данных, располагающуюся в оперативной памяти компьютера (резидентная БД). Новый факт помещается перед всеми уже внесенными утверждениями данного предиката.
Предикат assertz так же, как и asserta, заносит новые утверждения в базу данных. Однако он помещает новое утверждение за всеми уже имеющимися в базе утверждениями того же предиката. И тд.
* Предикаты для работы с базой данных в целом
Предикаты save и consult применяются для записи динамической БД в файл на диск и для загрузки содержимого файла в динамическую БД. Предикат save cохраняет находящуюся в оперативной памяти базу данных в текстовом файле. Синтаксис этого предиката save(DOS_file_name
Для загрузки файла футбольной БД требуется выражение consult("football.dba").
Предикат readterm используется для чтения из файла объектов, относящихся к определенному в программе домену. И тд.
47. Создание базы данных, располагающейся в оперативной памяти.
Процесс создания базы данных в Турбо-Прологе начинается с этапа проектирования базы. При этом требуется учесть следующие факторы:
1) размер базы данных ;
2) организацию элементов базы данных ;
3) способы работы и содержания базы данных .
Использование баз данных, располагающихся в оперативной памяти (резидентных), вполне оправданно, если эта БД имеет не слишком большой объем.
Для начала необходимо задать начальные данные и создать саму базу. Затем наступает черед системы управления базой
данных (СУБД), ориентированной на диалог с пользователем. Любая система такого рода должна содержать как минимум такие
возможности:
1) занесение в базу новых данных ;
2) удаление данных из базы ;
3) выборка и вывод содержащихся в базе данных.
Вполне естественно, что эти возможности хотелось бы реализовать достаточно логичным способом, и так, чтобы они были удобны для пользователя. Эти требования предполагают наличие в системе меню, представляющее пользователю возможность легко ориентироваться при обращении к стандартными функциям СУБД, а также оконной системы, дающей четкое представление о доступных пользователю средствах.
Когда программа запускается на счет, утверждения динамической БД помещаются в оперативной памяти отдельно от "обычных" утверждений. (Это одна из причин того, что предикаты динамической БД описываются в специальном разделе программы.) В этот момент БД полностью готова к работе. В разделе predicates следует описать все другие предикаты, используемые в программе.
Как уже ранее говорилось, в начале работы программы необходимо занести в динамическую БД предназначенную для нее информацию, содержащуюся в статической БД. Эту задачу выполняет предикат assert_database. Предикат clear_database предназначен для решения смежной задачи: очиски БД перед окончанием работы программы. Задачей предиката error является реагирование на ввод неправильной входной информации. Предикат player предназначен для задания начального содержимого базы данных. Когда программа начинает работу, эта информация засылается в утверждения предиката dplayer. Предикат do_mbase является главным правилом (модулем) программы. Он также присутствует в целевом утверждении. Предикат menu определяет правило, осуществляющее интерфейс с пользователем при помощи меню. Предикат process(integer) определяет различные правила, выполняющие все возможные операции над БД.
- 40. Программы для обработки файлов.
- 41. Дозапись данных в файл
- 42. Использование файлов прямого доступа
- 44. Использование графики в программе
- 45. Использование звука и музыки
- 46. Базы данных в прологе. Предикаты динамическое бд.
- 48. Создание базы данных, располагающейся на диске.
- 51. Экспертная система на правилах