Как представить свои объединения в реляционной алгебре?

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

Мне кажется, с вашим дизайном базы данных действительно неудобно работать

Joe Phillips 13.01.2009 03:46
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
5 558
2

Ответы 2

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

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

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

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

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

Malachi 13.01.2009 13:31

@rabble: в реальном мире происходит более 6 соединений, поэтому я бы назвал это нормой (так что я подозреваю, что у вас мало опыта в реальном мире). Вы также упоминаете нормализацию базы данных (что хорошо), но не замечаете, что она имеет тенденцию увеличивать количество соединений.

Mitch Wheat 25.01.2009 03:08

Нормализованные базы данных не масштабируются. Я создаю fireeagle.com и odeo.com ... При загрузке нельзя присоединяться, это просто реальность. Вот почему сейчас так много интереса к альтернативам RDMS ...

rabble 30.01.2009 03:38

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

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

У меня создалось впечатление, что «внутреннее соединение» было «равносоединением».

Mitch Wheat 25.01.2009 03:05

Другие вопросы по теме