Реляционное исчисление левого внешнего соединения

Прежде чем я начну. Я много читал об этом, прежде чем выполнять свою работу, и я не мог найти ответ на этот вопрос... пока. Я просто надеюсь на линии гильдии, а не ответы. Это было для задания, которое я уже представил. Но зная, что мой преподаватель не отметит это перед экзаменами и из любопытства...

Как написано левое внешнее соединение в реляционном исчислении? Вот заявление, которое я написал в SQL

Doctor (⟕) Doctor.Doc_id = Duty.Doc_id Duty

(символ не отображается.. это левый внешний символ соединения)

И вот запись исчисления, которую я написал для этого..

{S|∃ D ∈ Doctor (∃ C ∈ Duty (D.Doc_id = C.Doc_id ^
 S.Doc_id = D.Doc_id ^
 S.Doc_fName = D.Doc_fName ^
 S.Doc_lName = D.Doc_lName ^
 S.Position = D.Position ^
 S.Qualification = D. Qualification ^
 S.YearsExperience = D.YearsExperience ^
 S.Dept_id = D.Dept_id ^
 S.Duty_id = D.Duty_id ^
 S.Staff_id = D.Staff_id ^
 S.Date = D.Date ^
 S.Duty_type = D.Duty_type ^
 S.Max_no = D.Max_no ^
 S.Given_no = D.Given_no ^
 S.Avaliable_no = D.Avaliable_no ^
 S.Current_no = D.Current_no ^
 S.Room_no = D.Room_no)}

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

Мой вопрос, была ли моя запись исчисления правильной? Если нет, что я сделал не так?

Спасибо:)

1 ответ

Решение

Это перевод в SQL для вашей формулы, который начинается с

{S|∃ D ∈ Doctor (∃ C ∈ Duty (D.Doc_id = C.Doc_id ^ (etc..) ) ) }

SELECT * FROM S
    WHERE EXISTS (SELECT * FROM Doctor D
        WHERE EXISTS (SELECT * FROM Duty C
             WHERE (D.Doc_id = C.Doc_id)
             AND (etc...)));

Поэтому я думаю, что ответ - нет, это не левое внешнее соединение.

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