关系代数练习,其要求我无法清楚理解

问题描述 投票:0回答:1

我得到了一个练习,其答案很大程度上依赖于关系代数过程查询语言。 不幸的是,鉴于我的经验和水平有限,我无法完全理解它的要求,特别是由于它的编写方式。

练习如下:

考虑以下关系数据库模式:

人(ID、名字、姓氏、昵称) 如下(pID1,pID2)

关系实例 person 存储每个人的信息。每个人都通过他们的 ID 来识别。关系实例 follow 跟踪谁关注谁,即 pID1 follow pID2。属性 pID1 和 pID2 都是关系人中属性 ID 的外键

编写一个关系代数查询,查找所有昵称对 (name1, name2),使得 name1 跟随 name2。

  1. 首先,我不完全理解属性 name1 和 name2 是如何突然发挥作用的,因为练习语句并没有在第一个实例中隐式指定这两个属性,因此实际上 name1 和 name2 代表什么(例如,它们是否确实是 nickName 的属性或子组成部分
  2. 我真的不明白在编写关系代数查询时应该如何正确使用这两个“全新”属性?

我得出的答案如下:

π_nickName (σ_pID1=ID ∧ pID2=ID (person ⨝ follows))

我将按顺序分解并逐一解释: a)人⨝如下 - 我发现有必要使用自然连接操作(也称为笛卡尔积???),以便组合表并简化过滤过程。 b) σ_pID1=ID ∧ pID2=ID - 使用选择操作过滤掉不遵守上述顺序的名称 - 名称 1 跟随名称 2 - 将约束与 ID 属性相关联。不太确定这是否有意义。 c) π_nickName - 仅检索名称为 nickName 的列及其关联域,这些域是 nickName 封装的字符类型值。

database relational-algebra
1个回答
0
投票

自从我在课堂上使用该符号以来已经很长时间了。
在标准 SQL 数据库中,您会看到类似这样的内容。希望这有帮助。

select distinct p1.nickName name1, p2.nickName name2
from follows f
join person p1 on p1.ID = f.pID1
join person p2 on p2.ID = f.pID2
© www.soinside.com 2019 - 2024. All rights reserved.