这是我数据库课程中期练习中的一个问题。假设我有以下关系模式:
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。
答案 0 :(得分:2)
如果没有分组运算符,我们必须做一些迂回方法来获得所需的结果:
自带表格的笛卡尔积(我现在将属性称为EMP1
,EMP2
,Worktype1
等。注意“正确”关系代数,你必须在笛卡尔积之前重命名这些属性。)
使用EMP1 = EMP2
,Season1 = Season2
,WorkType1 != WorkType2
选择元组。请注意,关系代数的某些定义不允许在谓词中使用!=
。没有它,它仍然可能,但需要更多的解决方法。我假设我可以使用它。
投影并将EMP1, WorkType1, Season1
重命名为原始属性名称。您现在有一个关系,其中包含一个工作人员在一个季节中处理多种工作类型的实例。
将原始表格的设置差异与步骤3中获得的差异。此关系仅包含工作人员在一个季节中仅处理一种工作类型的情况。
EMP#
属性。