Верна ли моя реляционная алгебра?

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

например это правильно?

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 = ''

Любые советы будут высоко оценены.


person Malachi    schedule 06.01.2009    source источник
comment
пожалуйста, переформатируйте алгебру и sql, чтобы он был читабельным (без полос прокрутки)   -  person Steven A. Lowe    schedule 07.01.2009
comment
Поскольку это домашнее задание, вам лучше попросить подсказки о том, где найти ответ, а не спрашивать ответ сам по себе.   -  person BCS    schedule 07.01.2009
comment
С ним все в порядке — он первым опубликовал свой ответ и просит помощи в его проверке. Совсем не то же самое, что просить нас сделать это за него.   -  person Joel Coehoorn    schedule 07.01.2009
comment
Реляционная алгебра... одна из худших теорий, которые я когда-либо изучал. По сути, это был SQL с другой и более загадочной нотацией!   -  person mmx    schedule 07.01.2009


Ответы (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)
person Federico A. Ramponi    schedule 06.01.2009

обычно (конечно, существуют некоторые исключения) легче читать и понимать sql, если вы пишете все это с помощью LEFT JOIN:

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 = ''
person Joel Coehoorn    schedule 06.01.2009