【问题标题】:Is my Relational Algebra correct?我的关系代数正确吗?
【发布时间】:2009-01-06 21:13:05
【问题描述】:

我有一个数据库任务,我必须为两个问题创建一些关系代数。我对它的大部分感觉都还好,但是当我试图从一个连接到另一个表的表中投影属性时,我只是感到困惑。

例如这是正确的吗?

Q1) 列出未拨打电话的事件的详细信息,以便接待员知道 哪些事件还需要调用。

RESULT <-- PROJECT<STUDENT.FirstName, STUDENT.LastName, STAFF.FirstName,
STAFF.INCIDENT.LastName, INCIDENT.DateTimeReported, 
INCIDENT.NatureOfIllness(SELECTINCIDENT.DecisionMade = 
  ''(Staff RIGHT JOIN<STAFF.StaffID = INCIDENT.StaffID>
(INCIDENT LEFT JOIN<INCIDENT.StudentID = STUDENT.StudentID>(STUDENT))))

我试图解释为关系代数的 SQL 是:

SELECT 
  s.FirstName, s.LastName, st.FirstName, st.LastName
  , i.DateTimeReported, i.NatureOfIllness
FROM Student s 
RIGHT JOIN Incident i ON s.StudentID = i.StudentID  
LEFT JOIN Staff st ON st.StaffID = i.StaffID
WHERE i.DecisionMade = ''

任何建议都将不胜感激。

【问题讨论】:

  • 请重新格式化代数和 sql,使其可读(无滚动条)
  • 因为这是家庭作业,您最好询问在哪里可以找到答案的提示,而不是自己询问答案。
  • 他没事 - 他先发布了自己的回复,并请求帮助检查。与要求我们为他做这件事完全不同。
  • 关系代数,...我研究过的最糟糕的理论之一。基本上,所有的 SQL 都有一个不同的、更神秘的符号!

标签: database relational relational-algebra


【解决方案1】:

通常(当然也有一些例外情况)如果你用 LEFT JOIN 来编写 sql,则更容易阅读和理解:

SELECT s.FirstName, s.LastName, st.FirstName, st.LastName, i.DateTimeReported, i.NatureOfIllness
FROM Incident i
LEFT JOIN Student s ON s.StudentID = i.StudentID
LEFT JOIN Staff st ON st.StaffID = i.StaffID
WHERE i.DecisionMade = ''

【讨论】:

    【解决方案2】:

    您的版本似乎是正确的,除了一些拼写错误,例如 STAFF.INCIDENT.LastName。这是我的版本:

    RESULT <--- 
       PROJECT <STUDENT.FirstName, STUDENT.LastName, 
                         STAFF.FirstName, STAFF.LastName,
                         INCIDENT.DateTimeReported, INCIDENT.NatureOfIllness>
          (SELECT <INCIDENT.DecisionMade = ''> 
             ((STUDENT RIGHT JOIN <STUDENT.StudentID = INCIDENT.StudentID> INCIDENT)
                 LEFT JOIN <INCIDENT.StaffID = STAFF.StaffID> STAFF)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-07
      • 1970-01-01
      • 2020-06-08
      • 2018-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多