关系代数不使用计数

时间:2013-10-19 20:43:28

标签: relational-database relational-algebra

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

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

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

应该返回元组

(114)

什么是关系代数表达式,我可以用来返回那些在某个季节只在一个WorkType#上工作的工人?我们只能使用union,set minus,cartesian product,natural join,select,project,rename和intersection。

1 个答案:

答案 0 :(得分:2)

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

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

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

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

  4. 将原始表格的设置差异与步骤3中获得的差异。此关系仅包含工作人员在一个季节中仅处理一种工作类型的情况。

  5. 投放EMP#属性。