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

关系代数中“Exactly one”查询:如何获取仅拥有一辆蓝色汽车的人员信息

关系代数实现“仅拥有一辆蓝色汽车的人员”查询方案

传统的关系代数(你参考的《Fundamentals of Database Systems, 7th Edition (Global Edition)》中的定义)并不直接支持Count这类聚合操作,需要用基本运算组合来实现需求,具体步骤如下:

  1. 筛选所有拥有蓝色汽车的人员与车辆关联记录
    先通过等值连接关联PEOPLE和CAR,再筛选出颜色为蓝色的记录:
BlueOwners = σ Color='Blue' (PEOPLE ⋈ (ID=PID) CAR)
  1. 找出拥有超过一辆蓝色汽车的人员ID
    对BlueOwners做自连接,匹配同一人员的不同车辆记录,最后投影出这类人员的ID:
MultipleBlueOwners = π ID (σ (BO1.ID = BO2.ID) ∧ (BO1 ≠ BO2) (BlueOwners × BlueOwners))

注:BO1和BO2是BlueOwners的两个别名,用于区分自连接的两个副本。

  1. 筛选仅拥有一辆蓝色汽车的人员
    从所有拥有蓝色汽车的人员中,排除掉拥有多辆蓝色汽车的人员:
SingleBlueOwners = π ID, Lastname, Firstname (BlueOwners) - π ID, Lastname, Firstname (BlueOwners ⋈ (ID=ID) MultipleBlueOwners)
  1. 最终投影所需字段
    直接从SingleBlueOwners中提取姓名字段:
π Lastname, Firstname (SingleBlueOwners)

完整关系代数表达式

π Lastname, Firstname (
    π ID, Lastname, Firstname (σ Color='Blue' (PEOPLE ⋈ (ID=PID) CAR))
    -
    π ID, Lastname, Firstname (
        σ Color='Blue' (PEOPLE ⋈ (ID=PID) CAR)
        ⋈ (ID=ID)
        π ID (σ (BO1.ID = BO2.ID) ∧ (BO1 ≠ BO2) (σ Color='Blue' (PEOPLE ⋈ (ID=PID) CAR) × σ Color='Blue' (PEOPLE ⋈ (ID=PID) CAR)))
    )
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 11:20:03