База данных с плоским файлом — это база данных, хранящаяся в файле, называемом плоским файлом . Записи следуют единому формату, и нет структур для индексации или распознавания связей между записями. Файл прост. Плоский файл может быть обычным текстовым файлом (например, csv , txt или tsv ) или двоичным файлом . Связи могут быть выведены из данных в базе данных, но сам формат базы данных не делает эти связи явными.
Термин обычно подразумевает небольшую базу данных, но очень большие базы данных также могут быть плоскими.
Файлы с простым текстом обычно содержат одну запись на строку. [2]
Примерами плоских файлов являются /etc/passwd
и /etc/group
в операционных системах типа Unix . Другим примером плоского файла является список имен и адресов с полями Name , Address , и Phone Number .
Список имен, адресов и телефонных номеров, написанный от руки на листе бумаги, представляет собой базу данных в виде плоского файла. Это также можно сделать с помощью любой пишущей машинки или текстового процессора . Для реализации базы данных в виде плоского файла можно использовать программу для работы с электронными таблицами или текстовым редактором , которую затем можно распечатать или использовать в Интернете для улучшения возможностей поиска.
Плоские файлы обычно либо разделены разделителями (например, значения, разделенные запятыми (CSV) ), либо имеют фиксированную ширину (каждый столбец имеет фиксированную ширину).
В файлах значений, разделенных разделителем , поля разделяются символом или строкой, называемой разделителем . Распространенными вариантами являются CSV (разделителем является ,
), значения, разделенные табуляцией (TSV) (разделителем является символ табуляции), значения, разделенные пробелом, и значения, разделенные вертикальной чертой (разделителем является |
).
Если разделитель разрешен внутри поля, должен быть способ отличить символы разделителей или строки, которые подразумеваются буквально. Например, рассмотрим предложение «Если мне придется, я сделаю это сам». Чтобы закодировать его в CSV, должен быть способ предотвратить разделение поля запятой. Существует несколько стратегий предотвращения коллизий разделителей .
В форматах с фиксированной шириной каждый столбец имеет фиксированную длину, а поля дополняются пробелами по мере необходимости. Фиксированная длина может быть предопределена и известна заранее (т. е. указана в спецификации формата) или проанализирована из заголовка .
При предопределенных длинах поля ограничены максимальной длиной. Потребность в более длинных полях может возникнуть через некоторое время после определения формата. Возможные обходные пути включают сокращение фраз, замену значений ссылками (например, URI, указывающим на значение) и разделение файла на несколько файлов.
В форматах с разделителями определение границ полей требует поиска разделителей, что влечет за собой некоторые вычислительные издержки . Это не требуется для форматов с фиксированной шириной. Однако форматы с фиксированной шириной могут привести к неоправданно большим размерам файлов, если поля имеют тенденцию быть короче зарезервированной для них длины.
Разделители могут использоваться вместе с нотацией, указывающей длину каждого поля. Например, 5apple|9pineapple
указывает длину (5 и 9) каждого поля. Это называется декларативной нотацией . Она имеет низкие накладные расходы и тривиально позволяет избежать коллизий разделителей, но она хрупкая при редактировании вручную и редко используется.
Работа Германа Холлерита для Бюро переписи населения США , впервые реализованная в переписи населения США 1890 года , включающая данные, сведенные в таблицы с помощью дыроколов в бумажных карточках, [3] иногда считается первой компьютеризированной базой данных в виде плоских файлов, поскольку она не включала в себя карточки, индексирующие другие карточки, или иным образом связывающие отдельные карточки друг с другом, за исключением их групповой принадлежности. [ необходима ссылка ]
В 1980-х годах настраиваемые приложения для работы с базами данных на основе плоских файлов были популярны на IBM PC и Macintosh . Эти программы были разработаны для того, чтобы облегчить отдельным пользователям разработку и использование собственных баз данных, и по популярности они были почти на одном уровне с текстовыми процессорами и электронными таблицами . [ необходима цитата ] Примерами программного обеспечения для работы с базами данных на основе плоских файлов являются ранние версии FileMaker и условно-бесплатное программное обеспечение PC-File , а также популярная dBase .
Базы данных в виде плоских файлов широко распространены и повсеместны, поскольку их легко писать и редактировать, и они подходят для множества целей простым способом.
Линейные хранилища данных NoSQL , данных JSON , примитивных электронных таблиц (возможно, разделенных запятыми или табуляцией) и текстовых файлов можно рассматривать как базы данных плоских файлов, поскольку в них отсутствуют интегрированные индексы, встроенные ссылки между элементами данных и сложные типы данных. Программы для управления коллекциями книг или назначений и адресных книг могут использовать одноцелевые базы данных плоских файлов, сохраняя и извлекая информацию из плоских файлов, не украшенных индексами или системами указателей.
Хотя пользователь может записать оглавление в текстовый файл, сам формат текстового файла не включает концепцию оглавления. Хотя пользователь может написать «друзья Кэти» в разделе «Заметки» для контактной информации Джона, это интерпретируется пользователем, а не встроенной функцией базы данных. Когда система базы данных начинает распознавать и кодифицировать отношения между записями, она начинает отдаляться от «плоской», а когда у нее есть подробная система описания типов и иерархических отношений, она становится слишком структурированной, чтобы считаться «плоской».
Следующий пример иллюстрирует типичные элементы базы данных с плоским файлом. Структура данных состоит из ряда столбцов и строк, организованных в табличный формат . В этом конкретном примере используется только одна таблица.
Столбцы включают в себя: имя (имя человека, второй столбец); команда (название спортивной команды, которую поддерживает человек, третий столбец); и числовой уникальный идентификатор (используется для уникальной идентификации записей, первый столбец).
Вот пример текстового представления описанных данных:
имя идентификатора команды1 Эми Блюз2 Боба Редса3 Чак Блюз4 Ричард Блюз5 Этель Редс6 Фред Блюз7 Джилли Блюз8 Хэнк Редс9 Хэнк Блюз
Этот тип представления данных является вполне стандартным для базы данных в виде плоских файлов, хотя есть некоторые дополнительные соображения, которые не очевидны из текста: