Объединение реляционной алгебры, соединение и пересечение

Я изучаю информатику и освежаю в памяти системы баз данных. У меня трудности с пониманием некоторых частей.

Скажем, у меня есть следующие отношения:

Lecturers(LecturerID, Name, DeptID)
Course(DeptID, CrsCode, CrsName, Description)

Я отмечаю, что они оба имеют общий атрибут DeptID, поэтому они совместимы с объединением.

Как мне составить список всех курсов, которые преподают преподаватели кафедры компьютерных наук (CS) или кафедры электронной инженерии (eEng)?

Мой ответ будет использовать пересечение с выбором. Будет ли следующее правильно или близко к отметке?

πDeptID,CrsName(Course) intersection πDeptID,Name(σDeptID = CS or DeptID = eEng(Lecturers))

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

Спасибо за вашу помощь. Как только я пойму, что использовать в нескольких ситуациях, я уверен, что в остальном будет проще.

Спасибо за любую помощь.


person Lee    schedule 24.05.2011    source источник
comment
какое это имеет отношение к реляционной алгебре?   -  person Evan Carroll    schedule 14.01.2019
comment
IIRC тогда, более 7 лет назад, задачей этого конкретного класса было выразить решение вопроса в реляционной алгебре, а не в SQL.   -  person Lee    schedule 14.01.2019
comment
Но вы приняли ответ, который не имеет ничего общего с реляционной алгеброй. Это просто SQL.   -  person Evan Carroll    schedule 14.01.2019


Ответы (2)


Я бы использовал для этого простое INNER JOIN.

SELECT DEPTID, CRSNAME
FROM COURSE A
INNER JOIN LECTURERS B on A.DEPTID=B.DEPTID
WHERE B.DEPTID='eENG' or B.DEPTID='CS'
person garnertb    schedule 24.05.2011
comment
Конечно, выражения могут использоваться для выполнения действий других выражений. Спасибо за SQL, но я не знаю, как выразить это в реляционной алгебре. - person Lee; 24.05.2011
comment
Я отмечу это как ответ. Я не знал, что у одной и той же функции может быть так много разных названий. Внутреннее соединение — это то, чему меня учат как естественное соединение. Мне просто нужно было решить, как выразить это с помощью rel. алгебра, и я думаю, что взломал это как: σLecturers.DeptID = CS or Lecturers.DeptID = eEng(πDeptID, CrsName(Course)) x (πDeptID, Name(Lecturers)) - person Lee; 24.05.2011

Также должна быть таблица для отделов, так как у вас есть ссылка на поле DeptID, которое должно быть INT. Я предполагаю, что это ОТДЕЛЫ с DeptID и кодом в качестве полей. В этом случае:

SELECT
*
FROM 
  Course C
INNER JOIN 
  LECTURERS L on C.DeptId = L.DeptID
INNER JOIN 
  Departments D on C.DeptID = D.DeptID
WHERE 
  D.code = 'eENG' or D.code = 'CS'
person CristiC    schedule 24.05.2011
comment
Поле DeptID — это просто ключ для каждого из двух отношений, насколько мне известно? Этот пример взят из контрольной работы, и нет никакого упоминания о другом отношении. Сможете ли вы выразить свой SQL в терминах алгебры? Хотя меня проверяют на выражение этого конкретного вопроса в виде SQL, от меня также ожидают, что я буду выражать его алгебраически. - person Lee; 24.05.2011