Формат DBF
DBF — это формат файла базы данных, изначально разработанный для системы управления базами данных (СУБД) dBASE. Файлы DBF хранят структурированные данные в табличном виде, где каждая запись соответствует строке, а каждое поле — столбцу. Формат характеризуется фиксированной длиной записей и строгой схемой полей, что обеспечивает простоту и предсказуемость доступа к данным, но ограничивает гибкость по сравнению с современными реляционными базами данных.
История
Формат DBF был создан компанией Ashton-Tate в 1980 году для СУБД dBASE II, работавшей на операционной системе CP/M. В 1983 году вышла версия dBASE III, которая использовала обновлённый формат DBF (версия 3), ставший де-факто стандартом для многих приложений того времени. С ростом популярности dBASE на платформе IBM PC формат DBF получил широкое распространение.
В 1991 году компания Borland (признана нежелательной организацией в РФ) приобрела Ashton-Tate и выпустила dBASE IV, которая использовала формат DBF версии 4 с поддержкой мемо-полей (MEMO) и индексов. Позже, в 1994 году, вышла версия dBASE 5 для Windows, использующая формат DBF версии 5.0.
Несмотря на упадок коммерческой популярности dBASE, формат DBF остаётся востребованным в ряде унаследованных (legacy) систем, геоинформационных системах (ГИС), в частности в формате шейп-файлов (Shapefile), а также в некоторых бухгалтерских и складских программах, разработанных в 1990-х — начале 2000-х годов.
Структура файла
Файл DBF состоит из трёх основных частей: заголовка (header), массива полей (field descriptors) и области данных (records).
Заголовок
Заголовок содержит метаданные о файле. Его длина обычно составляет 32 байта. Ключевые поля заголовка:
- Идентификатор версии (1 байт): определяет версию формата DBF (например, 0x03 — dBASE III без мемо-полей, 0x83 — dBASE III с мемо-полями, 0x8B — dBASE IV с мемо-полями).
- Дата последнего обновления (3 байта): год, месяц, день.
- Количество записей (4 байта): целое число без знака.
- Длина заголовка (2 байта): общая длина заголовка и массива полей.
- Длина записи (2 байта): фиксированная длина одной записи в байтах.
- Резервные байты (20 байт): используются для различных флагов и расширений.
Массив полей
Сразу после заголовка следует массив дескрипторов полей. Каждый дескриптор описывает одно поле и имеет длину 32 байта. Структура дескриптора:
- Имя поля (11 байт): строка, заканчивающаяся нулевым байтом.
- Тип поля (1 байт): символ, определяющий тип данных (C — символьный, N — числовой, D — дата, L — логический, M — мемо, F — с плавающей точкой и др.).
- Смещение поля (4 байта): смещение поля в записи (начиная с версии dBASE IV).
- Длина поля (1 байт): максимальная длина поля в байтах.
- Количество десятичных знаков (1 байт): для числовых полей.
- Резервные байты (14 байт): используются для флагов и расширений.
Массив полей заканчивается терминатором — байтом 0x0D (возврат каретки).
Область данных
Область данных состоит из последовательности записей фиксированной длины. Каждая запись начинается с байта-флага удаления (0x20 — активная запись, 0x2A — удалённая). Далее следуют значения полей в порядке, определённом массивом дескрипторов. Значения полей хранятся в текстовом виде (для символьных и числовых типов) или в специальных форматах (для дат, логических и мемо-полей).
Типы полей
Формат DBF поддерживает несколько основных типов полей, определённых в различных версиях:
| Тип | Обозначение | Описание | Пример |
|---|---|---|---|
| Символьный | C | Строка фиксированной длины | "Иванов " |
| Числовой | N | Число, хранимое как строка | "123.45" |
| Дата | D | Дата в формате YYYYMMDD | "20231005" |
| Логический | L | Логическое значение (Y/N, T/F) | "Y" |
| Мемо | M | Ссылка на блок в мемо-файле (DBT) | (внутренний указатель) |
| Числовой с плавающей точкой | F | Число с плавающей точкой | "123.450" |
| Целое | I | 4-байтовое целое | (двоичное) |
| Двойная точность | O | 8-байтовое число с плавающей точкой | (двоичное) |
Ограничения
Формат DBF имеет ряд ограничений, которые делают его устаревшим для многих современных задач:
- Максимальное количество записей: 1 073 741 823 (2^30 - 1) для версий с 32-битным счётчиком.
- Максимальное количество полей: 255 (для dBASE III) или 1024 (для dBASE IV и выше).
- Максимальная длина записи: 4000 байт (для dBASE III) или 65535 байт (для dBASE IV).
- Фиксированная длина записей: приводит к неэффективному использованию дискового пространства при наличии полей переменной длины.
- Отсутствие поддержки Unicode: в стандартном формате используется однобайтовая кодировка (например, CP866, CP1251).
- Отсутствие поддержки NULL-значений: в ранних версиях не было способа явно указать отсутствие значения.
Применение
Несмотря на возраст, формат DBF продолжает использоваться в нескольких областях:
- Геоинформационные системы (ГИС): атрибутивная таблица шейп-файлов (Shapefile), разработанных компанией Esri, хранится в формате DBF. Это один из самых распространённых случаев использования формата в XXI веке.
- Унаследованные системы: многие бухгалтерские программы, складские системы и системы документооборота, разработанные в 1990-х годах, до сих пор используют DBF для хранения данных.
- Обмен данными: благодаря простоте и открытости формата, DBF иногда используется для обмена табличными данными между различными приложениями.
- Научные и архивные проекты: в некоторых случаях DBF применяется для хранения и передачи структурированных данных в проектах, где требуется минимальная зависимость от проприетарного программного обеспечения.
Поддержка программным обеспечением
Формат DBF поддерживается большинством современных СУБД и офисных пакетов:
- Microsoft Excel: может открывать и сохранять файлы DBF (через драйверы ODBC).
- LibreOffice Calc: имеет встроенную поддержку импорта и экспорта DBF.
- dBase: оригинальная СУБД, хотя её развитие практически прекращено.
- FoxPro: СУБД, также использующая формат DBF (с расширениями).
- Clarion: среда разработки, поддерживающая DBF.
- Python: библиотеки
dbfreadиdbfпозволяют читать и записывать DBF-файлы. - C/C++: библиотеки
libdbfиxbaseпредоставляют API для работы с DBF.
Критика
Формат DBF подвергается критике по нескольким причинам:
- Устаревшая архитектура: фиксированная длина записей и отсутствие поддержки современных типов данных (например, Unicode, большие двоичные объекты) делают его неудобным для современных приложений.
- Проблемы с кодировками: отсутствие стандартизации кодировок приводит к проблемам при обмене данными между разными системами.
- Ограничения на размер: максимальное количество записей и длина записи ограничивают применение в больших проектах.
- Отсутствие целостности данных: формат не поддерживает транзакции, внешние ключи или другие механизмы обеспечения целостности данных.
Источники
- Ashton-Tate. dBASE III Plus User's Manual. 1986.
- Borland International. dBASE IV User's Manual. 1991.
- Esri. Shapefile Technical Description. 1998.
- The DBF File Format Specification. dBase, LLC. 2005.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →