Реляционная алгебра - PullRequest
       16

Реляционная алгебра

1 голос
/ 29 января 2011

Не могли бы вы помочь мне решить эту проблему в реляционной алгебре? У меня есть эта БД (защита диссертации);

  • Преподаватели (Teacher_ID, ФИО, специальность)
  • Проекты (Project_ID, Должность, Специальность)
  • Дипломная работа (Thesis_ID, Project_ID, Jury_ID, Decision)
  • Жюри (Jury_ID, Supervisor_ID, First_Member_ID, Second_Member_ID)

Я хочу найти алгебраический запрос, чтобы получить учителей (ID, Имя), которые руководят диссертацией по своей специальности;

Я уже делал это в SQL, вот как это должно выглядеть:

Select Teacher_ID, Name  
From Teachers T  
Where Teacher_ID IN
      (Select Supervisor_ID  
       From Juries  
       Where Jury_ID IN
             (Select Jury_ID  
              From Thesis  
              Where Project_ID IN 
                    (Select Project_ID  
                     From Projects P  
                     Where T.Specialty = P.Specialty)))  

Спасибо за вашу помощь!

Ответы [ 2 ]

2 голосов
/ 29 января 2011

Вы пытаетесь это сделать?

select Te.Teacher_ID,Te.Name from thesis t
join project P on (T.Speciality =P.Speciality)
join Juries J on ( J.jury_ID = T.Jury_id)
join Teacher Te on (Te.Teacher_ID = J.Supervisor_ID)
1 голос
/ 30 января 2011

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

R1 <- Thesis ⋈ (Project_ID) Projects
R2 <- Teachers ⋈ (Teacher_ID=Supervisor_ID) Juries
R3 <- π Teacher_ID, Name (R2 ⋈ (Specialty ^ Jury_ID) R1)

Итак, сначала в R1 мы получаем специализацию дипломной работы (здесь помогает ответ Малки)
Затем в R2 мы получаем учителей, которые являются руководителями
Наконец, мы присоединяемся к R2 и R1 при условии, что они имеют одинаковые Jury_ID и Specialty
и проецируйте только их идентификаторы и имена

...