NaturalJoin (R,S-T) equivalence Difference(NaturalJoin(R,S),NaturalJoin(R,T))
これに対処するための一般的な方法は、その定義により、オペレータコールを交換することです。
ここでは、関係式とそれらが保持するタプルとの間の特定の等価性を前提としています。実際には、照会が取得するよう要求されたタプルを返すことを正当化するために同値を使用する必要がありますが、これは通常説明されていません。 (代わりに多くの例を介して学習し、手渡しする)。
S
& T
は同じ属性セットを持っています。
X
は、行が(...)
の場合、X(...)
、つまり(...) IN X
となります。
NATURALJOIN(X,Y)
は、X(...) AND Y(...)
の行を保持します。
DIFFERENCE(X,Y)
は、X(...) AND NOT Y(...)
の行を保持します。
(R(...) AND S(...)) AND NOT (R(...) AND T(...))
(R(...) AND S(...)) AND (NOT R(...) OR NOT T(...))
((R(...) AND S(...)) AND NOT R(...)) OR ((R(...) AND S(...)) AND NOT T(...))
(R(...) AND S(...) AND NOT R(...)) OR (R(...) AND S(...) AND NOT T(...))
R(...) AND S(...) AND NOT T(...)
だから、彼らは等価です:
R(...) AND (S(...) AND NOT T(...))
R(...) AND S(...) AND NOT T(...)
右の行を保持します。
左の行を保持しています。
あなたはx IN X
によってX(...)
を交換し、適切な定量(FORALL
& FORSOME
/EXISTS
)を使用して証明にこれを変換し、内包({
variable
|
wff
}
)を設定することができます。
推論の自然な結合を使用して& SQLはthis answerとそのリンクを参照してください。
実行時の意味でどのようなクエリが最適なのか分かっていれば、本当に役に立ちます。
DMBSとそのクエリの実装/最適化によって異なります。実行モデル、コスト/利益関数、およびその関数の入力引数がない場合、「最適」は存在しません。さらに、「最適」はカオス的である - 関係の小さな変更&物理的なDDL、データベースの内容&の統計情報、問合せのDML、問合せ&更新パターンとDBMSの実装では、全く異なるトレードオフが生じる可能性があります。
私はこれらが同等であるとは思わない。また、キーが明示的に定義されていないので、 '自然結合 'を避ける必要があります。これは問題を引き起こす可能性があります。 –
まず、私はそれらも同等ではないと思ったが、私は2つの例を書いて、彼らは働いた。潜在的な理由として明示的に定義されたキーがないことがありますか? – Abbraxas
Googleのユニコードリレーショナルジョイン。 – philipxy