Верна ли моя реляционная алгебра? - PullRequest
2 голосов
/ 07 января 2009

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

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

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

Буду очень признателен за любые советы.

Ответы [ 2 ]

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

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

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 = ''
1 голос
/ 07 января 2009

Ваша версия кажется правильной, за исключением некоторых опечаток, таких как 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)
...