您的查询表述有点模棱两可。确实是打算找到所有经理,他们是 X 市每个员工的经理?
正如 dportas 所指出的,这在 RA 中是完全可行的。
就是这样 :
获取 X 市所有员工的集合。调用那个 EMPX。
获取所有管理器的集合。称其为 MGRS。
制作两者的笛卡尔积。称其为 MGRS_EMPX。
从中减去表的实际值(适当地投影到所需的属性),该值表示哪些经理管理哪些员工。这种差异包含真正存在的所有经理组合,其中一名员工位于 X 中,但该经理不管理该员工。
将该差异投射到 manager 属性上。该关系告诉您存在哪些经理,因此在 X 市存在一些不受该经理管理的员工。
从 MGRS 中减去这个关系。显然,这种关系告诉您存在哪些经理,因此不存在位于 X 市且不受该经理管理的员工。
将存在量词的否定重写为全称量词将揭示这正是您想要的结果:不存在(EMP:EMP 在 X 中并且 EMP 由 MGR 管理)=== FORALL EMP:不(EMP 在 X 中AND EMP 由 MGR 管理)=== FORALL EMP:(EMP 不在 X 中或 EMP 由 MGR 管理)=== FORALL EMP:(如果 EMP 在 X 中,则 EMP 由 MGR 管理)。
所有这些都是非常精细的代数运算。
(附带练习:看看如果 X 市根本没有员工会发生什么。)