在这篇文章中,让我们讨论关系代数中常见的问题类型。在阅读本文之前,你应该对 基本运算符 和 扩展运算符 在关系代数中。
1型:给定一个关系代数表达式,找到结果。 假设您有一个关系订单(Prod_Id、Agent_Id、Order_Month),您必须找出下面的代数表达式将返回什么。
∏Order1.Prod_Id (ρ(Order1,Order) Order1.Prod_Id=Order2.Prod_Id and Order1.Agent_Id≠Order2.Agent_Id and Order1.Order_Month=Order2.Order_Month ρ(Order2,Order))
从最里面的括号开始处理表达式。
在本例中,我们将order重命名为Order1和Order2(两者表示相同的关系顺序)。然后我们在Order1和Order2之间应用了条件连接。它将返回以下行:Order1和Order2的Product_Id和Order_Month相同,但Order1和Order2的Agent_Id不同。它意味着同一个月内两个不同代理订购同一产品的行。然后我们投射产品Id。
因此,最终输出将返回由不同代理商在同一个月订购的产品的Prod_Id。我们可以通过采集样本数据来做到这一点。让订单关系由以下数据组成。
表- 顺序
产品标识 | 探员 | 每月订购 |
---|---|---|
P001 | A001 | 简 |
P002 | A002 | 功能电子块 |
P002 | A001 | 功能电子块 |
P001 | A002 | 功能电子块 |
当我们应用以下表达式时,将选择以蓝色突出显示的行。
(ρ(Order1,Order)Order1.Prod_Id=Order2.Prod_Id and Order1.Agent_Id≠Order2.Agent_Id and Order1.Order_Month=Order2.Order_Month ρ(Order2,Order))
订单1。产品标识 | 订单1。探员 | 订单1。每月订购 | 订单2。产品标识 | 订单2。探员 | 订单2。每月订购 |
---|---|---|---|---|---|
P001 | A001 | 简 | P001 | A001 | 简 |
P002 | A002 | 功能电子块 | P001 | A001 | 简 |
P002 | A001 | 功能电子块 | P001 | A001 | 简 |
P001 | A002 | 功能电子块 | P001 | A001 | 简 |
P001 | A001 | 简 | P002 | A002 | 功能电子块 |
P002 | A002 | 功能电子块 | P002 | A002 | 功能电子块 |
P002 | A001 | 功能电子块 | P002 | A002 | 功能电子块 |
P001 | A002 | 功能电子块 | P002 | A002 | 功能电子块 |
P001 | A001 | 简 | P002 | A001 | 功能电子块 |
P002 | A002 | 功能电子块 | P002 | A001 | 功能电子块 |
P002 | A001 | 功能电子块 | P002 | A001 | 功能电子块 |
P001 | A002 | 功能电子块 | P002 | A001 | 功能电子块 |
P001 | A001 | 简 | P001 | A002 | 功能电子块 |
P002 | A002 | 功能电子块 | P001 | A002 | 功能电子块 |
P002 | A001 | 功能电子块 | P001 | A002 | 功能电子块 |
P001 | A002 | 功能电子块 | P001 | A002 | 功能电子块 |
在1。Prod_Id,输出将为 P002 这是在同一个月内由至少两个不同代理商订购的产品的生产Id。
注—— 如果我们想找到同一个月内至少有三家不同代理商订购的产品Id,可以通过以下方式完成:
∏Order1.Prod_Id (σOrder1.Prod_Id=Order2.Prod_Id and Order1.Prod_Id=Order3.Prod_Id and Order1.Agent_Id≠Order2.Agent_Id and Order1.Agent_Id≠Order3.Agent_Id and Order2.Agent_Id≠Order3.Agent_Id and Order1.Order_Month=Order2.Order_Month and Order1.Order_Month=Order3.Order_Month(ρ(Order1,Order)X ρ(Order2,Order)X ρ(Order3,Order)))
类型2:给定两个关系,自然连接后的最大元组数和最小元组数是多少?
考虑下面的关系r(a, B ,C)和S( B、 D ,E)主键带下划线。关系R包含200个元组,关系S包含100个元组。自然连接R和S中可能的最大元组数是多少?
为了解决这类问题,首先,我们将看到哪个属性将发生自然连接。自然连接选择公共属性值相等的行。在本例中,表达式如下所示:
σR.B=S.B (RX S)
在关系R中,属性B是主键。所以关系R将有200个不同的B值。另一方面,关系S将BD作为主键。所以属性B可以有100个不同的值,或者所有行都有一个值。
案例1: S.B有100个不同的值,每个值都与R.B匹配
在这种情况下,S中的每个B值都将与R中的一个B值匹配。因此自然连接将有100个元组。
案例2: S.B有1个值,该值与R.B匹配
在这种情况下,S中的每个B值都将与R中的一个B值匹配。因此自然连接将有100个元组。
案例3: S.B有100个不同的值,这些值都与R.B不匹配
在这种情况下,S中的B值与R中的B值不匹配。因此自然连接将有0个元组。
案例4: S.B有1个值,它与R.B不匹配
在这种情况下,S中的B值与R中的B值不匹配。因此自然连接将有0个元组。
所以元组的最大数量是100,最小数量是0。
注—— 如果明确提到S.B是R.B的外键,那么上面讨论的案例3和案例4是不可能的,因为S.B的值将来自R.B的值。因此,自然连接中的最小和最大元组数将为100。
参考—— 数据库系统基础bu Navathe
文章作者 奏鸣曲 。如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请发表评论。