我的查询包括一个拥有和计数或全部。这些如何在RA / DRC / TRC中表示?我是否需要进一步简化SQL查询?这是一个简化的示例:
empl(employee (primary key), city) managers(employee (primary key), manager (foreign key of employee))
如果要查找X城市中所有雇员的所有经理(来自任何城市)的所有雇员,则需要使用had / count。不确定如何在RA / DRC / TRC中完成此操作。
我知道需要这样的查询可能没有道理,但认为就此问题而言,这样做是明智的。
谢谢
您的查询有点模棱两可。确实是要找到所有X城中每个人的经理以及每个员工的经理?
正如dportas指出的那样,这在RA中是完全可行的。
这是如何做 :
获取X城市中所有雇员的集合。将其称为EMPX。
获取所有经理的集合。叫那个MGRS。
使两者的笛卡尔积。称之为MGRS_EMPX。
减去表的实际值(适当地向下投影到所需的属性),该值表示哪些管理者管理哪个员工。这种差异保留了实际存在的经理的所有组合以及位于X中的雇员,但该经理不管理该雇员的情况。
将该差异投影到manager属性上。这关系告诉你哪个经理存在,从而存在在X市一些员工是 不是 由管理员负责管理。
从MGRS中减去此关系。显然,此关系告诉您存在哪些经理,从而使X城中不存在不受该经理管理的员工。
将对否定性量词的否定重写为通用量将显示这正是您想要的结果:NOT EXISTS(EMP:EMP在X中,而EMP由MGR管理)=== FORALL EMP:NOT(EMP在X中。由MGR管理的AND EMP)=== FORALL EMP:(EMP不在X中,或者EMP由MGR管理)=== FORALL EMP :(如果EMP在X中,则EMP由MGR管理)。
所有这些都是完美的代数运算。
(练习:看看如果X城根本没有员工,会发生什么情况。)