(Продолжение. Начало в №7-9, 11, 12, 13)
В отличие от обычных СУБД LeoBase работает не с отдельными таблицами, а с комплексами из нескольких БД и самостоятельно отслеживает связи между ними. Между собой базы связаны реляционными ссылками. Реляционная ссылка - это специальное поле в записях базы А (командной), в котором хранится номер записи из базы Б (подчиненной). Иными словами, в LeoBase связь между базами осуществляется не по значениям полей, а по номерам записей. Целостность системы контролируется LeoBase автоматически. СУБД не позволит удалить запись, если на нее кто-то ссылается, или сделать ссылку на несуществующую запись. При желании контроль целостности можно отключить, при этом ответственность за целостность данных, понятно, целиком ложится на программиста.
Комплексы БД удобно наглядно представлять в виде схем, где сами базы изображаются прямоугольниками, а связи между ними - стрелками. При поиске информации мы перемещаемся по этим стрелкам из одной базы в другую. В зависимости от того, что нужно найти, пути к базе, содержащей искомые сведения? могут быть различными. Возьмем в качестве примера комплекс из четырех БД - "Курсовые проекты", "Студенты", "Преподаватели", "Кафедры" - связанных между собою так, как показано на схеме. Причем:
- БД"Студенты" содержит фамилии студентов и указание на кафедру, где учится;
- БД"Преподаватели" - фамилии преподавателей и указание на кафедру, где работает;
- БД"Кафедры" - список всех кафедр института;
- БД"Курсовые проекты" - информацию о названии проекта, оценке, полученной за его выполнение? и информацию о студенте и преподавателе, участвующем в этом проекте;
- S1-S4 - имена реляционных ссылок.
Чтобы получить список курсовых проектов, выполненных студентами кафедры ЭВМ, мы должны, пользуясь базами "Студенты" и "Кафедры", составить список студентов, занимающихся на кафедре ЭВМ, после чего, пользуясь этим списком и базой "Курсовые проекты", составить список проектов. В LeoBase для этого из базы "Курсовые проекты" делается запрос "\S1;S3\Кафедра = ЭВМ", то есть задается обращение к базе "Кафедры" через базу "Студенты". Если бы нам понадобился список проектов, которыми руководили преподаватели кафедры ЭВМ, запрос имел бы вид "\S2;S4\Кафедра = ЭВМ": путь от базы "Курсовые проекты" прошел бы уже не через базу "Студенты", а через базу "Преподаватели".
Часто используемый путь от одной базы к другой можно сделать путем по умолчанию и после этого не указывать в запросе. Для задания путей по умолчанию служат семейства - такие подмножества комплексов, в которых из любой БД в любую другую существует не более одного пути. Хотя эта возможность и весьма удобна для программиста, понятно, однако, что в некоторых запросах обойтись без явного указания пути невозможно.
Рассмотрим структуру отдельно взятой БД. Она представляет собой множество записей переменной длины.
Запись - совокупность данных, которая может состоять из:
- групп (маскируемых или не маскируемых);
- самостоятельных полей (маскируемых и немаскируемых);
- memo-полей;
- полей реляционных ссылок;
- виртуальных ссылок;
- вычислимых полей.
Поясним некоторые термины. Группа - совокупность полей, которую, для удобства работы, можно представить как одно целое. Маскируемость - свойство, позволяющее пустым полям и группам не занимать места на диске. Если поле маскируемое и пустое - оно не хранится в файле БД физически.
Любое поле записи БД может быть объявлено ключевым. Ключевое поле может участвовать в операциях выборки и упорядочивания. Если поле объявлено ключевым, то все его экземпляры делаются ключевыми. Вычислимые поля всегда являются ключевыми.
Все поля в БД имеют свои уникальные коды. Все виды полей, за исключением memo-полей, имеют свой тип данных. LeoBase поддерживает 11 стандартных типов данных, однако их число может быть расширено до 600 за счет добавления пользовательских типов данных. В описании типа данных может присутствовать ряд триггеров, которые обеспечивают гибкую работу с полями данного типа.
В LeoBase поле можно представить как массив, число элементов в котором равно числу экземпляров поля. Таким образом, в записи одной БД можно хранить двухмерные массивы данных, представив их в виде группы из многих экземпляров, в которой хранятся поля, также состоящие из многих экземпляров.
В LeoBase поля строкового типа данных могут быть переменной длины. То есть, при хранении в строке, например, 5 символов, поле занимает ровно столько места, сколько и строка. Поэтому при задании строковых полей можно, оговорив, что оно переменное, указывать максимальный размер поля, не заботясь об ограничениях по общему размеру БД.
Длина записи может быть постоянной и переменной. Запись будет переменной длины, если в ней существует хотя бы одна маскируемая группа или memo-поле. Возможность создания маскируемых групп, полей и строк переменной длины дает большую гибкость и экономит очень много места на диске. Благодаря этой возможности можно задавать в записи поля, которые присутствуют очень редко - в тех записях, где их нет, места они не займут.
В файлах БД, где запись имеет переменную длину, могут возникать "дырки" - свободные участки в середине файла. При добавлении информации LeoBase старается размещать ее в "дырках", минимизируя число и размер "дырок".
При открытии комплекса БД все связанные между собой путями базы открываются сразу. Последующее открытие базы из другой такой группы также влечет за собой формирование рабочих областей для всех БД с ней связанных.
Владимир КОТЛЯРОВ,
"СофтИнформ", тел. 228-00-48,
e-mail: ui@activ.minsk.by
Горячие темы