0

我是关系代数的新手,对于我的任务,我必须创建两个。我已经写出了我在 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;
4

2 回答 2

2

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

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

于 2009-01-25T00:03:26.490 回答
-4

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

你在这里所拥有的似乎是事件和人。人是有角色的。应该有三张表、事件、角色和人员。你加入对 Person 两次的方式,将是一团糟。

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

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

于 2009-01-13T01:19:17.803 回答