2009年7月25日土曜日

【DBiD】4 関係変数


* 4 Relation Variables

この章、私にとってはけっこう難しい、というかDateが
結局何を言いたいのかが、訳書でも原書でも、すっと入っ
てこない。そこで、この章では、原書をベースにしつつ
訳書も参照するという二段がまえでいく。

例によって、このエントリは、読書メモよりも私的まと
めに近い。


- まずベース例をTutorial Dで記述する。

---
var S base relation
{ sno sno, sname name, status integer, city char }
key { sno };

var P base relation
{ pno pno, pname name, color color, weight weight, city char }
key { pno };

var SP base relation
{ sno sno, pno pno, qty qty }
key { sno, pno }

foreign key { sno } references S
foreign key { pno } references P;
---


** Updating Is Set-at-a-Time
- 一般のプログラミング言語と同じように、変数と値
を考えよ、ということ。
- insert, delete, update の説明がある。どうやら、
これらは非破壊的なようだ。
- すなわち、関係、タプルといったものは、それらに
演算子が作用すると結果としての関係やタプルが生
成される。そしてその結果を関係変数に代入するな
らば、関係変数が参照する値は更新されたことにな
る、と。

** More on Candidate Keys
- Candidate Keysの定義。原文まま引用。

---
Definition: Let K be a subset of the heading of
relvar R. Then K is a candidate key (or just key
for short) for R if and only if it posesses both
of the following properties:

Uniqueness
No possible value for R contains two distinct
tuples with the same value for K.

Irreducibility
No proper subset of K has the uniqueness property.
---

- ふむ。シンプル。

- 注意点をいくつか。
- キーが設定されるのは、関係ではなく、関係変数
である。これはおどろいた。理由としては、キー
を設定するということは、なにがしかの制約をか
けるということだが、制約は変数に所属すべきだ
から。なぜかというと、制約というのは何かを更
新するときに機能するが、更新されるのは値では
なく変数が何を参照するか、だから。納得!
- これがCommon Lispや他のプログラミング言語に
あるかどうか考えてみる。変数の型、はある意
味制約をかけている。Object指向のObjectなら
ば、実装としてそういう制約をつくることはで
きるといえばできる。
- キーの値となるのは、属性そのものではなく、その
属性のみをもつタプルである。今までの諸定義から
すればあたりまえのことだが、これも言われないと
意識されないことだなぁ。
- functional dependency (関数従属性)について。
自分なりにちゃんと書いてみる。

関係変数Rvが、値として関係Rをもち、キーとして
Kが設定されているとする。すると、関係Rに含まれ
るタプル値一般をTとあらわすとき、Tは次の二つの
タプルを含むと見ることが可能であり、それは、K
を見出しとして持つタプル(Tkと呼ぶ)と、Kに含ま
れない属性を見出しに持つタプル(Taと呼ぶ)である。
これら2つは属性に重なりはない。

さて、(a)関係Rに含まれるタプルについてTkとTaの
対応を写像ととらえることができて、それは、
(b)Tkの集合とTaの集合の間の写像であり、全射で
ある。

(a)(b)が成り立つ理由は、関係Rに含まれるタプル
にそもそも重複が無く、かつ、キーの値となるタ
プル達にキーの定義から重複が無いから。

** More on Foreign Keys
- 定義なので原文まま引用。

---

Definition: Let R1 and R2 be relvars, not
necessarily distinct, and let K be a key for
R1. Let FK be a subset of the heading of R2 that,
possibly after some attribute renaming, involeves
exactly the same attributes as K. Then FK is a
foreign key if and only if, at all times, every
tuple in R2 has an FK value that is equal to the K
value in some (necessarily unique) tuple in R1 at
the time in question.

---

- 外部キーというのは実践にて頻繁に使うので強調さ
れることが多いが、理論の立場から言えば、制約と
いうより多きな概念における例のひとつにすぎない。

** More on Views

- 定義なので原文まま引用。

---

Definition: A view or virtual V is a relvar whose
value at time t is the result of evaluating a
certain relational expression at that time t. The
expression in question is specified when V is
defined and must menthion at least one relvar.

