2

这是我的数据库课的练习​​期中的一个问题。假设我有以下关系模式:

WorkList(EMP#, WorkType#, Season) EMP#,WorkType#Season结合形成主键

(121, 1, Winter)
(121, 2, Winter)
(114, 1, Spring)
(114, 2, Spring)
(114, 2, Fall)

应该返回元组

(114)

WorkType#我可以使用什么关系代数表达式来返回在某个时间点只在一个季节工作的工人?我们只能使用并集、减集、笛卡尔积、自然连接、选择、项目、重命名和交集。

4

1 回答 1

3

在没有分组运算符的情况下,我们必须做一些迂回的方法来获得所需的结果:

  1. 取表的笛卡尔积本身(我现在将属性称为EMP1EMP2Worktype1等。注意“正确的”关系代数,您必须在笛卡尔积之前重命名这些属性)。

  2. 选择带有EMP1 = EMP2, Season1 = Season2,的元组WorkType1 != WorkType2。注意一些关系代数的定义不允许!=在谓词中。没有它仍然是可能的,但需要更多的解决方法。我假设我可以使用它。

  3. 投影并重命名EMP1, WorkType1, Season1为您的原始属性名称。您现在有一个关系,其中包含一个工人在一个季节中从事过一种以上工作类型的实例。

  4. 取原始表与步骤 3 中获得的表的集合差异。这种关系仅存在工人在一个季节只从事一种工作类型的情况。

  5. 投影EMP#属性。
于 2013-11-07T21:50:52.270 回答