6

この問題を何と呼ぶべきかよくわかりませんでしたが、行を正確に数えているわけではありません。次の関係があるとしましょう。

Competition(compId, sport, playerName, medal)

そして、属性メダルが金、銀、銅、またはヌルのいずれかであるとしましょう。したがって、次のデータがあります。

(193, Tennis, John Doe, Gold)
(931, Skiing, Mary White, Bronze)
(193, Tennis, Arnold Black, null)
(182, Bobsledding, John Doe, Gold)
(901, Ping-Pong, Adam Brown, Silver)
(248, Bobsledding, Mary White, Silver)

この質問にどう答えたらよいか非常に悩んでいます。複数のメダルを獲得したすべてのプレーヤーの名前を取得してください。このデータでは、答えは John Doe と Mary White になります。関係代数を使用して、この関係の任意のデータでその答えを得るにはどうすればよいでしょうか?

(これは実際の宿題の問題の単純化されたバージョンであり、この単純化は、私が苦労しているその問題の一部を表しています (願っています)。競技、スポーツ、選手の数は任意で不明ですが、可能性は 4 つしかありません。メダル用)

4

3 に答える 3

2

複数のメダルを獲得したすべてのプレーヤーの名前を取得します。

(これが何を意味するのかは明確ではありません。1種類以上のメダルを獲得したことがありますか?または複数のメダルを受け取ったことがありますか?あなたの回答例は後者を示唆しています。また、「null」を特別なSQLのようにではなく、別の種類のメダルとして扱います.)

-- rows where
    THERE EXISTS compId,sport,medal,compId1,compId2,medal2 SUCH THAT
        in competition [compId] of sport [sport] player [playerName] won [medal]
    AND in competition [compId2] of sport [sport2] player [playerName] won [medal2]
    AND (compId <> compId2 OR sport <> sport2 OR medal <> medal2)

ステートメントの省略表現を使用する:

-- rows where
    THERE EXISTS compId,sport,medal,compId1,compId2,medal2 SUCH THAT
        Competition(compId, sport, playerName, medal)
    AND Competition(compId2, sport2, playerName, medal2)
    AND (compId <> compId2 OR sport <> sport2 OR medal <> medal2)

再配置 (σ ごとに 1 つの比較と ∪ ごとに 1 つの属性セットの制限を予想):

-- rows where
    THERE EXISTS compId,sport,medal,compId1,compId2,medal2 SUCH THAT
        (   Competition(compId, sport, playerName, medal)
        AND Competition(compId2, sport2, playerName, medal2)
        AND compId <> compId2)
    OR (   Competition(compId, sport, playerName, medal)
        AND Competition(compId2, sport2, playerName, medal2)
        AND sport <> sport2)
    OR (   Competition(compId, sport, playerName, medal)
        AND Competition(compId2, sport2, playerName, medal2)
        AND medal <> medal2)

代数を置き換えるには、次のようにします。

  • テーブル/関係によるすべてのステートメント
  • ⋈ によるテーブル/リレーションのすべての AND (自然結合)
  • ∪ (共用体) によるテーブル/リレーション (同じ列/属性を持つ必要がある) のすべての OR
  • すべての AND NOT (同じ列/属性を持つ必要があります) by \ (差分)
  • σ比較によるAND比較ごと選択/制限)
  • EXISTS 個のすべての名前をドロップする π個の名前を保持する(射影)
  • ρ (名前の変更) によるすべての列/属性の名前変更。

    π playerName (
        σ compId <> compId2 (Competition
            ⋈ ρ compID2/compID ρ sport2/sport ρ medal2/medal Competition)
    ∪   σ sport <> sport2 (Competition
            ⋈ ρ compID2/compID ρ sport2/sport ρ medal2/medal Competition)
    ∪   σ medal <> medal2 (Competition
            ⋈ ρ compID2/compID ρ sport2/sport ρ medal2/medal Competition)
    )
    

(詳細については、この回答を参照してください。)

于 2014-09-22T23:07:12.193 に答える