Базы данных, состоящие из плоских файлов

База данных в виде плоских файловПлоские файлы могут быть очень полезны во многих видах приложений. До тех пор пока файл не настолько велик, чтобы его обработка стала слишком сложной, вполне можно использовать плоские файлы. Многие системы и приложения, в том числе написанные для UNIX, используют такие файлы для хранения данных или обмена информацией. В качестве примера можно привести файл паролей UNIX.

Плоский файл, рассмотренный выше, состоит из некоторого количества информационных элементов или атрибутов, вместе они составляют то, что можно назвать «записью». Записи устроены так, что каждая строка файла является отдельной записью, а файл собирает связанные записи вместе. Бывают случаи, когда такая конструкция не совсем подходит для поддержания работы приложения, тогда приходится вводить дополнительные возможности.

Предположим, что в приложение из предыдущего раздела нужно для каждой страны внести язык, на котором в ней говорят, а также площадь и численность населения. В плоском файле одна строка соответствует одной записи, при этом каждая запись состоит из нескольких атрибутов. Каждый отдельный атрибут всегда находится внутри записи на одном и том же месте, например обозначение валюты всегда является вторым атрибутом, поэтому можно просматривать данные по столбцам, в столбце всегда представлена информация одного вида. Таким образом, добавление языка, на котором говорят в какой-то стране, можно понимать как добавление еще одного столбца во все имеющиеся строки.

Но при введении этого столбца возникает затруднение - оказалось, что в некоторых странах существует несколько официальных языков. Поэтому в записи для Бельгии должен присутствовать как французский, так и фламандский язык. А в запись о Швейцарии нужно внести четыре языка.

Такая проблема носит название повторяющихся групп. Ситуация выглядит следующим образом: абсолютно законный элемент (язык) может повторяться в записи несколько раз, поэтому повторяется не только запись (строка), но и данные в ней. Плоские файлы не справляются с задачей, ведь невозможно определить, где заканчивается перечисление языков и начинается следующая часть записи. Единственным способом выхода из положения является введение в файл некоторой структуры, но тогда он перестает быть плоским.

Проблема повторяющихся групп возникает очень часто, и именно она стимулировала разработку более сложных систем управления базами данных. Можно попытаться решить задачу, используя обычные текстовые файлы, в которые введена некоторая структура. Такие файлы часто тоже называют плоскими, но название «структурированный плоский файл» точнее. Рассмотрим новый пример.

Базы данных  из плоских файлов

Приложение, которое хранит информацию о DVD-дисках, должно помнить год выпуска, режиссера, жанр фильма и состав исполнителей. Можно создать для этих данных файл, немного напоминающий файл .ini в Windows:

[2001: A Space Odyssey]
year=1968
director=Stanley Kubrick
genre=science fiction
starring=Keir Dullea
starring=Leonard Rossiter
...
[Toy Story]
...

Проблема повторяющихся групп решена введением тегов, указывающих тип каждого элемента записи. Теперь приложение должно прочитать и интерпретировать более сложный файл только для того, чтобы добраться до содержащихся в нем данных. Выполнять в такой структуре обновление записи и поиск не очень удобно. Как можно быть уверенным в том, что описание жанра или классификация выбраны из определенного подмножества? Как, не прилагая особых усилий, вывести упорядоченный список фильмов Кубрика?

По мере того как требования к данным становятся все более и более сложными, приходится писать все больше и больше кода для чтения и хранения этих данных. Если же расширить наше DVD-приложение, включив в него информацию, которая может быть полезна владельцу магазина, занимающегося выдачей фильмов напрокат, например данные о берущих диски и взимаемой плате, о возвратах и бронировании фильмов, то перспектива использовать плоский файл для хранения всей этой информации представляется не очень-то заманчивой.

Третья, также очень распространенная проблема - это размер. Хотя, применив грубую силу, можно организовать в описанной выше структуре сложный поиск по запросам типа «найти адреса всех клиентов, которые брали на прокат одну и более комедий за последние три месяца», но запрограммировать это нелегко, не говоря уже о том, что производительность будет крайне низкой. Дело в том, что для поиска любых данных приложение всегда просматривает весь файл целиком, даже если запрашивается только одно значение, например «Сколько фильмов было выпущено в 1968 году?».

Нужен некий универсальный способ хранения и извлечения данных, а не решение, придумываемое каждый раз для того, чтобы обойти не-сколько отличающиеся друг от друга, но весьма схожие проблемы, возникающие в большинстве систем обработки данных. Нужна база данных.  

Вас заинтересует / Intresting for you:

Что такое базы данных? Назначе...
Что такое базы данных? Назначе... 12809 просмотров Ирина Светлова Mon, 28 Oct 2019, 05:41:34
База данных - определение
База данных - определение 47294 просмотров Antoniy Wed, 01 Jul 2020, 07:43:24
Что такое База данных? Определ...
Что такое База данных? Определ... 5299 просмотров Aaltonen Thu, 04 Feb 2021, 15:34:33
Базы данных  и СУБД: краткий о...
Базы данных и СУБД: краткий о... 2500 просмотров Ирина Светлова Mon, 09 Aug 2021, 18:08:52
Войдите чтобы комментировать