Открыть сервис

Формат 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"
ЦелоеI4-байтовое целое(двоичное)
Двойная точностьO8-байтовое число с плавающей точкой(двоичное)

Ограничения

Формат 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, большие двоичные объекты) делают его неудобным для современных приложений.
  • Проблемы с кодировками: отсутствие стандартизации кодировок приводит к проблемам при обмене данными между разными системами.
  • Ограничения на размер: максимальное количество записей и длина записи ограничивают применение в больших проектах.
  • Отсутствие целостности данных: формат не поддерживает транзакции, внешние ключи или другие механизмы обеспечения целостности данных.

Источники

  1. Ashton-Tate. dBASE III Plus User's Manual. 1986.
  2. Borland International. dBASE IV User's Manual. 1991.
  3. Esri. Shapefile Technical Description. 1998.
  4. The DBF File Format Specification. dBase, LLC. 2005.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →