オブジェクト関係データベース

**オブジェクト関係データベース** (オブジェクトかんけいデータベース、**オブジェクトリレーショナルデータベース**、英: object-relational database; ORD, ORDB) または**オブジェクト関係データベース管理システム** (object-relational database management system; **ORDBMS**) は、コンピュータの関係データベース管理システム (RDBMS、関係データベース) の一種であり、ソフトウェア開発者が自分たちでデータ型とメソッド (この2つの組み合わせはオブジェクト指向でいうオブジェクトのクラスに相当する) を自由に定義してデータベースを開発することができるデータベース管理システム (DBMS) である。「オブジェクト関係データベース」という用語は、時によっては、従来のRDBMSにORDBMSに似た機能を提供する外部ソフトウェア製品をいう場合もある。こうした外部ソフトウェア製品は正確にはオブジェクトリレーショナルマッピングシステムと呼ぶ。

関係モデルに基づくRDBMSもしくはSQL-DBMSでは、SQLなどのデータベース言語標準により事前に規定された限られたデータ型の集合に属するデータについては効果的に扱うことができるが、オブジェクト指向の考え方を採り入れたORDBMSでは、ソフトウェア開発者が自分たちでデータ型とメソッドを自由に定義してデータベースを開発してDBMSに統合させることができる。ORDBMS技術の目標は、ソフトウェア開発者に対して問題領域以下の階層について考えずに済む水準にまでデータベース設計の抽象化の水準を上げることである。

ORDBMSの実装としては、Illustra、Informix Dynamic Server 、PostgreSQL、IBM DB2 、Oracle Database などがある。

## RDBMSとの比較

RDBMS (関係データベース管理システム) では、次のようなSQL文を記述できる (MySQLでの例) 。


```sql
CREATE TABLE Customers  (
   Id          CHAR(12)    NOT NULL PRIMARY KEY,
   Surname     VARCHAR(32) NOT NULL,
   FirstName   VARCHAR(32) NOT NULL,
   DateOfBirth DATE        NOT NULL
)
```



```sql
SELECT InitCap(Surname) || ', ' || InitCap(FirstName)
  FROM Customers
 WHERE Month(DateOfBirth) = Month(getdate())
   AND Day(DateOfBirth) = Day(getdate())
```


現在のほとんどのRDBMSでは、ユーザ定義関数を定義することができる。ユーザ定義関数を使って上記の問い合わせを記述し直すと次のようになるであろう。


```sql
SELECT Formal(Id)
  FROM Customers
 WHERE Birthday(Id) = Today()
```


ORDBMS (オブジェクト関係データベース管理システム) でも、このような記述をすることができる。BirthDay() のようなユーザ定義のデータ型と式を定義することができる。すなわち次のように記述できるであろう。


```sql
CREATE TABLE Customers (
  Id          Cust_Id    NOT NULL PRIMARY KEY,
  Name        PersonName NOT NULL,
  DateOfBirth DATE       NOT NULL
)
```



```sql
SELECT Formal( C.Name )
  FROM Customers C
 WHERE BirthDay ( C.DateOfBirth ) = TODAY;
```


ORDBMSのもう一つの特長は、データベースがデータ間の関連を利用することができ、関連するデータを容易に辿ることができることである。
住所録アプリケーションにおいては、住所録に載せる一人一人に対して複数の住所を記録するために、もう一つテーブルを追加することになるであろう。従来のRDBMSを使うと、人物と住所のデータを検索するために結合が必要になる。
従来のRDBMSを使った場合の検索問い合わせは次のようになる。


```sql
SELECT InitCap(C.Surname) || ', ' || InitCap(C.FirstName), A.city
   FROM Customers C, Addresses A
  WHERE A.Cust_Id = C.Id -- 結合
    AND A.city = 'New York'
```


ORDBMSでは、上記と同じ検索問い合わせを非常に簡潔に記述することができる。


```sql
SELECT Formal( C.Name )
  FROM Customers C
 WHERE C.address.city = 'New York' -- 関連はORDBMSにより「認識」される
```


## 歴史

ORDBMS (オブジェクト関係データベース管理システム) は、1990年代始めから開始された研究から発展してきた。
この研究は、従来の関係モデルに基づいた関係データベースの概念を拡張してオブジェクト (オブジェクト指向) の概念を追加するものであった。
この研究のORDBMSの考えは、アーキテクチャの中核部分に述語計算に基づく宣言的なデータベース言語 (問い合わせ言語) を引き継いでいた。
おそらく最も特筆すべき研究プロジェクトはマイケル・ストーンブレーカーが主導した Postgres (カリフォルニア大学バークレー校) であろう。この研究はIllustraとPostgreSQLの源流となっている。

1990年代半ばに、初期の商用製品が現れた。
こうした商用製品には次のものが含まれる。
* Illustra  (Illustra Information Systems、後にInformixにより買収され、さらにそのInformixはIBMに買収された)
* Omniscience (Omniscience Corporation、後に Oracle Corporation により買収されオリジナルの Oracle Lite となった)
* UniSQL (UniSQL, Inc.、後にKCOMSにより買収された)
こうした製品は「オブジェクト関係データベース管理システム」(ORDBMS) と呼ばれるようになった。
また同じく1990年代半ばには、ウクライナのソフトウェア開発者 Ruslan Zasukhin が Valentina の最初のバージョンを C++データベースSDK として開発しリリースした。

初期の ORDBMS を開発する努力から生み出された概念の多くは、データベース言語標準 SQL:1999 に大規模に追加された。
実際には、SQL:1999 のオブジェクト指向機能を何らかの水準で備えるどのような製品も、ORDBMS製品であるということはできるかもしれない。
例えば、IBM DB2 、Oracle Database 、Microsoft SQL Server は、それぞれ、ORDBMS技術に準拠していると主張しているが、ORDBMS技術準拠の達成水準は製品によりさまざまである。

## 脚注



## 関連項目

* オブジェクト指向
* オブジェクトデータベース
* オブジェクトリレーショナルマッピング
* 関係モデル
* SQL
* 実装
** Illustra
** Informix Dynamic Server (IBM)
** PostgreSQL (自由ソフトウェア/オープンソースソフトウェア) 
** IBM DB2 (IBM)
** Oracle Database (Oracle)

## 外部リンク
* An interesting discussion about object-oriented vs. relational databases
*  PolePosition Benchmark -- オブジェクトリレーショナルインピーダンスミスマッチの状況における解決策について性能面のトレードオフを示す
*  RDBMS != Object Store --  関係データベースとオブジェクトストアの違いに関する説明