Tuple Relational Calculus の一般式の引用 (Fundamentals of Database Systems - Elmasri, Navathe; 第 6 版)
タプル関係計算の一般的な表現は、
{t1.Aj, t2.Ak, ..., tn.Am | COND(t1, t2, ..., tn, tn+1, tn+2, ..., tn+m)}
ここで、t1, t2, ..., tn, tn+1, ..., tn+ m はタプル変数、各 Ai は ti が範囲とする関係の属性、COND はタプル関係計算の条件または式です。式は、次のいずれかの述語計算アトムで構成されます。
1. R(ti) 形式のアトム。ここで、R は関係名で、ti はタプル変数です。このアトムは、タプル変数 ti の範囲を、R という名前のリレーションとして識別します。ti がリレーション R のタプルである場合は TRUE と評価され、それ以外の場合は FALSE と評価されます。
2. ti.A op tj.B の形式のアトム。ここで、op はセット {=、<、≤、>、≥、≠} の比較演算子の 1 つです。ti と tj はタプル変数で、A はは ti の範囲の関係の属性であり、B は t の範囲の関係の属性です。ti.A op c または c op tj.B の形式のアトム。ここで、op はセット {=、<、≤、>、≥、≠} の比較演算子の 1 つです。ti と tj はタプル変数 A です。は ti の範囲の関係の属性、B は tj の範囲の関係の属性、c は定数値です。
*編集(philipxyに感謝):上記の一般的な表現に関するTRCのクエリの意味は、
{t|p} の場合 -- 「このようなクエリの結果は、COND(t) を TRUE に評価するすべてのタプル t のセットです」。{t.a1,t.a2,...|p} について -- 「まず、選択されたタプル t ごとに要求された属性 […] を指定します。次に、バーに続くタプルを選択するための条件を指定します」。
との記載もありますが、
タプル関係計算式で自由なタプル変数は、棒グラフ (|) の左側にあるものだけです。
たとえば、Students(id, grade) というリレーションを考えてみましょう。「最高の成績を収めたすべての学生の ID」を見つけたいとします。Tuple Relational Calculus で指定されたクエリは、
Q1 = {s1. ID | 生徒(s1) ^ ¬(∃ s2, 生徒(s2) ^ ( s2.学年 > s1.学年) )}
ここで、s1 は自由変数です。
Q1 は、タプル変数 s1 のすべての id 値として解釈できます。ここで、s1 は学生の関係内にあり (つまり、s1 は学生に属します)、かつ、s2 が学生に属し、s2.grade > s1.grade となるような変数 s2 は存在しません。
Q2 = {s1
.
ID | ∃ s1, 生徒(s1) ^ ¬(∃ s2, 生徒(s2) ^ ( s2.学年 > s1.学年) )}
と
Q3 = {s1. ID | ∀ s1, 生徒(s1) ^ ¬(∃ s2, 生徒(s2) ^ ( s2.学年 > s1.学年) )}
ご覧のとおり、Q2 と Q3 の s1 (バーの左側の変数) も、それぞれ ∃ と ∀ によって制限されています。
Q2とQ3が可能であると仮定すると、Q2とQ3の解釈はQ1とどのように異なりますか?
ノート:
- クエリ Q2 と Q3 は、'|' の左側の変数が変数の場合にクエリが何を意味するかを理解しようとする目的で、Q1 から作成されました。存在または普遍的な数量詞によって拘束されていました。
- (編集、もう少し考えた後) Q2 と Q3 の私の解釈は、Q2 と Q1 の結果は
同じになるだろう Q2 がすべてを生成するのと同じではないということです学生に属し、s2 が学生に属し、s2.grade > s1.grade であるような s2 が存在しない少なくとも 1 つの s1 が存在する場合、s1 の id 値 (つまり、Q2 の結果は「すべての学生のセット」最高の成績を収めた学生が少なくとも 1 人存在する場合は id")。Q3 は、学生に属し、s2 が存在しないすべての s1 について、s2 が学生に属し、s2.grade > s1.grade である場合 (つまり、Q3 の結果は「一連のすべての学生が最高の成績を取得した場合は、すべての学生 ID")。しかし、クエリ Q2 と Q3 が可能であるかどうか、またはバーの左側の変数も量指定子によって制限されるようなシナリオが一般的に発生する可能性があるかどうかはわかりません。