http://martinfowler.com/bliki/DataModels.html

Tsichritzis と Lochovsky のデータモデル本が以前好きでした。 この本では、様々なデータモデル考え方が議論されていました。 当時は特に以下の3つのモデルがよく取り上げられていました。 リレーショナル型データモデル階層型データモデル、そしてネットワーク型データモデルです。

最近はデータモデルの良し悪しについて議論されているのをあまり見かけなくなりました。 話しているのはデータベース人間くらいでしょうか。ほとんどのひとは、リレーショナル型モデルが勝利して決着がつき、ずいぶん時間が経ったと思っているようです。

果たしてそうなのでしょうか? 物事はだんだん面白くなってきてますよ。

データベースの世界でリレーショナル型モデルが優勢であることは疑う余地もないことでしょう。今日、ほとんどすべてのビジネスアプリケーションがSQLデータベースを使っています。99%がそうじゃないでしょうか。 けれども、メモリ内のデータ構造を見てみると、また違った世界が見えると思います。ここではネットワーク型モデルがひとり勝ちしているのです。 確かに、ディスク上のリレーショナル型モデルをメモリ内のネットワーク型モデルに合わせようと頑張っているひとがたくさんいますもんね(ドメインモデル貧血症の理由のひとつがコレなんじゃないかと私は思っているのですが)。

これは面白いことです。私は何度も「なぜ(オブジェクトの)リレーションをレコードに合わせるような煩わしいことをわざわざやるのか?」と聞きました。返ってきた答えの多くは、要約するとつまりこういうことでした。「開発者はリレーショナル型モデルよりもネットワーク型モデルのほうが扱いやすいと思っている」。もちろんいつもこれが当てはまるわけではありませんが、私はレコードが好きなひとのほうが多いようには思えません (★?)。

これは、データベースにとってのSQLのようなものが、メモリ内の処理には存在しないということに関係があるかもしれません。リレーショナル的に考える(thinking relationally)ということは、ADO.NETで面白いと思ったことのひとつでもあります。リレーショナル型のデータセットを扱いたくないというひとたちが、またここにも大勢いました(★?)。


(★逆の意味となるので、元の訳も残します。こちらの訳では「records」は単にネットワーク型のオブジェクトのコレクションを意味します。なぜならNetworkDataModelに、「データをレコードとして構築する」との記述があるからです。どちらが正しいかはkdmsnrさんが判断してくださいますか?)

これは興味深いことです。私はことあるごとに「なぜ文句を垂れながらリレーションをレコードに変えるような面倒なことをするのか?」と聞いて来ました。私が得た答は多少の差はあるものの、詰まるところほとんどの開発者はリレーショナル型モデルよりネットワーク型モデルのほうが扱い易いと感じているということです。これがすべての場合では無いでしょうが、でも私はレコードが好きな人が大半なんだなと考えざるを得ません。

これは、多分データベースをうまく扱えるSQLに相当するものがメモリ内の処理には存在しないということに関係があるかもしれません。関連の重視(★?)は、ADO.NETで面白いと思ったことのひとつでもあります。私はここでも、開発者の大半がリレーショナル型のようにデータセットを扱うことを望んでいないことを思い知らされました。


いまのデータモデル事情に対してぐんぐん挑戦してきているのがXMLの躍進っぷりです。 XMLベースの技術(XPath、XQueryなど)は階層型データ構造にアクセスする標準的な方法を提供してくれます。XMLにより標準的なテキストベースのデータシリアライゼーションが可能だということは、階層型データへの標準的なクエリ方法および操作方法があるおかげです。

抜本的な技術変化は、データモデル事情にさらなる激震を走らせると思います。 メモリサイズは日々増加し、価格は下がり続けています。 データセットをすべてメモリ内に格納できる日がますます近づいてきました。 変化に強いメカニズムを組み込み、根本的にまったく異なる振る舞いをするデータベースを手に入れるのです。 (Prevaylerにこういった考えの例がありますので見てみてください。 私には彼らのいう効率化の係数がどれだけ妥当なものであるか分かりませんが、それがちょっとやそっと少なくなったとしても、やはり強烈なものであるはずです)

もう一度、どのデータモデルが理にかなっているのか見つめなおす時がきたかもしれません。これらのモデルの基本的なところから考え始めるのです。 データの種類によって適切なデータモデルは違うというのが私の考えです。 表形式のデータにはリレーショナル型モデルが適しています。 しかし、The Tempestを格納するにはまったく向いていません。 ということは、違ったデータモデル、そのデータモデルを扱う技術、そして、どういったデータの種類がそれにふさわしいのかに注目するのがいいのかもしれません。