На этом шаге мы рассмотрим домены внешних баз данных.
Базы данных используют шесть стандартных доменов, приведенных в таблице 1.
Домен | Для чего используется |
---|---|
db_selector | Домен для объявления селекторов баз данных |
bt_selector | Домен для объявления селекторов В+ деревьев |
place | Домен для объявления местоположения базы данных (в памяти или на диске) |
accessmode | Домен, решающий, как использовать файл |
denymode | Домен, определяющий, как остальные пользователи будут открывать файл |
ref | Ссылка на расположение терма в цепочке |
Всякий раз при введении нового терма в базу данных Visual Prolog присваивает ему число-указатель. Вы можете использовать число-указатель терма (далее мы будем говорить просто "указатель") для выборки, перемещения или замены терма, a также для доступа к предыдущему или последующему терму. Вы можете также внести затель в В+ дерево, а затем использовать В+ дерево для сортировки или быстрого поиска терма.
Указатель не зависит от местоположения базы данных или от возможных операций упаковки. Если указатель был связан с термом, вы можете использовать его для доступа к терму, независимо от того, какие операции по управлению базой данных производятся, вплоть до момента удаления этого терма.
Указатель - это особый тип данных: вы можете включать его во внутреннюю базу данных, выводить его операторами write и writef, но не можете внести его с клавиатуры. Можно объявить аргументы предикатом, предназначенных для работы с указателями, как принадлежащие домену ref.
Если вы удалите терм предикатом term_delete, система сможет вновь использовать указатель удаленного терма при внесении нового терма в базу данных. Это происхот атоматически, однако если указатели в силу каких-то причин были сохранены во внутренней базе данных или в В+ дереве, то нельзя гарантировать, что данный указатель связан именно с тем термом, который вы имеете в виду. Здесь поможет опция проверки ошибок, включаемая стандартным предикатом db_reuserefs.
Предикат db_reuserefs имеет следующую форму:
db_reuserefs (DBase,ReUse) % (i,i)
где Dbase - это db_selector, a ReUse - беззнаковое целое число. Оно должно быть установлено в 0 для разрешения проверки на использование освобожденных термов и l для ее запрещения. Расход памяти на проверку очень мал (4 байта на терм), но эти 4 байта никогда не будут освобождены. Если вы постоянно создаете и удаляете термы, ваша база данных будет постоянно разрастаться. Основная цель db_reuserefs - помочь в отслеживании ошибок при разработке программы.
На следующем шаге мы рассмотрим обработку баз данных.