Рассмотрим таблицу идентификаторов сотрудников в ресторане и смены, на которых они работают.Если у меня есть схема данных, заданная как Shifts (ShiftID, EmployeeID), где Shift и EmployeeID вместе образуют ключ для отношения, как я могу найти все пары сотрудников, которые когда-либо только работают вместе.То есть мне нужны кортежи (A, B) и (B, A), если сотрудник A работает только тогда, когда сотрудник B работает и наоборот.
Возможно ли это с помощью базовых операторов реляционной алгебры (выбор, проект, кросс-произведение, естественное объединение, переименование) и операций над множествами (объединение, пересечение, разность)?
Пример ввода:
Сменный сотрудник
1 A
1 B
2 A
2 B
3C
Ожидаемый результат
Сотрудник1 Сотрудник2
AB
BA
Моя попытка:
Сначала возьмите перекрестный продукт Shift и выберите все кортежи, в которых ShiftID одинаков, но EmployeeID различается (то есть все пары сотрудников работают в одну смену).
Затем я попытался взять кросс-произведение описанного выше отношения с собой и выбрать кортежи, в которых ShiftID одинаков, первый EmployeeID такой же, но второй EmployeeID отличается.Я пытался получить «DifferentPairs», поэтому я выбираю первый EmployeeID в первой копии и второй Employee ID во второй копии.
Но потом я застрял, потому что понял, что Pairs = DifferentPairs для сотрудников с более чем 1 парой, поскольку во втором перекрестном продукте могут быть сотрудники (A, B | A, C) и (A, C | A,B) и поэтому, если я возьму 1-й и 4-й ID, я получу (A, C) и (A, B), и теперь я вернусь с того места, с которого начал (не в приведенном мной примере, а просто в целом).