Page 48 - 4800
P. 48
ЛАБОРАТОРНА РОБОТА № 6
ДИНАМІЧНІ БАЗИ ДАНИХ
Мета роботи: Ознайомитися з призначенням і використанням динамічних баз
даних. Вивчити правила опису і організації динамічних БД в Пролозі.
6.1 Вступ
У Пролозі реляційна база даних представляється у вигляді набору фактів, що
дозволяє використовувати Пролог, як могутню мову запитів для баз даних. Вбудований
в Пролог алгоритм уніфікації автоматично вибирає факти з правильними значеннями
для відомих параметрів і уніфікує значення для будь-яких невідомих параметрів.
Алгоритм пошуку з поверненням дозволяє знаходити всі рішення для поставлених
запитів.
У попередніх роботах розглядалися статичні бази даних, де факти були
частиною коду програми і не могли бути змінені під час роботи з програмою.
Принциповою відмінністю динамічних баз даних є те, що під час роботи з програмою, з
них можна видаляти будь-які твердження, а також додавати нові. Інша важлива
особливість динамічної бази полягає у тому, що вона може бути збережена на диск та
зчитана з диска в оперативну пам’ять.
Факти, що належать динамічним базам даних, обробляються відмінним від
інших предикатів чином з метою прискорення роботи з базами даних великого об’єму.
Предикати динамічної БД відрізняються від інших тим, що вони описуються в окремій
секції програми – database. Маніпулювання фактами в динамічній БД здійснюється з
використанням трьох стандартних предикатів:
– asserta(Term) – додає нові факти в початок динамічної бази даних.
– assertz(Term) – додає нові факти в кінець динамічної бази даних,
– retract(Term) – видаляє факт з динамічної бази даних.
Для модифікації якого-небудь факту в динамічнй БД необхідно спочатку
видалити його з неї, а потім додати в зміненому вигляді. Для забезпення роботи з
даними динамічної БД, що знаходяться на жорстоку диску, використовуються такі
стандартні предикати:
– save(„file_name”) – збереження динамічної БД в текстовому файлі з ім'ям
file_name.
– consult(„file_name”) – завантаження динамічної БД з текстового файлу з ім'ям
file_name.
Слід зауважити, що іноді частину інформації бази даних доцільно зберігати у
вигляді тверджень статичної БД і заносити ці дані до динамічної БД відразу ж після
активізації програми. При цьому предикати статичної БД повинні мати інше ім'я, але ту
ж саму структуру даних, що і предикати динамічної БД. Причому опис предикатів
динамічної БД здійснюється в секції database, а предикатів статичної БД – в секції
predicates.
6.2 Прості прийоми роботи з динамічними БД
У секції database декларуються предикати, що описують динамічну базу даних.
Опис предикатів динамічної БД повинен передувати опису всіх звичайних предикатів.
У наведеній нижче програмі 6_1 розглянуто приклад використання явної
динамічної бази даних, структура якої відповідає відношенню
Особа(Ім’я, Вік, Стать).
На основі явної динамічної БД, яка допускає модифікацію під час роботи, в
програмі за допомогою правил визначені ще три неявні бази даних:
Чоловік (Ім’я, Вік), Жінка (Ім’я, Вік), Дитина (Ім’я, Вік, Стать)
Предикат реrson() можна використовувати так само, як і будь-які інші
предикати. Відмінність лише у тому, що для нього, під час виконання програми,
можливе додавання і видалення фактів. Факти, що додаються таким чином,
зберігаються в оперативній пам’яті. На основі програми 6_1, розглянемо прості
прийоми роботи з динамічними БД.
/* Програма 6_1 */
48