如何在关系代数中表示我的连接?

时间:2009-01-13 00:40:53

标签: sql database relational-algebra

我是关系代数的新手,对于我的任务,我必须创建两个。我已经写出了我在SQL中遇到的问题,但我不确定如何在关系代数中表示这样的连接。任何帮助/指针将不胜感激。

SELECT ps.FirstName AS StudentFirstName, ps.LastName AS StudentLastName, pst.FirstName AS StaffFirstName , pst.LastName AS StaffLastName, pg.FirstName AS GuardianFirstName, pg.LastName AS GuadianLastName, i.DateTimeReported, i.NatureOfIllness
FROM Incident i
JOIN Student s USING (StudentID)
JOIN Person ps ON (s.StudentID = ps.PersonID)
JOIN Staff st USING (StaffID)
JOIN Person pst ON (st.StaffID = pst.PersonID)
JOIN Guardian g USING (GuardianID)
JOIN Person pg ON (g.GuardianID = pg.PersonID)
WHERE i.DecisionMade IS NULL;

2 个答案:

答案 0 :(得分:2)

你正在做的那些左连接在关系代数中称为theta-joins,有时更具体地称为equijoins。您将要使用看起来像领结的符号并在其下面写下“StudentID = PersonID”(对于您的示例中的第二个连接)。我无法做出花哨的符号,但http://en.wikipedia.org/wiki/Relational_algebra#.CE.B8-join_and_equijoin有一些例子。

此外,6路连接没有任何问题,它们确实会在现实世界中发生。

答案 1 :(得分:-4)

我认为你是以错误的方式解决这个问题。在现实世界中,您永远不会想要创建一个6路连接的情况。

你在这里看到的是事件和人。人们有角色。应该有三个表,事件,角色和人。你两次加入Person的方式会变得一团糟。

我认为你应该坐下来阅读有关数据库规范化的内容。

http://en.wikipedia.org/wiki/Database_normalization