关系代数,何时在这些查询中使用投影和选择?

时间:2014-09-09 12:42:39

标签: sql relation relational-algebra

我试图了解何时使用选择和投影运算符。我目前的理解是选择返回符合指定条件的元组,并且投影从它所处理的关系创建一个新关系,但仅限于指定的属性。例如:

σ(attribute="criteria"^(relation)) 

从关系“relation”返回具有指定属性值的所有元组。

Π name (relation) 

会从“关系”关系中找到名称列表,而忽略任何其他属性。

从此示例数据库中,使用星号标记的主键:

employee(*personName*, street, city)
works(*personName*, companyName, salary)
company(*companyName*, city)
manages(*personName*, managerName)

我必须:

A)找到为M& T Bank工作的所有员工的姓名。

Π personName(σcompanyName = “M&T Bank” ^(works))

B)找出可能记录在数据库中的所有公司的名称。

Π companyName (company)

C)找出不是经理的所有员工的姓名。

Π personName (works) - ΠpersonName(manages)

基本上,以上查询是否正确?我对这些操作员的理解是否正确和完整?

1 个答案:

答案 0 :(得分:0)

答案A)是正确的(我也不知道你的符号中^的含义是什么,所以我忽略了它。)

对于B,您应该记住,公司不仅可以记录在公司表中,还可以记录在 works 表中。因此,您的答案应为Π companyName (company) U Π companyName (works)

对于C,您在识别员工时也应该更加小心。有人可能会说,前雇员仍然列在员工中但不在工作中,也应该考虑。根据您(或教师)的观点,您可能需要使用Π personName (works) U Π personName (employee)而不是Π personName (works)

C中更严重的问题是管理者的识别。 ΠpersonName(manages)是被管理的个人,而不是经理。经理是Π managerName(manages)

因此,对于C,您可能更喜欢(Π personName (works) U Π personName (employee)) - Π managerName(manages)

一般来说,您对投影和选​​择的理解是正确的,但在制定答案时您需要更加小心。