オブジェクト指向分析/設計では、データベースをどのように設計するのだろうか。
■オブジェクト指向分析/設計(OOAD)のアーキテクチャ
まず、オブジェクト指向分析/設計(OOAD)のアーキテクチャを見てみましょう。
『UMLモデリングの本質 第2版 良いモデルを作るための知識と実践』より
オブジェクト指向分析/設計では、永続層にオブジェクト指向データベース(OODB)が使われるようになることを期待していたように思います。
オブジェクト指向データベース(OODB)を使えば、インスタンス化したオブジェクトを加工せずにそのまま格納できます。
そのため、データベースの設計は必要ありませんでした。
しかし、2012年現在、オブジェクト指向データベース(OODB)はそれほど使われていないように思います。
現実には、リレーショナルデータベース(RDB)が主流となっています。
■リレーショナルデータベース(RDB)を永続層に使用する場合の設計方法
リレーショナルデータベース(RDB)を永続層に使用する場合、2つの考え方があります。
■■(1)DOA併用
1つは、リレーショナルデータベース(RDB)を生かして、データベースを設計する方法です。
永続層はデータ中心アプローチ(DOA)で設計し、それより上の層はオブジェクト指向分析/設計(OOAD)で設計します。
この手法については、名著『UMLによる一気通貫DBシステム設計』が入門書としておすすめです。
オブジェクト指向分析/設計の対象領域とデータモデリングの対象領域はそれぞれ異なっており、本来は役割分担すべきものなのです。
■■(2)あくまでOODB
もう一つは、リレーショナルデータベース(RDB)をオブジェクトの保存場所として使用します。
オブジェクトの構造とテーブルの構造は一致します。
■■ActiveRecordの場合
Ruby on RailsのO/R マッピングライブラリであるActiveRecordを例に考えてみます。
ActiveRecordライブラリでは、1つのテーブルは1つのクラスに対応します。
これはテーブルはオブジェクトを永続化するための場所として考えているためだと思います。
idはプライマリキーというよりも、オブジェクト識別子(OID)のように見えます。
Railsのマインドセットには「テーブルをオブジェクトと同一構造にし、プライマリーキーにはinteger型のサロゲートキーを設定しておけば、かなり楽になる」というものがある。
ActiveRecordにはComposite Primary Keysという複合主キーの機能を追加するライブラリがあります。
このようなライブラリが必要とされるのは、データベースをDOAで設計しているためではないかと思います。
■考察
-
シンプルなシステムであれば「(2)あくまでOODB」
業務システムなら「(1)DOA併用」だろうか? -
結局はケースバイケースか?