9

私は試験のために勉強していますが、デカルト積xを使用するか、自然結合|X|を使用するかを決定できる確固たる基準を見つけることができません。

私は大まかなガイドを思いついた:

結合するテーブルの属性と同じ名前の属性を射影する必要がある場合はx、射影するテーブル名を使用して指定する必要がありtableA.colname1 = tableB.colname1ます:

ただし、これは私のメモの解決策の一部に従っておらず、私の講師xは上記の規則または|x|同じ意味で使用しているようです。

どちらか一方の使用を定義するために従うことができるルールを誰かが持っていますか?


たとえば、次のスキーマを取り上げます (簡潔にするために引用された質問に関連するスキーマのみ)。

takes(ID, course_id, sec_id, semester, year, grade)
student(ID, name, dept_name, tot_cred)

Q) 2011 年春または 2011 年秋に行われたコースを受講したすべての学生の名前を見つけてください。

私の答えの試み:

π name(σ semester="Spring" ^ year=2011(takes ⋈ student)) ∪ π name(σ semester="Autumn" ^ year=2011(takes ⋈ student))

実際の答え:

π name(σ semester="Spring" ^ year=2011 ^ takes.ID=student.ID(takes x student)) ∪ π name(σ semester="Autumn" ^ year=2011 ^ takes.ID=student.ID(takes x student))

誰でも理由を説明できますか?

私の考えでは、Natural Join がtakes.ID=student.ID?を処理します。

4

3 に答える 3

9

私が理解しているように、自然な結合は、射影され、フィルタリングされたデカルト積です。

  • デカルト積を取ると、
  • それを選択して、同じ名前の列の値が同じ値になるようにします。
  • すべての列が異なる名前を持つように射影します。

この仮定の下では、あなたの答えは実際の答えと同形です。

これを確認するには、自然結合を上記の一連の演算子に拡張し、関係代数の法則を使用してそれらを浮動させることができます。への射影により射影が消えname、選択基準が上記の選択と融合されていることがわかります。自分の答えの意味をまったく変えていなくても、実際の答えとまったく同じツリーになってしまいます。


講師がこれらの概念を同じ意味で使用する理由の 1 つを考えることができます。講師は、これらの概念を同じ意味で使用できることを理解してほしいと考えています。なぜなら、「自然な結合は単なるショートカットに過ぎない」からです (ただし、これには議論の余地があります)。

于 2013-01-02T18:55:04.137 に答える
3

デカルト積は、結合されたリレーションに共通の属性名がない、自然結合の特殊なケースです。Codd の元の代数では、名前の変更はまったく別の操作でした。共通の属性を持つ 2 つの関係の真のデカルト積を取得するには、(自然な) 結合を行う前に、それらの属性の名前を変更する必要があります。

簡潔にするために、名前の変更は、記述された例から省略されることがあり、代わりに製品記号が使用されます。残念ながら、これは重要な点、つまり結合は 1 種類しかないということを覆い隠しています。

于 2016-11-27T18:59:51.183 に答える