Out*_*ack 6 relational-algebra relational-database
我不太确定如何称呼这个问题,但它并没有完全计算行数。假设我们有以下关系:
Competition(compId, sport, playerName, medal)
Run Code Online (Sandbox Code Playgroud)
假设属性勋章可以是金、银、铜或空。所以我们有以下数据:
(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)
Run Code Online (Sandbox Code Playgroud)
我很难弄清楚如何回答这个问题:获取所有获得超过一枚奖牌的球员的姓名。在此数据中,答案将是 John Doe 和 Mary White。我怎么能用关系代数得到这个关系的任意数据的答案?
(这是实际作业问题的简化版本,这种简化代表(我希望)我正在努力解决的问题的一部分。比赛、运动和球员的数量是任意且未知的,但只有 4 种可能性奖牌)
\n\n\n获取所有赢得超过一枚奖牌的运动员的姓名。
\n
(不清楚这意味着什么。赢得了不止一种奖牌?或者已经获得了不止一种奖牌?您的示例答案表明是后者。此外,它将“null”视为另一种奖牌,而不是特别就像 SQL 中一样。)
\n\n-- rows where\n THERE EXISTS compId,sport,medal,compId1,compId2,medal2 SUCH THAT\n in competition [compId] of sport [sport] player [playerName] won [medal]\n AND in competition [compId2] of sport [sport2] player [playerName] won [medal2]\n AND (compId <> compId2 OR sport <> sport2 OR medal <> medal2)\nRun Code Online (Sandbox Code Playgroud)\n\n使用语句简写:
\n\n-- rows where\n THERE EXISTS compId,sport,medal,compId1,compId2,medal2 SUCH THAT\n Competition(compId, sport, playerName, medal)\n AND Competition(compId2, sport2, playerName, medal2)\n AND (compId <> compId2 OR sport <> sport2 OR medal <> medal2)\nRun Code Online (Sandbox Code Playgroud)\n\n重新排列(预计每个 \xcf\x83 一次比较和每个 \xe2\x88\xaa 一个属性集的限制):
\n\n-- rows where\n THERE EXISTS compId,sport,medal,compId1,compId2,medal2 SUCH THAT\n ( Competition(compId, sport, playerName, medal)\n AND Competition(compId2, sport2, playerName, medal2)\n AND compId <> compId2)\n OR ( Competition(compId, sport, playerName, medal)\n AND Competition(compId2, sport2, playerName, medal2)\n AND sport <> sport2)\n OR ( Competition(compId, sport, playerName, medal)\n AND Competition(compId2, sport2, playerName, medal2)\n AND medal <> medal2)\nRun Code Online (Sandbox Code Playgroud)\n\n现在将代数替换为:
\n\n每个列/属性都通过 \xcf\x81 重命名(重命名)。
\n\n\xcf\x80 playerName (\n \xcf\x83 compId <> compId2 (Competition\n \xe2\x8b\x88 \xcf\x81 compID2/compID \xcf\x81 sport2/sport \xcf\x81 medal2/medal Competition)\n\xe2\x88\xaa \xcf\x83 sport <> sport2 (Competition\n \xe2\x8b\x88 \xcf\x81 compID2/compID \xcf\x81 sport2/sport \xcf\x81 medal2/medal Competition)\n\xe2\x88\xaa \xcf\x83 medal <> medal2 (Competition\n \xe2\x8b\x88 \xcf\x81 compID2/compID \xcf\x81 sport2/sport \xcf\x81 medal2/medal Competition)\n)\nRun Code Online (Sandbox Code Playgroud)(有关更多信息,请参阅此答案。)
\n