オブジェクト関係データベース (Object-Relational Database; ORDB)とは
オブジェクト関係
データベース (ORDB) は、関係
データベース管理システム (RDBMS) を拡張した
データベースシステムです。RDBMSが事前に定義された
データ型のみを扱うのに対し、ORDBでは開発者が
データ型とメソッドを自由に定義できます。これにより、より複雑なデータ構造やビジネスロジックを
データベース内で直接扱えるようになります。ORDBは、
ソフトウェア開発者が問題領域の抽象化レベルを高く保ち、
データベース設計の詳細に過度に煩わされることなく開発を進めることを目指しています。
RDBMSとの比較
従来のRDBMSでは、
SQLなどの標準的な
データベース言語を用いて、事前に定義された
データ型(整数、文字列、日付など)を操作します。
例えば、
MySQLで以下のような
SQL文を使って、社員の誕生日を抽出するクエリを記述できます。
sql
SELECT name, birthday FROM employees WHERE YEAR(birthday) = 1990;
しかし、RDBMSでは、より複雑な
データ型や操作を扱うには限界があります。そこで、ユーザ定義関数を利用して、上記クエリを次のように書き換えることも可能です。
sql
SELECT name, BirthDay(birthday) FROM employees WHERE YEAR(birthday) = 1990;
一方、ORDBMSでは、
データ型とメソッドを自由に定義できます。例えば、`BirthDay()`のようなユーザ定義の
データ型と式を定義することで、クエリをより直感的に記述できます。
sql
SELECT name, BirthDay(birthday) FROM employees WHERE BirthDay(birthday) = '1990/01/01';
さらに、ORDBMSはデータ間の関連を容易に扱うことができます。例えば、住所録アプリケーションでは、人物と複数の住所を関連付ける際に、RDBMSでは結合が必要となります。RDBMSでの検索クエリは以下のようになります。
sql
SELECT p.name, a.address FROM persons p JOIN addresses a ON p.id = a.person_id WHERE p.name = 'John Doe';
ORDBMSでは、より簡潔に同様のクエリを記述できます。
sql
SELECT p.name, p.addresses FROM persons p WHERE p.name = 'John Doe';
歴史
ORDBMSの研究は1990年代初頭に始まりました。この研究は、
関係モデルに
オブジェクト指向の概念を追加することを目指しました。初期の研究プロジェクトとして、
マイケル・ストーンブレーカーが主導した Postgres が特に有名です。Postgresは、Illustraと
PostgreSQLの源流となっています。
1990年代半ばには、Illustra、Omniscience、Uni
SQLなどの商用ORDBMSが登場しました。これらのシステムは、
オブジェクト指向の機能を提供することで、
データベースの柔軟性と表現力を向上させました。また、同時期にRuslan Zasukhinによって開発されたValentinaは、
C++データベースSDKとしてリリースされました。
ORDBMSの概念は、
データベース言語標準
SQL:1999 にも影響を与えました。現在では、
IBM DB2、Oracle Database、
Microsoft SQL Serverなどの主要なRDBMSも、ORDBMSの機能を部分的に取り入れています。ただし、ORDBMS技術の準拠レベルは製品によって異なります。
ORDBMSの主な
実装例としては、以下のものがあります。
Illustra (Informixに買収後、IBMに買収)
Informix Dynamic Server (
IBM)
PostgreSQL (オープンソース)
IBM DB2 (
IBM)
Oracle Database (Oracle)
まとめ
ORDBは、RDBMSの柔軟性を拡張し、より複雑なデータやビジネスロジックを扱うための強力なツールです。オブジェクト指向の概念を取り入れることで、開発者はデータモデルをより直感的かつ効果的に設計できます。ORDBは、RDBMSが抱える制約を克服し、より高度なデータベースアプリケーションを開発するための選択肢の一つとなっています。
関連項目
オブジェクト指向
オブジェクトデータベース
オブジェクトリレーショナルマッピング
関係モデル
SQL
外部リンク
An interesting discussion about object-oriented vs. relational databases
PolePosition Benchmark -- オブジェクトリレーショナルインピーダンスミスマッチの状況における解決策について性能面のトレードオフを示す
*
RDBMS != Object Store -- 関係
データベースとオブジェクトストアの違いに関する説明