---

- リレーショナルモデルにおいては、base relvarであ
るかvirtual relvarであるかということは、どちらを
先に定義して、どちらをそれを使った表現で定義する
かという違いだけであり、演算子における扱いや制約
の設定など、その使用方法(原文ではlook and feel)
にほぼ違いはない。これを

The Principle of Interchangeability (of base
and virtual relvars) [訳:交換可能性の原理]

という。

- SQLは、この原理のサポートが弱い。以下はその例。
- テーブルのrow IDに関すること。これがあると、
rowIDというのはbase relvarにしか存在しないはず
だから、原理から逸脱している。
- entity integrity(主キーの要素はnullではいけな
い)という制約も、base relvarに対する言明なの
で、これも原理から逸脱している。ただし、これ
はそもそもnullの存在をDateは否定しているので、
その観点でも却下なのだが。
- viewのupdateに関する機能が弱い。

- なお、viewのupdateについては、まだ論争が絶えな
い状態。Dateの見解の詳細は、The Third
Manifesto, Third Editionを参照のこと。

- relcon(関係定数)の紹介。

- snapshotの紹介。

** Relvars and Predicates

この節が一番もやもやするので、自分で完全にまとめ直
す。

- 関係に含まれるタプルは、それぞれ論理学の命題で
あると考えてみる。
- すると、関係は論理学における知識ベースに位置付
けられる。
- 関係に含まれるタプルは、全て真の命題である、と
言っても諸事情は整合する。
- この文脈にて、リレーショナルモデルでは、閉世界仮
説を採用している。すなわち、知識ベースに無い命
題は偽とする。
- 例えば、関係「商品」があって、その見出しに「商
品名」、「種類」、「在庫数」があるとすると、
タプル、

{商品名 あわあわ, 種類 石鹸, 在庫数 5}

は、商品名がキーであるとすると、

商品名あわあわは、種類が石鹸であり、在庫数が5で
ある。

という命題であり、これは真であるということだ。
- この文脈では、属性は自由変項をひとつ含んだ言明で
あり、その変項の領域が本体のタプル達が含む該当
属性の値になる。
- 属性A1,...,Anの言明版を、A1(X1),...A1(Xn)とする
と、その関係を参照している関係変数は、

A1(X1)^...^A1(Xn)

という言明を取扱っている、と言える。本体には、
これが真となるX1,...,Xnが全て格納されており、こ
こに格納されていないX1,...,Xnについては閉世界仮
説により全て偽となるからだ。
- ということは、関係変数は、ある言明(論理式といっ
てもよい)についての真偽を司っているものであり、
論理学でいうところの述語の定義の役割を果たして
いる。

- ここで私が「述語の定義の役割を果たしている」と書
いたのは、Dateの「関係変数の見出しは述語である」
というのと違っている。というのは、私はここで論理
学における意味で述語をつかっているからだ。そこで
は、述語は写像であり、論理式の中で、p(X,Y)や、
p(a,b)などと項を引数にとりつつ使われるものだから
だ。上の流れの説明においては、関係変数が参照して
いる関係は述語を定義していると言えるが、それ自体
が述語として運用される構文は提示されていない。

- ただし、Dateのrelvar predicate (関係変数述語)の
くだりは、私の組み立てと一致している。「関係変数
の見出しは述語である」というのはアジテーション
なだけなのかもしれない。

- さて、このように関係や関係変数を論理学の観点で
捉えるということは、リレーショナル式(relational
expression)によって表現されている関係についても
適用できる。

** More on Relations Versus Types
- Dateは、リレーショナルモデルは形式理論であり、
上で述べたように論理を取り扱うものだと言う。で
あるならば、形式理論として統語論と意味論を書き
くだしてもらった方がやっぱりわかりやすいなぁ。
- ちょっと説明が回りくどい気がするが、リレーショナ
ルモデルの型は、いわゆる形式理論の型である、とい
うことが言いたいようだ。

** Summary
- 特になし。


こつこつ。

0 件のコメント: