フラットファイル
データベースは、
データベースのデータを
プレーンテキストファイルで表現する方式です。特に、表形式のデータをシンプルな構造で保存するのに適しています。通常、1行が1つのレコードに対応し、レコード内の各項目(フィールド)は
区切り文字(デリミタ)で区切られます。
区切り文字には、カンマやタブなどが用いられるほか、固定の文字数で区切ることもあります。
構造
フラットファイルは、テキスト形式で記述されたデータであり、通常は1行が1つのレコードを表します。レコード内の各フィールドは、カンマやタブなどのデリミタで区切られます。固定長フィールドの場合は、各フィールドが固定の文字数で表現され、必要に応じて空白などでパディングされます。デリミタはフィールド内では使用できない文字を用いる必要があり、もしフィールド内にデリミタと同じ文字が含まれていると、データが正しく解釈されません。レコード間には構造的な関連性はありません。
Unix系のオペレーティングシステムにおける `/etc/passwd` や `/etc/group` ファイルは、フラットファイルの典型的な例です。例えば、名前、住所、電話番号を各行に記述したファイルは、住所録のフラットファイルと見なすことができます。手書きで作成したり、
タイプライターやワープロソフトで作成することも可能です。
計算機械の初期の用途として、単純な
データベースの実装がありました。ハーマン・ホレリスは、国勢調査のデータを
パンチカードで表現し、機械で集計するというアイデアを考案しました。このアイデアは
アメリカ合衆国国勢調査局に採用され、1890年の国勢調査では初めて計算機械を使ってデータ処理が行われました。この時の
データベースは、大量の
パンチカードで構成されていました。
ホレリスの会社は後に
IBMとなり、
IBMは20世紀のデータ処理市場を支配しました。
IBMの80桁の
パンチカードは、1970年代までデータ入力の主要な手段として広く利用されました。
1980年代には、DOSやMacintosh上で動作する設定変更可能なフラットファイル
データベースアプリケーションが多数開発されました。これらのアプリケーションは、個人向けの
データベースを容易に作成でき、
ワードプロセッサや
表計算ソフトと同程度に普及しました。初期の
FileMakerやPC-Fileなどがその例です。これらのアプリケーションでは、データの関係を表す機能は限定的でしたが、複数のファイル間でデータを共有することができました。
最近の実装
現在では、企業向けの
データベースとしてFairComのC-treeなどが利用されています。しかし、一般のユーザーが簡単に利用できるフラットファイル
データベースのソフトウェアは少なくなっています。
Microsoft Worksや
AppleWorksのようなアプリケーションには、
データベース機能が含まれているものもありました。また、ParadoxやMicrosoft Accessのような
データベースソフトは、関係
データベースの機能に加え、
プログラミング言語も組み込まれるようになりました。
MySQLやOracleのような
データベース管理システム(DBMS)は、一般のユーザーが直接扱うには複雑であり、プログラマがアプリケーションを開発して利用します。
多くのアプリケーションでは、設定データなどを保存するために内部的にフラットファイル
データベースを使用しています。コレクション管理ソフトやスケジュール管理ソフトのようなアプリケーションでは、ユーザーが入力した情報が内部でフラットファイルに保存されていることがあります。小規模な住所録ソフトなども、内部ではフラットファイルを使用していることが多いです。
XMLは、
プレーンテキストファイルにデータを格納するための形式としてよく使われますが、XMLは構造が厳格に定義されており、フラットファイルとは異なります。
用語
「フラットファイル
データベース」という用語は、
データベースの文脈で狭い意味で使われる場合と、一般的に広い意味で使われる場合があります。
狭い意味では、レコード長やデリミタに関わらず、データ以外の情報を含まないファイルを指します。広い意味では、単一のファイルで構成される
データベースで、表形式のデータが格納されているものの、フィールドやレコード間にリンクや関連性がないものを指します。
データベースや関連ツールの用語は実装によって異なりますが、概念は共通です。例えば、
FileMakerの「Find」は、
MySQLの「Query」と同じ概念であり、
FileMakerの「ファイル」は
MySQLの「テーブル」と同じです。ただし、「レコード」と「フィールド」という基本用語は、ほとんどすべてのフラットファイル
データベース実装で共通して使用されます。
フラットファイル
データベースの基本的な構成要素を例を挙げて解説します。
データは行と列で構成され、表形式で表現されます。以下の例では、単一のテーブルを使用します。
id | name | team |
---|
-- | - | --- |
1 | Amy | Blues |
2 | Bob | Reds |
3 | Chuck | Blues |
4 | Dick | Blues |
5 | Ethel | Reds |
6 | Fred | Blues |
7 | Gilly | Blues |
8 | Hank | Reds |
この例では、`id` 列(レコードを一意に識別するための数値)、`name` 列(人物名)、`team` 列(所属チーム名)があります。
このようなデータ表現は、フラットファイル
データベースでは一般的ですが、テキスト表現だけではわからない考慮すべき点があります。
各列には、特定の
データ型が設定されている必要があります。このような制限は通常、規約によって定義されますが、データが関係
データベースシステムに転送されるまで正式に示されないことがあります。
列の区切り
上記の例では、列は空白文字で区切られています。固定長フィールド形式とも言えます。他の
区切り文字を使うこともできます。列やフィールドの区切り方には様々な規約があり、例えば、CSV、
マークアップ言語、
プログラミング言語などで定義されています。固定長でない場合は、デリミタが見つかるまで1文字ずつチェックする必要があり、若干のオーバーヘッドが発生します。しかし、カンマなどのデリミタを使うことで、データ量を削減でき、
データ転送においては重要です。固定長フィールドとデリミタを併用することは少ないですが、高速なフィールド抽出が可能になります。
関係代数
上記の例の行(レコード)は、関係代数におけるタプルの定義に適合しています(この例では3タプル)。最初の行は、フィールド名を定義し、他の行の各値を関連付けます。
テキストファイルでの形式操作は制限が大きいため、上記の例は、
データベース管理システムに転送される前のデータの中間状態を表していると考えるのが妥当です。つまり、フラットファイル
データベースであっても、実際にはデータをフラットファイルの形式で保持し続けるわけではありません。
実用的な実装例
- - Berkeley DB: フラットファイルデータベースでありながら、ACIDトランザクションをサポートしています。
- - Borland Reflex: 過去に存在したデータベースソフトウェアです。
- - TextDB: 高負荷に耐えるフラットファイルベースのデータベースです。
- - Mimesis: 複数のファイルを扱えるフラットファイルデータベースです。
- - MySQL CSV: MySQL 5.x用のストレージエンジンで、CSV形式のファイルをテーブルとして利用できます。
まとめ
フラットファイル
データベースは、その単純さゆえに、多くの場面で活用されています。設定ファイルの保存や、簡易的な
データベースとして、現在でも広く利用されています。複雑な
データベースシステムに比べて、手軽に扱える点が大きなメリットと言えるでしょう。