014:関係モデルと嘘つきパラドックス

 データベース設計の世界では一般に関係モデルとERダイアグラムは一体と考えられていると思うが厳密に言えば異なる。

 関係モデルがIBMの技術者コッド氏によって開発されたことはあらためて言うまでもないだろう。1970年に発表された関係モデルは元々数学者であったコッド氏が述語論理をもちいて構築したデータベース設計理論だ。やがて、関係モデルをベースとして、実装形式に依存せず人間の意味解釈の視点からデータベースを設計する技法が開発された(※関係の導出には人間の解釈が必要だから関係モデルより人間の概念の反映が強調された といった方がいいかも知れない)。それが、セマンティックデータモデル論であり、その中で1975年に発表されたのがERダイアグラムである。人間の解釈により設計されたことを強調する意味もあってか、関係モデルのTableがセマンティックモデルではEntityに言い換えられた。

 関係モデルとセマンティックデータモデルとの相違はTableとEntityの違いにとどまらない。代表的な違いはリレーションシップの導入だろう。オリジナルのERダイアグラムにあるEntity間の関係を表す菱形の記号だ。例えば、取引先Entityと受注Entityの間の菱形には「注文する」などの言葉が記述される。取引先が「注文」した結果が受注になる という関係を表すのである。

 このようなリレーションシップの導入についてコッド氏は反対したという。その反対の理由がわたしのような浅学な人間から見れば深い。因みに、関係モデルでは、リレーションシップを用いずに受注TableのAtributeである取引先コードに「注文者」という役割を持たせる。役割はAtributeの属性として扱われる。

嘘つきパラドックということばをご存じだろうか。おそらく一番有名なのは、エピメデスのパラドックスだろう。フェニキア人のエピメデス曰く「フェニキア人は嘘つきだ」という言明がパラドックスだ というものだ。ゲーデルの不完全性定理の冒頭に引用された。

1.エピメデスの言説が正しいとすれば、フェニキア人は嘘つき。 ⇒ 2.故にフェニキア人であるエピメデスも嘘つき。そうすると、エピメデスが言明した「フェニキア人は嘘つき」も嘘ということになるからフェニキア人は正直 ということになる。 ⇒ 3.そうすると、フェニキア人であるエピメデスが言った「フェニキア人は嘘つき」も正しいことになり....と永遠に続く。

このようなパラドックスは、集合論を確立したカントールがすでに気づいていたが、ラッセルは、述語論理に階を設けることによって回避しようとした。上のエピメデスのパラドックスの番号が階を意味する。上では三階ということになる。パラドックスによる混乱を避けるために、例えば一階で議論するとか二階までにするとか制限を設けるわけだ。我々は普段日常会話の中で、例えばエピメデス君が居酒屋で「人間って結局嘘つきだよな」などといったからと言って、「そうするとお前は嘘つきだから今言ったことは『人間は正直』ってことだよな」などと突っ込まないが、学問の世界では突っ込みの手を決して緩めないのである。

このようなパラドックスを生む温床は自己言及にある。エピメデスは、フェニキア人と一般化してはいるものの、そこに自分も含まれるからパラドックスが生じることになるのだ(ちなみにこの文の「そこに」以降の論理が二階目)。

さて、コッド氏はなぜリレーションシップに反対したか。関係モデルでは、AtributeはTableによって定義される。つまり、AtributeはTableに従属する。さらに言えば「注文者」といった役割はAtributeの属性だ。ところで、菱形のリレーションシップは、Entity同士を関係づける。つまり、上の例で言えば「注文する」というリレーションシップが取引先Entityと受注Entityの関係を定義するわけだ。

ここで、

・TableとEntityは同じ概念

・リレーションシップはAtributeの属性である役割と同じ概念

であることを考えると、結局、Tableに従属するAtibuteの属性(リレーションシップ)
がEntity(Table)を定義付けることになり、Tableの自己言及が生じることになるわけだ。数学者であるコッド氏は当然パラドックスのことを知っているいるから、自身の理論は一階述語論理内にとどめていた。

 現在セマンティックウェブのオントロジー言語owlのうちowl-fullがRDFSでの使用を禁じられているのもそのためだ。owl-fullでは、クラスがクラスを定義することができるからである。

 わたしの理解に誤りがあればご指摘ください。とにかく難しいっス。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA