RDB/OODB/XMLDBで比較する永続化設計:JavaのDBアクセスを極める(4)(2/3 ページ)
Webシステムが主流となり、データベース・アプリケーションはJavaやC#といったオブジェクト指向言語で開発することが多くなった。しかし、データベース設計はオブジェクト指向モデルとうまくかみ合わず、データモデル設計に苦労するエンジニアは少なくない。本連載は、オブジェクト指向モデルとデータベースモデルのインピーダンスミスマッチに対応するテクニックを紹介する。(編集局)
オブジェクト指向データベース・システム(OODBMS)
「オブジェクト指向データベース・システム(Object Oriented DataBase Management System)」は、オブジェクト指向言語が扱うオブジェクトを直接データベースに格納できること、データベース上のオブジェクトをメモリ上のオブジェクトと同様に利用できることが特徴です。これによりオブジェクト指向言語との間にギャップはなく、オブジェクト指向による一貫したシステム開発が可能になることが大きなメリットです。
データベースに格納するデータはオブジェクトとして何らかの型を持っていなければなりませんが、OODBMSはアプリケーション・プログラムが定義し、インスタンス化したオブジェクトを加工せずにそのまま格納できます。このとき多くのOODBMSはデータベース上のスキーマの実装が不要で、スキーマを実装してから格納するRDBMSのような手間がありません。
このようにオブジェクト指向言語と非常に親和性の高いOODBMSですが、データベースに格納されたオブジェクトは、そのオブジェクトを定義したアプリケーション以外からは扱いにくいものとなってしまいます。これは複数のサブシステムが1つのデータベースを共有するような場合に、すべてのサブシステムが同一のプログラミング言語で開発されなければならない制約となり、オブジェクト指向言語以外で作成されたサブシステムやオブジェクトモデルが異なるサブシステムからはデータの利用が困難になります。
OODBMSはデータアクセスに問い合わせ言語を利用するRDBMSやXMLDBMSと比べて、アプリケーションとデータベースの結合度が高くなります。これは、リレーショナル・データベースのデータ独立性に反しますが、オブジェクト指向の「手続きとデータは一体である」という基本思想と一致します。
XMLデータベース・システム(XMLDBMS)
「XMLデータベース・システム(Extensible Markup Language DataBase Management System)」は、XMLドキュメントのタグ構造を保ったままデータベースに格納することができ、XMLドキュメントの要素単位で検索および更新が行えるDBMSです。本稿では特にネイティブXMLDBを対象とします。
XMLドキュメントは、スキーマ定義に従った定型の構造を持つValid Document(妥当なXML文書)と、XMLの記述ルールだけを満たし非定型の構造を持つWell-Formed Document(整形式のXML文書)の2つに分類され、XMLDBMSはその両方を扱うことができます。特に情報系システムでマルチメディアデータなどの非定型のデータを扱う場合には、Well-Formed Documentが非常に便利です。XMLドキュメント自身が持つメタデータ(定義情報)を使ってDBMSがスキーマを管理していなくても非定型データを格納できます。
XMLDBMSは非定型データを扱えるのが特徴ですが、困ったことにオブジェクト指向言語をはじめとする数あるプログラミング言語は、型を持った定型データしか扱えません。ここでもデータモデルの差からインピーダンスミスマッチが発生します。これを回避するために、オブジェクトとXMLドキュメントの間でマッピングを行います。これはXMLドキュメントと構造の類似するオブジェクトを用意して、XMLドキュメントの要素をオブジェクトの属性にマッピングしていくという作業で、データバインディングと呼ばれています。
このとき、非定型のXMLドキュメントを過不足なくオブジェクトにマッピングするにはデータの数だけ、あるいはXMLドキュメントをまるごと格納できるようなオブジェクトを用意しなくてはなりません。ただしこの方法は現実的ではないので、多くの場合はアプリケーションが利用する要素のみをマッピングして、残りを切り捨てるといったアプローチを取ります。
このようにXMLドキュメントとオブジェクトをひも付けるデータバインディングは、定型データ同士をひも付けるO/Rマッピングと比べて複雑な作業になります。
ここまでDBMSについて個別に解説してきた内容を表1にまとめます。
名称 | RDBMS | OODBMS | XMLDBMS |
---|---|---|---|
データ表現形式 | リレーション(テーブル) | オブジェクト | XMLドキュメント |
データ構造 | 正規形(定型)の2次元表 | さまざまな定型の構造 | 定型/非定型の入れ子構造 |
スキーマ定義言語 | DDL | ODL | DTD/XML schemaなど |
スキーマ定義 | 必須 | 必須 | 必須ではない |
スキーマ実装 | 必須 | 必須ではない | 必須ではない |
スキーマ管理 | DBMS | アプリケーション | XMLドキュメント |
主な問い合わせ言語 | SQL(非手続き型) | OQL(非手続き型)、プログラミング言語による直接操作(手続き型 | XPath、XQuery(非手続き型) |
標準化 | ISO/ANSI | ODMG | ISO |
モデル化 | ER図 | クラス図 | UML/OOAD |
インピーダンスミスマッチ | あり | なし | あり |
ミスマッチ回避手法 | O/Rマッピング | − | データバインディング |
ロック粒度 | 小 | 大 | 大 |
代表的な製品 | Oracle Database 10g、 IBM DB2 V8、 SQL Server 2000 |
Objectivity/DB、 ObjectStore、 GemStone |
NeoCore XMS、 Tamino XML Server、 EsTerra XML Storage Server、TX1 |
表1 RDBMS/OODBMS/XMLDBMSの特徴 |
Point
- DBMSの最も大きな違いはデータの表現形式の違いである。
- オブジェクト指向言語と組み合わせたとき、OODBMSを除くRDBMS、XMLDBMSとの間でデータモデルの違いからインピーダンスミスマッチが発生する。
- オブジェクトとリレーションのマッピングをO/Rマッピングといい、オブジェクトとXMLドキュメントのマッピングをデータバインディングという。
(次ページへ続く)
Copyright © ITmedia, Inc. All Rights Reserved.