「オブジェクト関係データベース」の版間の差分
編集の要約なし |
|||
10行目: | 10行目: | ||
RDBMS ([[関係データベース管理システム]]) では、次のような[[SQL]]文を記述できる ([[MySQL]]での例) 。 |
RDBMS ([[関係データベース管理システム]]) では、次のような[[SQL]]文を記述できる ([[MySQL]]での例) 。 |
||
< |
<syntaxhighlight lang="sql"> |
||
CREATE TABLE Customers ( |
CREATE TABLE Customers ( |
||
Id CHAR(12) NOT NULL PRIMARY KEY, |
Id CHAR(12) NOT NULL PRIMARY KEY, |
||
17行目: | 17行目: | ||
DateOfBirth DATE NOT NULL |
DateOfBirth DATE NOT NULL |
||
) |
) |
||
</syntaxhighlight> |
|||
</source> |
|||
<source lang="sql"> |
<source lang="sql"> |
||
28行目: | 28行目: | ||
現在のほとんどのRDBMSでは、ユーザ定義[[関数 (プログラミング)|関数]]を定義することができる。ユーザ定義関数を使って上記の問い合わせを記述し直すと次のようになるであろう。 |
現在のほとんどのRDBMSでは、ユーザ定義[[関数 (プログラミング)|関数]]を定義することができる。ユーザ定義関数を使って上記の問い合わせを記述し直すと次のようになるであろう。 |
||
< |
<syntaxhighlight lang="sql"> |
||
SELECT Formal(Id) |
SELECT Formal(Id) |
||
FROM Customers |
FROM Customers |
||
WHERE Birthday(Id) = Today() |
WHERE Birthday(Id) = Today() |
||
</syntaxhighlight> |
|||
</source> |
|||
<!-- NOTE: Rather than fix this, only to have it unfixed '''yet''' again, let it stand as an example. The first SQL SELECT statement quoted above is both non-standard, and wrong. InitCap() isn't SQL-92 (or SQL-3), and the query's logic misses Customers born on a leap-day (171,000 United States citizens) for three years out of four. --> |
<!-- NOTE: Rather than fix this, only to have it unfixed '''yet''' again, let it stand as an example. The first SQL SELECT statement quoted above is both non-standard, and wrong. InitCap() isn't SQL-92 (or SQL-3), and the query's logic misses Customers born on a leap-day (171,000 United States citizens) for three years out of four. --> |
||
ORDBMS (オブジェクト関係データベース管理システム) でも、このような記述をすることができる。BirthDay() のようなユーザ定義のデータ型と式を定義することができる。すなわち次のように記述できるであろう。 |
ORDBMS (オブジェクト関係データベース管理システム) でも、このような記述をすることができる。BirthDay() のようなユーザ定義のデータ型と式を定義することができる。すなわち次のように記述できるであろう。 |
||
< |
<syntaxhighlight lang="sql"> |
||
CREATE TABLE Customers ( |
CREATE TABLE Customers ( |
||
Id Cust_Id NOT NULL PRIMARY KEY, |
Id Cust_Id NOT NULL PRIMARY KEY, |
||
43行目: | 43行目: | ||
DateOfBirth DATE NOT NULL |
DateOfBirth DATE NOT NULL |
||
) |
) |
||
</syntaxhighlight> |
|||
</source> |
|||
< |
<syntaxhighlight lang="sql"> |
||
SELECT Formal( C.Name ) |
SELECT Formal( C.Name ) |
||
FROM Customers C |
FROM Customers C |
||
WHERE BirthDay ( C.DateOfBirth ) = TODAY; |
WHERE BirthDay ( C.DateOfBirth ) = TODAY; |
||
</syntaxhighlight> |
|||
</source> |
|||
ORDBMSのもう一つの特長は、データベースがデータ間の関連を利用することができ、関連するデータを容易に辿ることができることである。 |
ORDBMSのもう一つの特長は、データベースがデータ間の関連を利用することができ、関連するデータを容易に辿ることができることである。 |
||
64行目: | 64行目: | ||
ORDBMSでは、上記と同じ検索問い合わせを非常に簡潔に記述することができる。 |
ORDBMSでは、上記と同じ検索問い合わせを非常に簡潔に記述することができる。 |
||
< |
<syntaxhighlight lang="sql"> |
||
SELECT Formal( C.Name ) |
SELECT Formal( C.Name ) |
||
FROM Customers C |
FROM Customers C |
||
WHERE C.address.city = 'New York' -- 関連はORDBMSにより「認識」される |
WHERE C.address.city = 'New York' -- 関連はORDBMSにより「認識」される |
||
</syntaxhighlight> |
|||
</source> |
|||
== 歴史 == |
== 歴史 == |
2020年7月5日 (日) 22:51時点における版
データベースモデル |
---|
基本的なモデル |
階層 |
ネットワーク |
関係 |
オブジェクト関係 |
オブジェクト |
その他のモデル |
多次元 |
スタースキーマ |
XMLデータベース |
列指向 |
Associative |
Concept-oriented |
オブジェクト関係データベース (オブジェクトかんけいデータベース、オブジェクトリレーショナルデータベース、英: 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での例) 。
CREATE TABLE Customers (
Id CHAR(12) NOT NULL PRIMARY KEY,
Surname VARCHAR(32) NOT NULL,
FirstName VARCHAR(32) NOT NULL,
DateOfBirth DATE NOT NULL
)
SELECT InitCap(Surname) || ', ' || InitCap(FirstName)
FROM Customers
WHERE Month(DateOfBirth) = Month(getdate())
AND Day(DateOfBirth) = Day(getdate())
現在のほとんどのRDBMSでは、ユーザ定義関数を定義することができる。ユーザ定義関数を使って上記の問い合わせを記述し直すと次のようになるであろう。
SELECT Formal(Id)
FROM Customers
WHERE Birthday(Id) = Today()
ORDBMS (オブジェクト関係データベース管理システム) でも、このような記述をすることができる。BirthDay() のようなユーザ定義のデータ型と式を定義することができる。すなわち次のように記述できるであろう。
CREATE TABLE Customers (
Id Cust_Id NOT NULL PRIMARY KEY,
Name PersonName NOT NULL,
DateOfBirth DATE NOT NULL
)
SELECT Formal( C.Name )
FROM Customers C
WHERE BirthDay ( C.DateOfBirth ) = TODAY;
ORDBMSのもう一つの特長は、データベースがデータ間の関連を利用することができ、関連するデータを容易に辿ることができることである。 住所録アプリケーションにおいては、住所録に載せる一人一人に対して複数の住所を記録するために、もう一つテーブルを追加することになるであろう。従来のRDBMSを使うと、人物と住所のデータを検索するために結合が必要になる。 従来のRDBMSを使った場合の検索問い合わせは次のようになる。
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では、上記と同じ検索問い合わせを非常に簡潔に記述することができる。
SELECT Formal( C.Name )
FROM Customers C
WHERE C.address.city = 'New York' -- 関連はORDBMSにより「認識」される
歴史
ORDBMS (オブジェクト関係データベース管理システム) は、1990年代始めから開始された研究から発展してきた。 この研究は、従来の関係モデルに基づいた関係データベースの概念を拡張してオブジェクト (オブジェクト指向) の概念を追加するものであった。 この研究のORDBMSの考えは、アーキテクチャの中核部分に述語計算に基づく宣言的なデータベース言語 (問い合わせ言語) を引き継いでいた。 おそらく最も特筆すべき研究プロジェクトはマイケル・ストーンブレーカーが主導した Postgres (カリフォルニア大学バークレー校) であろう。この研究はIllustraとPostgreSQLの源流となっている。
1990年代半ばに、初期の商用製品が現れた。 こうした商用製品には次のものが含まれる。
- Illustra [1] (Illustra Information Systems、後にInformixにより買収され、さらにそのInformixはIBMに買収された)
- Omniscience (Omniscience Corporation、後に Oracle Corporation により買収されオリジナルの Oracle Lite となった)
- UniSQL (UniSQL, Inc.、後にKCOMSにより買収された)
こうした製品は「オブジェクト関係データベース管理システム」(ORDBMS) と呼ばれるようになった[2]。 また同じく1990年代半ばには、ウクライナのソフトウェア開発者 Ruslan Zasukhin が Valentina の最初のバージョンを C++データベースSDK として開発しリリースした。
初期の ORDBMS を開発する努力から生み出された概念の多くは、データベース言語標準 SQL:1999 に大規模に追加された。 実際には、SQL:1999 のオブジェクト指向機能を何らかの水準で備えるどのような製品も、ORDBMS製品であるということはできるかもしれない。 例えば、IBM DB2 、Oracle Database 、Microsoft SQL Server は、それぞれ、ORDBMS技術に準拠していると主張しているが、ORDBMS技術準拠の達成水準は製品によりさまざまである。
脚注
- ^ Stonebraker, Michael with Moore, Dorothy. Object-Relational DBMSs: The Next Great Wave. Morgan Kaufmann Publishers, 1996. ISBN 1-55860-397-2.
- ^ このとき一部の人々は、ORDBMS という用語を造語したのは、Illustra の主開発者のマイケル・ストーンブレーカーであったか、それとも UniSQL の主開発者のウォン・キムであったかをめぐって、論争した
関連項目
外部リンク
- An interesting discussion about object-oriented vs. relational databases
- PolePosition Benchmark -- オブジェクトリレーショナルインピーダンスミスマッチの状況における解決策について性能面のトレードオフを示す
- RDBMS != Object Store -- 関係データベースとオブジェクトストアの違いに関する説明