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

Формат 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.
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru