Достоинством Пролога является простота создания динамических баз данных. Основной задачей систем управления баз данных СУБД является добавление, удаление и корректирование записей в базе.

 

Различают 3 модели СУБД:

  1. иерархические
  2. сетевые
  3. реляционные

Данные в реляционной базе данных представляются в виде таблицы. Под каждую запись в БД  отводится одна строка, которая рассматривается как элемент отношения. Число элементов отношения является мощностью отношения. Число колонок (полей) в записи называется арностью. Имя колонки является атрибутом. Например, список студентов

Например:     студент

ФИО

группа

№ студента

Фамилия , группа и номер образуют запись в базе, которую можно определить предикатом – dstudent (name, groupe, position). Таким образом, можно установить следующие соответствия

База данных Турбопролога

Реляционная база

Предикат базы

Отношение

Объект

Атрибут

Отдельное утверждение

Элемент отношения

Количество утверждений

Мощность

Имя предиката

Имя таблицы

 

Для работы с БД в Прологе имеются встроенные предикаты:

  1. asserta – заносит новый факт в в базу данных (БД) в ОЗУ. Заносит так, что новый факт помещается перед всеми  уже внесенными фактами.
  2. assertz – помещает новый факт в конец БД

Например: assertbase: - student (name, group, number),

Assertz (dstudent (name, group, number)),

Faile.

assertbase: -!.

  1. retract – удаляет утверждение из БД (удаляет конкретную запись)

Например, из записи убрать конкретного студента:

Retract (dstudent («Иванов», 461, 5))

Предикаты для работы с базой в целом:

  1. save – предикат, сохраняющий БД на диске из ОЗУ.

Save (Dos_filename) – сохраняет из ОЗУ на диске.

  1. consult (Dos_filename) – считывает базу из файла на диске в ОЗУ. Consult неуспешен, если нет файла, неправильный синтаксис описания, нельзя разместить в ОЗУ из-за недостатка места.
  2. readterm (Domain, Term) –считывает из файла объекты, относящиеся к определенному домену. Readterm(auto_record,auto(Name,Year,Price))

Пример:

Domains

Name = string

Group = integer

Number = integer

student(name, group, number)

readterm(dstudent, student(name, groupe, number))

Для получения списка всех студентов можно использовать предикат findall(Name, dstudent(Name, _, _), Namelist). Переменная Namelist будет содержать список всех имен.

 

Создание базы данных в ОЗУ