Логическая запись, как совокупность полей определенного типа и длины, представляется в оперативной памяти как последовательность байтов:
Логическая запись | Последовательность байтов ОП | |||||||
Поле 1 | Поле 2 | ... | Поле N | B1 | B2 | ... | BN | |
Bi – последовательность байтов ОП, используемая для хранения поля i | ||||||||
Прямая адресация байтов позволяет процессору выбирать для обработки нужное поле из ОП.
В большинстве современных СУБД используется формат записей фиксированной длины. В этом случае все записи имеют одинаковую длину, определяемую суммарной длиной полей, составляющих запись.
Однако, в предметной области достаточно часто встречаются поля, принимающие значения существенно разной длины в различных экземплярах записей. Примером может служить поле «резюме» в записи СОТРУДНИК. Резюме может составлять полстраницы текста, страницу и т.д. Возникает проблема – как эту информацию переменной длины представить в записи фиксированной длины. Возможным вариантом является установление размера соответствующего поля по максимальному значению. В этом случае у многих экземпляров записи указанное поле будет заполнено не полностью и, таким образом, память ЭВМ будет использоваться неэффективно.
|
|
Более эффективный прием организации таких записей состоит в том, чтобы вместо поля, принимающего значение существенно разной длины, в запись включать поле-указатель на область памяти, где будет размещаться значение исходного поля. На рис.12 представлен пример представления экземпляров записей из N полей, причем поле N принимает значения соответственно разной длины у разных экземпляров записей.
Рис. 12. Представление полей переменной длины
Конкретной реализацией такой схемы является поле типа МЕМО в СУБД (dBase III+, FoxPro, Access и т.д.).