データベースとは?
データベースとDBMS
データベースの厳密な定義はありませんが、ここでは数ある定義の中から一つ、ご紹介します。“A database is an organized collection of interrelated data that models some aspect of the real-world“(CMU)。つまり、データベースとは、実世界のある側面をモデル化した、秩序だった、相互に関連したデータの集まりを指します。
そんなデータベースとよく間違われるのがデータベース管理システム(DBMS)です。DBMSは、データベースを管理するソフトウェアです。例えば、MySQL、 SQLite、 PostgreSQL、 Oracle Database、MongoDBなどがDBMSに該当します。DBMSの目的は、アプリケーション(データベースの利用者)とデータベースの間に入り、アプリケーションが容易にデータの出し入れできるようにすることです。
初期DBMSの問題
容易に出し入れさせることが目的と言いましたが、初期のDBMSは論理層と物理層が密結合しており、DBMSの開発者も利用者もさまざまな苦労をしていました。ここでは、初期のDBMSを利用するアプリケーション側での問題について順を追って説明したいと思います。
(1) まず、データベースは、実世界のある側面をモデル化した存在です。この例では、学生クラブの部員名簿がモデル化されています。(2)データベースは、2つのCSVファイルから構成されます。学生データと学生が参加するクラブのデータがそれぞれCSVファイルとして表現されています。
(3) 初期DBMSは、データベースの抽象化がうまくできないため、物理ファイルであるCSVファイル単位でやり取りをします。(4)すると、アプリケーション側は、データのread/updateの度に、CSVファイルをパースする必要があるほか、CSVファイルの構成が変わったらそれに追随する必要があります。このようにしばらくの間、DBMSというのはアプリケーションにとって使いやすいと言えるものではありませんでした。
リレーショナルモデルとRDBMS
1970年代、この密結合問題がある革新的なアイデアによって鮮やかに解決されます。1970年に、IBMで働いていたエドガー・F・コッド博士がリレーショナルモデル(関係モデル)を提唱しました。リレーショナルモデルには大きく3つの特徴があります。
1つ目は、シンプルなデータ構造です。データベースは、リレーション(イメージ的には列と行で構成される表)の集まりとして表現されます。2つ目は、高水準な言語によるデータ操作。クエリ言語というものが理論ベースで提案されました。最後は、データの独立性。これは、アプリケーションをデータベースの物理的な側面から分離し、その改変から無関係にすることを指します。つまり、データを物理的にどう表現するかやどこに格納するかなどが関係モデルから切り離されたことで、データの物理構造が変化してもアプリケーションが影響を受けにくくなるということです。
リレーショナルモデルは、データベースをうまく抽象化することで、初期DBMSと比較にならないぐらいデータの出し入れを容易なものにしてくれました。当時、関係モデルのアイデアは非常に革命的だったことから、数多くの議論が生まれましたが、彼の論文発表以降、関係モデルに準拠するDBMSの開発・商業化はどんどん進み、結果的には業界のデファクトになりました。そういう背景もあり、DBMSと言えば、伝統的に関係モデル準拠を指します (正確にはRDBMSです)。
データモデル
次にデータモデルの話をします。リレーショナルモデルは、データモデルの一種です。データモデルとは、対象の実世界をデータで表現するための概念の集まりを指します。そして、データモデルで記述された具体的なデータの集まりは、スキーマと呼ばれます。下図は、データモデルを使用したデータベースのデータモデリングを表しています。
リレーショナルモデル登場以前には、ネットワークモデルや階層モデルというデータモデル準拠のDBMS もありました。それらのDBMSを第一世代DBMSと呼ぶ場合もあります。RDBMSはそれに続くものなので第二世代DBMSとも呼ばれます。
リレーショナルモデル登場以降、何十年もの間、アプリケーション開発においては、リレーショナルモデルが主に使われていました。しかし、2000年代以降、柔軟性、スケーラビリティ、機能性などの面でリレーショナルモデルより優れたデータモデルが採用されるケースが増えてきました。これらの新しいデータモデルをそれまでと区別するためにNoSQLという用語が登場しました。非リレーショナルという意味です。代表的なNoSQLには、ドキュメント、キーバリュー、グラフベース、カラムファミリーなどが含まれます。
この連載の中心はリレーショナルなもの(リレーショナルモデル、RDB、RDBMS、SQL)なので、非リレーショナルなNoSQLは触れません。しかしながら、アプリケーション開発をする方なら、今後触れる機会が増えていくに違いないので、ぜひチェックしていただきたい技術領域です。