Relational DataBaseと述語論理
Relational Database(RDB)は関係に基づいているので述語論理と関係が深い。少し論文を探したが、その関係をはっきりと書いたものが見つからなかったので覚書として少し書く。探し方が足りないとか、自明だから書かれていないとかいう話なのかもしれない。あるいは演習問題にあるとか。
RDBについてそんなに深い知識がないので、おかしなところもあるんだろうな。
RDBでは表の列に名前をつけるが、それは述語の引数に名前をつけるようなもので、二つの方法をお互いに変換できるので、ここでは重要な違いではない。プログラミング言語には keywordつきの引数が書けるものがあるが、それと同じである。
1) 実表
RDBの実表とか表というのは、変数のないFact形の知識と考えられる。
表(Personとする)は、(名前、体重、身長、血液型)という列を持つとする。これを述語で書くために、表名と同じ述語Personを用い Person(name, weight, height, bradtype)という対応で書く。そして、具体的な実表の中身に対応して次のようにそれぞれの言明を作る。(名前は実在の人物とは関係ありません)
D= {
+Person(山田太郎, 62, 170, O),
+Person(鈴木二郎, 70, 176, A),
+Person(佐藤三郎, 80, 185, O),
...
}
このように実表の行とfactである論理式を対応させ、実表に言明の集合を対応させられる。
つまり、RDBは変数を含まない述語の言明(事実)をデータとして保持していると考えられる。一般的な述語論理のように変数を含む論理式はデータには含めていない。
2) ビュー表
簡単なビュー表の例を、集合の表記を使って定義してみる。
(1) 血液型がOである人の名前、体重、身長のビューは、次のような述語VPersonの集合を考えるということだろう。
V = {+VPerson(x,y,z) | +Person(x,y,z,O)∈D}
実表と同じインターフェースにするため、VPersonという架空の述語を追加している。ビューに含まれる+VPerson(...)は実表というFactに基づいた言明であり、世界から直接、確認してはいないが、Factに準じるものだと思う。特に変数を含まない点からもFactぽい。
他には、Viewには二つの表をJoinしたものも考えられる。長くなるので略すが、特に問題なく書けるだろう。
3) SQL
このように、RDBでは、表にしろビュー表にしろ、変数を含まない論理式の集合となっている。
ではRDBでは変数はどう使われるのだろうか。変数は一切使わないようにも見える。しかし、SQL文で使われているような気がする。
たとえばSeledt文を考えよう。
select 名前 where 血液型='O'
のようなSQL文は
{x | +Person(x,y,z,O)∈D}
を求めることになる。ここのx,y,z特に、xは変数であり、これは表とは違い言明でなくデータの集合という結果を示している。
というような関係が示せるという話でした。
おそまつさま。