Definition:Relational Database
RDB(関係データベース)とは,データを行(row)と列(column)から成る二次元の表(テーブル、リレーション)の形式で構造化して格納し、テーブル間の関係(リレーション)に基づいてデータを管理するデータベースのことを言う。
関係モデルの意義を理解するためには、それ以前に主流であったデータモデルとの対比が不可欠である。1960年代から1970年代初頭にかけて、大規模データベース管理システムとして広く用いられていたのは、階層モデル(hierarchical model)とネットワークモデル(network model)の二つであった。
階層モデルは、IBM社が1966年に開発した IMS(Information Management System)に代表される。データはツリー構造として表現され、各レコードは一つの親レコードのみを持つ。この制約により、多対多の関係を自然に表現することが困難であった。
一方、ネットワークモデルは、1969年にCODASYL(Conference on Data Systems Languages)によって標準化された。階層モデルと異なり、一つのレコードが複数の親を持つことを許容し、より柔軟な関係表現を可能にしたが、データへのアクセスはポインタを辿るナビゲーショナルな手続き(navigational access)に依存しており、アプリケーションプログラムがデータの物理的な格納構造を意識せざるを得ないという問題を抱えていた。
これらのモデルにおいては、問い合わせを行うたびに、プログラマがどの経路でレコード間のリンクを辿るかを明示的に記述する必要があり、データの格納構造を変更するとアプリケーションプログラムの修正が不可避であった。この「データ独立性の欠如」が、後に関係モデルが解決を試みる中心的課題となった。
エドガー・フランク・コッド(Edgar Frank Codd)は、英国生まれの数学者・計算機科学者であり、オックスフォード大学で数学を専攻した後、1949年にIBM社に入社した。1960年代を通じて多重処理システムの研究に従事した後、データベースの理論研究に転じた。
コッドは1970年、ACM(Association for Computing Machinery)の学会誌『Communications of the ACM』に論文「A Relational Model of Data for Large Shared Data Banks」を発表した。この論文でコッドは、データを集合論に基づく「関係(relation)」として捉え、データの論理構造を格納方式や探索アルゴリズムから完全に分離するという構想を提示した。
コッドがこの構想に至った背景には、当時のネットワークモデルに基づくシステムが抱えていた保守性の低さへの問題意識があった。コッドは、ユーザーやアプリケーション開発者が「データがどのように格納されているか」を意識することなく、「何を求めているか」のみを記述できる問い合わせ言語こそが望ましいと考えた。この思想は後に「宣言的(declarative)問い合わせ」という概念として結実する。
なお、コッドの提案は発表当初、IBM社内でも懐疑的に受け止められた。既存の階層モデル・ネットワークモデル製品(IMSなど)からの移行コストや、関係モデルの理論的な性能面での懸念があったためである。この懐疑を乗り越え、関係モデルの実用性を示す必要から、後述するSystem Rプロジェクトが立ち上げられることとなった。
関係モデルにおける基本的な構成要素を、より厳密に定義する。
属性の集合を $U = \{A_1、 A_2、 \ldots、 A_n\}$ とし、各属性 $A_i$ に対して定義域(ドメイン)$dom(A_i)$ が定められているとする。このとき、関係スキーマは属性集合として定義される。
\[R = \{A_1、 A_2、 \ldots、 A_n\}\]
関係スキーマ $R$ に対する関係インスタンス(実際のデータの集合)$r$ は、各属性の定義域の直積の有限部分集合として定義される。
\[r \subseteq dom(A_1) \times dom(A_2) \times \cdots \times dom(A_n)\]
$r$ の各要素はタプルと呼ばれ、次のように表記される。
\[t = \langle t[A_1]、 t[A_2]、 \ldots、 t[A_n] \rangle\]
ここで $t[A_i]$ はタプル $t$ の属性 $A_i$ に対する値を表す。関係は数学的には集合であるため、以下の性質が成立する。
関係代数は、コッドが1970年の論文および1972年の続報で提示した、関係に対する演算の体系である。基本演算は以下の八種類に整理される。
・和集合(union):$R \cup S$。両者が同じ属性構成(和両立、union-compatible)であることを要する。・差集合(set difference):$R - S$・直積(Cartesian product):$R \times S$・選択(selection):$\sigma_{\theta}(R)$。条件 $\theta$ を満たすタプルのみを取り出す。・射影(projection):$\pi_{A_1、 \ldots、 A_k}(R)$。指定属性のみを取り出し、結果として重複するタプルは除去される。・名前変更(rename):$\rho_{S(B_1、 \ldots、 B_n)}(R)$
これらのうち、和集合・差集合・直積・選択・射影の五つが基本演算(primitive operations)であり、残りの演算(共通集合、結合、商など)はこれら基本演算の組み合わせとして定義可能であることが示されている。
たとえば結合(join)は、直積と選択の組み合わせとして定義できる。
\[R \Join_{\theta} S \;=\; \sigma_{\theta}(R \times S)\]
共通する属性名に基づく自然結合(natural join)は、次のように定義される。
\[R \Join S \;=\; \pi_{U}\big(\sigma_{R。A_1 = S. A_1 \,\land\, \cdots \,\land\, R.A_k = S. A_k}(R \times S)\big)\]
ここで $A_1, \ldots, A_k$ は $R$ と $S$ に共通する属性である。
さらに、通常の結合ではいずれかの関係にのみ存在するタプル(相手側に対応するタプルを持たないもの)が結果から除外されるのに対し、外部結合(outer join)は、対応するタプルが存在しない側の属性値をNULLで埋めた上で、そのタプルを結果に含める。左外部結合、右外部結合、完全外部結合の三種が存在する。
商演算(division)は、「$R$ に含まれるすべての $S$ の組み合わせを持つ」という、全称量化子に対応する問い合わせを表現するための演算であり、基本演算のみを用いると次のように構成できる。
\[R \div S \;=\; \pi_{X}(R) - \pi_{X}\big((\pi_{X}(R) \times S) - R\big)\]
ここで $X$ は $R$ の属性のうち $S$ に含まれないものの集合である。この商演算は「すべての」という条件を扱う問い合わせ(例:全科目で合格した学生を求める、など)に対応する。
関係代数が手続き的な言語であるのに対し、コッドは非手続き的な問い合わせ言語として関係論理(relational calculus)を提示した。関係論理には、タプル関係論理(tuple relational calculus)とドメイン関係論理(domain relational calculus)の二種がある。
タプル関係論理における問い合わせは、タプル変数 $t$ を用いて次の形式で表現される。
\[\{\, t \mid \varphi(t) \,\}\]
ここで $\varphi(t)$ は、タプル変数に関する原子論理式(atomic formula)を、論理積($\land$)、論理和($\lor$)、否定($\lnot$)、存在量化子($\exists$)、全称量化子($\forall$)によって結合した論理式である。
ドメイン関係論理は、タプル全体ではなく個々の属性値(ドメイン変数)を対象とする点で異なる。
\[\{\, \langle x_1, x_2, \ldots, x_n \rangle \mid \varphi(x_1, x_2, \ldots, x_n) \,\}\]
QBE(Query By Example)は、このドメイン関係論理を視覚的な表形式のインターフェースとして実装したものであり、1970年代半ばにIBM社のモシェ・ザルーアによって開発された。
関係論理を無制限に用いると、無限集合を結果として導出しうる論理式(例:「$x$ が $R$ に属さない」といった否定条件のみからなる式)を記述できてしまうため、有限のデータベースに対して意味のある(有限の)結果を常に返すことを保証するために、論理式を「安全(safe)」なものに制限する必要がある。コッドは、関係代数によって表現可能な問い合わせのクラスと、安全な関係論理式によって表現可能な問い合わせのクラスが完全に一致することを証明し、これを関係的完全性(relational completeness)と呼んだ。この定理は、後にSQLをはじめとする問い合わせ言語が備えるべき表現力の基準として広く参照されることとなった。
関数従属性 $X \rightarrow Y$ の理論は、コッド自身による初期の提示の後、ウィリアム・アームストロング(William W。 Armstrong)によって1974年に公理化された。アームストロングの公理系は以下の三規則から構成される。
この三規則は健全(sound)かつ完全(complete)であることが証明されている。すなわち、これらの規則から導出可能な関数従属性の集合は、実際に成立する関数従属性の集合と過不足なく一致する。さらに、これらの基本規則から以下の派生規則が導かれる。
関数従属性の集合 $F$ が与えられたとき、$F$ から論理的に導出可能な関数従属性すべての集合を、$F$ の閉包(closure)と呼び、$F^+$ と表記する。また、属性集合 $X$ に対し、$F$ のもとで $X$ から関数的に決定される属性すべての集合を $X$ の属性閉包と呼び、$X^+$ と表記する。正規化の判定やキーの導出は、この属性閉包の計算アルゴリズムに基づいて機械的に行うことができる。
正規化理論は、関数従属性に基づく異常性の排除を段階的に進める設計指針として整理されている。
BCNFは3NFよりも厳密であるが、BCNFへの分解を行うと、元の関係が持っていたすべての関数従属性を分解後の関係の結合によって復元できなくなる(従属性保存性、dependency preservation の喪失)場合があることが知られている。このトレードオフは、正規化理論における既知の限界の一つである。
さらに、関数従属性だけでは捉えられない冗長性に対応するため、多値従属性(multivalued dependency)の概念に基づく第四正規形(4NF)、および結合従属性(join dependency)に基づく第五正規形(5NF、射影結合正規形とも呼ばれる)が、1970年代後半にロナルド・ファーギン(Ronald Fagin)によって定式化された。
多値従属性 $X \twoheadrightarrow Y$ は次のように定義される。関係 $r$ の任意の二つのタプル $t_1、 t_2$ が $t_1[X] = t_2[X]$ を満たすならば、$r$ の中に次を満たすタプル $t_3、 t_4$ が存在する。
\[t_3[X] = t_4[X] = t_1[X]、\quad t_3[Y] = t_1[Y]、\ t_3[Z] = t_2[Z]、\quad t_4[Y] = t_2[Y]、\ t_4[Z] = t_1[Z]\]
ここで $Z = U - X - Y$ である。この従属性は、互いに独立した二つの多値の属性を一つの関係に無理に格納した際に生じる冗長性を捉えるものである。
コッドの理論を実用システムとして検証するため、1970年代に二つの主要な研究プロジェクトが並行して進められた。
IBM社サンノゼ研究所の System R プロジェクト(1974年開始)では、以下の要素技術が確立された。
・SEQUEL(後にSQLと改称)と呼ばれる問い合わせ言語の設計。当初は「構造化英語問い合わせ言語」を志向し、自然言語に近い構文(SELECT、 FROM、 WHEREなど)を採用した。
一方、カリフォルニア大学バークレー校の Ingres プロジェクト(マイケル・ストーンブレーカー、ユージン・ウォンらが主導、1973年開始)では、独自の問い合わせ言語 QUEL が開発された。Ingresは大学発のプロジェクトであったため、そのソースコードは比較的自由に配布され、後年多くの派生プロジェクト(Sybase、Informixなど)や、ストーンブレーカー自身による後継プロジェクトである POSTGRES(1980年代後半、オブジェクト関係モデルの導入を志向)を通じて、PostgreSQLの直接の源流となった。
System Rの成果が公開されると、これに触発されたラリー・エリソンらが1977年にリレーショナル・ソフトウェア社(後のオラクル社)を設立し、1979年、SQLを採用した商用RDBMSとして初めて Oracle Version 2 を市場に投入した(興味深いことに、IBM自身が商用製品としてSQL/DS、DB2を発表するよりも先行していた)。
IBM社は1981年にSQL/DSを、1983年には汎用機向けにDB2を発表した。同時期、Sybase(1984年設立)やInformix、Ingresを商用化した Relational Technology 社などが市場に参入し、1980年代を通じてRDBMSは企業の基幹業務システムにおける標準的なデータ管理方式としての地位を確立した。
問い合わせ言語としてのSQLは、複数ベンダーの実装が乱立する状況を踏まえ、1986年にANSI(米国規格協会)によってSQL-86として標準化され、1987年にはISO(国際標準化機構)によっても採択された。その後も以下のように継続的に改訂されている。
ACID特性(原子性・一貫性・独立性・永続性)という語は、1983年にテオ・ハーダー(Theo Härder)とアンドレアス・ロイター(Andreas Reuter)による論文において初めて明示的にまとめられた。
RDBMSにおいて、SQLで記述された宣言的な問い合わせは、以下の段階を経て実行される。
インデックス構造として広く用いられるB木(B-tree、および多分岐平衡木の一種であるB+木)は、ディスクI/Oの回数を対数オーダーに抑えることで、大規模なテーブルに対する検索性能を保証する。
2000年代後半以降、ウェブサービスの大規模化に伴い、単一のRDBMSでは水平方向のスケーラビリティ(複数の機器への分散)の実現が困難であるという課題が顕在化した。この文脈で、エリック・ブリューワー(Eric Brewer)が2000年に提示したCAP定理が広く参照されるようになった。CAP定理は、分散システムにおいて一貫性(Consistency)、可用性(Availability)、分断耐性(Partition tolerance)の三特性を同時に完全に満たすことはできないとする定理である。
この理論的制約を踏まえ、厳密なACID特性よりも、可用性とスケーラビリティを優先し、一定の遅延の後にデータの一貫性が達成されることを許容するBASE特性(Basically Available、 Soft state、 Eventually consistent)を志向するNoSQLデータベース(キーバリュー型、ドキュメント型、カラム指向型、グラフ型)が台頭した。
もっとも、近年ではGoogle Spannerに代表されるNewSQLと呼ばれる分野のように、分散環境においてもSQLインターフェースと強い一貫性・ACID特性を維持しようとする設計も登場しており、関係モデルの理論的枠組みそのものが分散システムの文脈で再評価されている。
Mathematics is the language with which God has written the universe.