You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关系代数习题中name1、name2属性的相关技术疑问

关系代数查询疑问解答

数据库模式

person(ID, firstName, lastName, nickName)
follows(pID1, pID2)
  • person表存储人员信息,ID为唯一标识
  • follows表记录关注关系,pID1、pID2均为person表ID的外键

习题要求

编写关系代数查询,找出所有满足「name1关注name2」的昵称对(name1, name2)

疑问列表

  • 习题初始未指定name1、name2属性,为何突然出现?
  • name1、name2代表什么(如属性或nickName的子成分)?
  • 编写查询时应如何使用这两个新属性?

你的查询语句问题分析

你给出的查询语句:

π nickName (σ pID1=ID ∧ pID2=ID (person ⨝ follows))

存在逻辑错误:连接person和follows后,同时要求pID1=ID和pID2=ID,等价于查询“关注自己的人”,且仅投影单个nickName,无法得到题目要求的二元昵称对。

疑问解答

  1. 为何突然出现name1、name2?
    这是习题里的结果元组分量别名,用来明确查询输出的结构:一个二元组,第一个元素是关注者的昵称,第二个是被关注者的昵称。属于题目表述的简化指代,并非数据库中预先定义的属性。

  2. name1、name2代表什么?
    name1对应关注者的nickName(即follows表中pID1关联的person的nickName),name2对应被关注者的nickName(即follows表中pID2关联的person的nickName)。它们是题目用来描述结果含义的命名,不是数据库原生属性。

  3. 编写查询时如何使用这两个新属性?
    需要通过两次关联person表,分别获取关注者和被关注者的昵称,再将这两个昵称投影并重命名为name1、name2。正确的关系代数查询示例:

π name1, name2 (
    σ f.pID1 = p1.ID ∧ f.pID2 = p2.ID (
        ρ p1(person) ⨝ ρ f(follows) ⨝ ρ p2(person)
    )
)

或更直观的写法:

π p1.nickName→name1, p2.nickName→name2 (
    (person as p1 ⨝ follows) ⨝ person as p2
    where p1.ID = follows.pID1 and p2.ID = follows.pID2
)

这里通过给person表重命名为p1(关注者)和p2(被关注者),分别关联follows的两个外键,最终将两个nickName映射为题目要求的name1、name2,得到符合需求的昵称对。

内容的提问来源于stack exchange,提问作者Paradoxac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 19:16:00