関係モデル
SQL(Structured Query Language)は、最初に関係データベースの標準言語となったが、いくつかの面で関係モデル(リレーショナルモデル)から逸脱している。SQLは、これらの関係モデルからの逸脱を根拠として批判されることがある(Date C. J. "Database in Depth" 参照)。2008年現在、ISO SQL 標準は、関係モデルに言及しておらず、関係モデルの用語も概念も使っていない。しかしSQLを使って関係モデルに適合するデータベースを構築することは、いくつかのSQLの機能を使わなければ、可能である。
まずSQLの用語とそれに相当する関係モデルの用語の対応関係を示す。
以下にSQL標準における関係モデルからの逸脱を記述する。ただしSQL標準の全てを実装しているデータベース管理システム (DBMS) はほとんど存在しない。 ここで述べる関係モデルからの逸脱のいくつかについては、ほとんどの SQL DBMS で逸脱している。
NULLはほとんどの SQL DBMS にも存在するが、一つの表(関係モデルでは関係変数に相当)に同じ名称を2つ(以上)の列(属性に相当)に重複してつけることができるかどうか、名前の無い列が許容されるかどうかについては、SQL DBMS ごとにさまざまである。
関係モデルの理解を深めるためには、関係の別の解釈、すなわち述語論理での解釈を理解することが、一つの方法である。このことについての説明をクリス・デイトの著書から引用する。
まず、すべての関係変数には述語が関連づけられており、その関係変数の関係変数述語と呼ばれる。
関係変数 R が述語 P を持つとすれば、ある時点で R に含まれる組 t はすべて、特定の命題 p を表すものと考えることができる。この命題は、t に含まれている属性値を引数として、その時点の P を呼び出す(またはインスタンス化する)ことによって得られる。
そして(非常に重要だが)このようにして得られた命題 p は、慣例として、それぞれ真に評価されると想定される。
このように実体化した組は真と評価される命題とみなすことができる。なぜかというと、関係の本体にその組が登場するからである。これに対し逆に、見出しが関係の見出しに適合するが関係の本体に存在しない全ての組は偽と評価される命題である。
この一つ前の文の根底にある仮説は閉世界仮説として知られており、関係モデルは閉世界仮説に依拠している。
関係の本体は述語論理の文脈では「外延」と呼ばれる。これは関係の本体が関係変数述語の外延として表現されると解釈できることが理由である。
NULLという特別な印(マーク)は、ある行のある列の値など、原則としてどこであれSQLの値を設定できるところであれば値の代わりにつけることができる。この関係モデルからの逸脱は、SQLにおいてこの場当たり的な概念の実装が三値論理の採用と関連しているという事実から、生じる。三値論理においては、NULLをNULL自身と比較すると真(true)とは評価されず、unknown という第三の値に評価される。またNULLをNULL以外の何かと比較すると偽(false)とは評価されず、unknown と評価される。比較におけるこのような振る舞いのために、NULLは値ではなく印(マーク)であると説明されるのである。関係モデルは排中律に依拠している。排中律のもとでは、真と評価されないものは何であれ偽と評価され、偽と評価されないものは何であれ真と評価される。関係モデルでは、関係の本体の全ての組の全ての属性には必ず値が割り当てられている。