Как мне представить мои объединения в реляционной алгебре? - PullRequest
0 голосов
/ 13 января 2009

Я новичок в реляционной алгебре, и для моего задания я должен создать два. Я выписал проблему, с которой столкнулся в 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 ]

2 голосов
/ 25 января 2009

Те левые соединения, которые вы делаете, называются в реляционной алгебре тэта-соединениями, иногда более конкретно - эквиойнами. Вы захотите использовать символ, похожий на галстук-бабочку, и написать под ним «StudentID = PersonID» (для второго соединения в вашем примере). Я не могу использовать причудливые символы, но у http://en.wikipedia.org/wiki/Relational_algebra#.CE.B8-join_and_equijoin есть несколько примеров.

Кроме того, нет ничего плохого в соединениях с 6 путями, и они действительно произойдут в реальном мире.

0 голосов
/ 13 января 2009

Я думаю, что вы решаете проблему неправильно. В реальном мире вы бы никогда не захотели создать ситуацию, в которой у вас было 6 способов соединения.

То, что вы здесь видите, это инциденты и люди. У людей есть роли. Должно быть три таблицы, инциденты, роли и люди. То, как вы дважды присоединитесь к Персоне, будет беспорядком.

Я думаю, вам следует сесть и почитать о нормализации базы данных.

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

...