СУБД LeoBase: работа с записями

(Продолжение. Начало в №7-9, 11, 12, 13, 14, 15, 16)

Сегодня речь пойдет о работе с записями в LeoBase.

В базе данных совокупность полей образует запись. В общем случае запись может состоять из:

  • групп (маскируемых или не маскируемых);
  • самостоятельных полей (маскируемых и немаскируемых);
  • memo-полей;
  • полей реляционных ссылок;
  • вычислимых полей.

Длина записи в файле БД может быть постоянной и переменной. Запись будет переменной длины, если в ней имеется хотя бы одна маскируемая группа или поле либо memo-поле.

 

Операции работы с записями в LeoBase включают в себя их добавление, модификацию, удаление, установление связи между базами, управление контролем целостности комплекса БД, перекрытие записи.

При проведении операций по корректировке базы данных LeoBase автоматически отслеживает целостность данных. При добавлении или модификации записи, если ее поле реляционной ссылки содержит указание на несуществующую запись в подчиненной базе, генерируется ошибка. Последнее произойдет и в случае попытки удаления записи, если на нее имеются ссылки.

Для добавления записей не нужно создавать пустую запись, для этого достаточно подготовить буфер текущей записи, находящийся в памяти. Добавление записи может пройти неудачно, если превышен заданный программистом порог максимального количества записей для данной БД. При необходимости его можно изменить прямо в процессе работы. При добавлении записи, имеющей некорректные ссылки на подчиненную базу, LeoBase генерирует сообщение об ошибке нарушения целостности данных.

Операция добавления записи при своей работе автоматически корректирует все индексы БДИ, и при интенсивном добавлении скорость работы может стать неудовлетворительной. Именно для таких случаев и предусмотрен механизм пакетного добавления, о котором уже упоминалось в главе, рассказывающей про систему обновления Upgrade. Как и большинство СУБД, LeoBase позволяет блокировать индексы для ускорения операции добавления. При этом впоследствии должна быть проведена реиндексация модифицированной БД. Эта операция достаточно длительна, особенно для больших баз данных. Технология пакетного добавления, реализованная в LeoBase, практически всегда позволяет этого избежать. При пакетном добавлении индексы блокируются только у добавляемых или корректируемых записей. В то время, как со всеми остальными записями БД можно продолжать работу в обычном режиме, пакетно добавленные записи можно выделять, просматривать, изменять, но в операциях выборки и упорядочения они участвовать не будут. Для того, чтобы они участвовали в этих операциях, необходимо провести устранение последствий пакетного добавления. При этом СУБД, в зависимости от конкретной ситуации, выберет из трех специальных алгоритмов наиболее подходящий. Устранение последствий пакетного добавления занимает гораздо меньше времени, чем полная реиндексация БД, и для больших баз целесообразно использовать именно этот режим.

Операция модификации БД работает только для текущей записи. По умолчанию, в LeoBase устанавливается режим, при котором изменения, проведенные в буфере текущей записи, при переходе к другой записи, закрытии базы и т. д., автоматически фиксируются на диске. Однако существуют процедуры, задействовав которые, программист в состоянии сохранить изменения принудительно, равно как и не сохранять их вообще.

Удаление записей можно производить как по одной, так и группами. Специальная функция LeoBase позволяет удалить, например, все выделенные записи в БД. Удаление группы записей происходит в режиме блокировки индексов с дальнейшей корректировкой последних пакетным способом.

К числу оригинальных операций, присутствующих в LeoBase, принадлежит и перекрытие записи. Суть этой операции заключается в следующем. Как известно, в поле реляционной ссылки хранится физический номер записи. При отключенном контроле целостности БД в этих полях могут появляться и храниться неверные значения. Чтобы этим значениям соответствовали какие-то записи в подчиненных БД, нужно провести занесение записей в этих БД точно на те физические номера, которые были указаны в полях реляционных ссылок. Если запись с заданным номером существует, то перекрытие производит модификацию этой записи. В противном случае производится добавление новой записи, причем, ей присваивается заданный физический номер. Наличие этой возможности позволяет проводить изменения в связанных БД, независимо друг от друга.

Практически чаще всего работа идет не со всеми записями, а только с частью записей, которые удовлетворяют какому-либо критерию. Это подмножество в LeoBase называется множеством выделенных записей. Множество это является атрибутом активной РО и входит в характеристики, сохраняемые при переключении между БД в стеке возврата. Выделенные записи можно получить как явным выделением конкретной записи, так и с помощью операций выборки и ряда других функций. Существует возможность произвольного передвижения по множеству выделенных записей, загрузка любой из выделенных записей и т.д.

При работе с выделенными записями используется понятие маркера выделенных записей. Он показывает, какая по счету из выделенных записей просматривается (просматривалась) последней. Маркер, как и текущая запись, может быть определен или неопределен. Большинство функций загрузки записи по логическому номеру устанавливают или используют маркер выделенных записей. А функции загрузки по физическому номеру игнорируют маркер выделенных записей. В этом случае маркер (если он был определен) указывает на последнюю просмотренную запись из выделенных. При описании всех функций обязательно указывается, корректируют ли они маркер выделенных записей.

Каждая запись БД имеет свой физический номер - номер, под которым добавляемая запись заносится в какую-либо базу. В дополнение к физическому, в LeoBase используется логический номер записи - порядковый номер записи в множестве выделенных записей. Функции, работающие с выделенными записями, используют именно этот номер. Помимо номера, определенную роль играет порядок следования выделенных записей. Например, он может быть установлен по возрастанию какого-либо одного или даже нескольких ключей. В любой момент времени LeoBase доступны поля только одной записи, расположенной в активной рабочей области, которая называется текущей. Доступ к ее содержимому осуществляется через номер текущей записи.

Установление связей между записями в различных базах является в LeoBase довольно простой задачей. Для этого достаточно занести в реляционную ссылку соответствующей записи из командной базы физический номер записи подчиненной базы.

В следующей статье будут описаны операции поиска и проекции.

(Продолжение следует)

Владимир КОТЛЯРОВ,
"СофтИнформ", тел. 228-00-48,
e-mail:
ui@activ.minsk.by

Версия для печатиВерсия для печати

Номер: 

17 за 1997 год

Рубрика: 

Базы данных
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!