2

これは私のデータベースクラスの演習中間からの質問です。次のリレーショナル スキーマがあるとします。

WorkList(EMP#, WorkType#, Season) EMP#、結合して主キーを形成しWorkType#ますSeason

(121, 1, Winter)
(121, 2, Winter)
(114, 1, Spring)
(114, 2, Spring)
(114, 2, Fall)

タプルを返す必要があります

(114)

WorkType#ある時点で 1シーズンに 1 つしか作業しなかったワーカーを返すために使用できる関係代数式は何ですか? ユニオン、セット マイナス、デカルト積、自然結合、選択、プロジェクト、名前変更、交差のみを使用できます。

4

1 に答える 1

3

グループ化演算子を使用しない場合、必要な結果を得るために少し回り道をする必要があります。

  1. テーブル自体のデカルト積を取ります (属性をEMP1EMP2Worktype1などと呼びます。「適切な」関係代数については、デカルト積の前にこれらの属性の名前を変更する必要があります)。

  2. EMP1 = EMP2Season1 = Season2、 でタプルを選択しWorkType1 != WorkType2ます。!=関係代数の一部の定義では、述語を使用できないことに注意してください。それがなくてもまだ可能ですが、さらに回避策が必要になります。使えるとします。

  3. EMP1, WorkType1, Season1元のアトリビュート名に投影して名前を変更します。これで、労働者が 1 シーズンに複数の作業タイプで働いたインスタンスを含む関係が作成されました。

  4. ステップ 3 で取得したテーブルと元のテーブルのセットの差を取ります。この関係には、労働者が 1 シーズンに 1 つの作業タイプでのみ働いたインスタンスのみが含まれます。

  5. 属性を投影しEMP#ます。
于 2013-11-07T21:50:52.270 に答える