Ваш запрос был сформулирован немного двусмысленно. Это действительно намерение найти всех менеджеров, которые являются менеджерами для КАЖДОГО служащего в городе X?
Как указали dportas, это вполне выполнимо в RA.
Вот как :
Соберите всех сотрудников в городе X. Назовите это EMPX.
Получить коллекцию всех менеджеров. Назовите это MGRS.
Сделайте декартово произведение двух. Назовите это MGRS_EMPX.
Вычтите из этого фактическое значение таблицы (соответственно спроецированное на необходимые атрибуты), в которой указано, какие менеджеры управляют каким сотрудником. Эта разница содержит все реально существующие комбинации менеджеров с сотрудником, который находится в X, но где этот менеджер не управляет этим сотрудником.
Спроецируйте эту разницу на атрибут менеджера. Это отношение сообщает вам, какие менеджеры существуют, так что в городе X есть какой-то сотрудник, которым НЕ управляет этот менеджер.
Вычтите это отношение из MGRS. Очевидно, что это отношение сообщает вам, какие менеджеры существуют, так что НЕ существует сотрудника, расположенного в городе X, который НЕ управляется этим менеджером.
Переписав это отрицание квантификатора существования в качестве универсального квантификатора, вы обнаружите, что это именно тот результат, который вам нужен: НЕ СУЩЕСТВУЕТ (ЭМИ: ЭМИ находится в X И ЭМИ управляется MGR) === FORALL EMP: НЕ (ЭМИ находится в X И EMP управляется MGR) === FORALL EMP : (EMP не находится в X ИЛИ EMP управляется MGR) === FORALL EMP : (если EMP находится в X, то EMP управляется MGR).
И все это совершенно прекрасные алгебраические операции.
(Дополнительное упражнение: посмотрите, что произойдет, если в городе X вообще не будет сотрудников.)
person
Erwin Smout
schedule
11.10.2011