Page 42 - 4800
P. 42
work1(“Маслов”, 101, “оператор”, 200).
work1(“Денега”, 211, “керівник”, 450).
work1(“Петренко”, 101, “менеджер”, 300).
Запит work1(Name, 101, Post, Salary) дозволяє відшукати всіх службовців 101
відділу.
5.3 Представлення атрибутів у вигляді фактів
Замість того, щоб записувати факти, що містять цілісні інформаційні елементи,
можна використовувати як факти окремі атрибути (тобто властивості) цих
інформаційних елементів. У разі потреби дані атрибути можна зібрати в єдине ціле за
допомогою правила. Один з атрибутів повинний виступати в ролі ключа, що поєднує
всі інші властивості. Атрибут Ім’я_службовця можна використовувати як ключ для БД
work(). Перший екземпляр об'єкта РОБОТА можна представити в такий спосіб:
office(“Петренко”, 101). /* відділ */
post(“Петренко”, “оператор”). /* посада */
salary(“Петренко”, 250). /* оклад */
Всі атрибути для конкретного службовця, сукупність яких являє собою
визначений екземпляр об’єкта предметної області, можна об’єднати за допомогою
правила:
work2(Name, Office, Post, Salary):- office(Name, Office), post(Name, Post), salary
(Name, Salary).
Це правило визначає неявну базу даних того ж виду, що і приведена раніше явна
база даних work1(). Для цього правила можна скористатися попереднім запитом, що
дасть ті ж результати, що і раніше.
Застосування атрибутів є більш гнучким засобом представлення бази даних, чим
застосування цілісних інформаційних елементів, оскільки нові атрибути можна
додавати без переписування заново всієї існуючої бази даних.
Приведемо приклад правила, у якому пропонується видача премії в 100 грн. всім
службовцям відділу 101. Це можна описати з використанням нового атрибута “премія”,
предикат для якого можна визначити у вигляді правила:
prize(Name, 100):- office( Name, 101).
Для деяких службовців можна ввести додатковий атрибут “стаж_роботи” і
новий набір фактів, його що описує:
work_time(“Петренко”, 5).
work_time(“Маслов”, 3).
Додавання нових атрибутів “премія” і “стаж_роботи” ніяк не вплине на
приведене вище правило work2().
5.4 Представлення бази даних у вигляді списку структур
Базу даних можна також вважати потоком цілісних інформаційних елементів,
що представляється мовою Пролог у вигляді списку структур. Кожен елемент списку –
це цілісний інформаційний елемент:
[work(“Маслов”, 101, “оператор”, 200), work(“Денега”, 211, “керівник”, 450),
work(“Петренко”, 101, “менеджер”, 300)]
Цікаво відзначити, що при такому підході до структури бази даних потік
цілісних інформаційних елементів потрібно включати в поточну програму. Він може
існувати лише як аргумент запиту, що входить у різні підцілі, що обробляють цей
потік.
Доступ до окремого інформаційного елемента такої БД буде здійснюватися з
використанням спеціальної процедури, що містить два аргументи. Вхідним буде другий
аргумент процедури. Він містить список цілісних інформаційних елементів. Результат
виконання процедури повертається через її перший аргумент – по одному цілісному
інформаційному елементі за одну відповідь на запит (тобто по одному екземплярі
об’єкта, або по одному запису).
record(work(Name, Office, Post, Salary), [work(Name, Office, Post, Salary)|_]).
record(work(Name, Office, Post, Salary), [work(_,_,_,_) | Tail]):-record(work(Name,
Office, Post, Salary), Tail).
42