📜  如何解决 GATE 的关系代数问题

📅  最后修改于: 2021-09-27 14:49:35             🧑  作者: Mango

在本文中,让我们讨论 GATE 中常见的关系代数问题类型。在阅读本文之前,您应该对关系代数中的基本运算符和扩展运算符有所了解。

类型 1:给定一个关系代数表达式,找出结果。
假设您有一个关系 Order(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)) 

从最里面的括号开始处理表达式。

在这个例子中,我们将订单重命名为 Order1 和 Order2(两者都代表相同的关系订单)。然后我们在 Order1 和 Order2 之间应用了条件连接。它将返回那些 Order1 和 Order2 的 Product_Id 和 Order_Month 相同但 Order1 和 Order2 的 Agent_Id 不同的行。它意味着同一产品在同一个月内由两个不同的代理订购的行。然后我们正在投影 Prod_Id。

所以最终的输出将返回不同代理商在同一月订购的产品的 Prod_Id。我们可以通过获取样本数据来做到这一点。 Let Order 关系由以下数据组成。

表 –订单

Prod_Id Agent_Id Order_Month
P001 A001 JAN
P002 A002 FEB
P002 A001 FEB
P001 A002 FEB

当我们应用以下表达式时,将选择以蓝色突出显示的行。

(ρ(Order1,Order)Order1.Prod_Id=Order2.Prod_Id 
                   and Order1.Agent_Id≠Order2.Agent_Id 
                   and Order1.Order_Month=Order2.Order_Month ρ(Order2,Order))
Order1.Prod_Id Order1.Agent_Id Order1.Order_Month Order2.Prod_Id Order2.Agent_Id Order2.Order_Month
P001 A001 JAN P001 A001 JAN
P002 A002 FEB P001 A001 JAN
P002 A001 FEB P001 A001 JAN
P001 A002 FEB P001 A001 JAN
P001 A001 JAN P002 A002 FEB
P002 A002 FEB P002 A002 FEB
P002 A001 FEB P002 A002 FEB
P001 A002 FEB P002 A002 FEB
P001 A001 JAN P002 A001 FEB
P002 A002 FEB P002 A001 FEB
P002 A001 FEB P002 A001 FEB
P001 A002 FEB P002 A001 FEB
P001 A001 JAN P001 A002 FEB
P002 A002 FEB P001 A002 FEB
P002 A001 FEB P001 A002 FEB
P001 A002 FEB P001 A002 FEB

投影 Order1.Prod_Id 后,输出将是P002 ,即同一月至少有两个不同代理商订购的产品的 Prod_Id。

注意 –如果我们想找到至少三个不同代理在同一月订购的 Prod_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 个元组。自然 Join R 和 S 中可能的最大元组数是多少?

要解决此类问题,首先,我们将看到将在哪个属性上进行自然连接。自然连接选择那些具有相同属性值的行。在这种情况下,表达式将类似于:

σR.B=S.B (RX S) 

在关系 R 中,属性 B 是主键。因此关系 R 将有 200 个不同的 B 值。另一方面,关系 S 将 BD 作为主键。所以属性 B 可以有 100 个不同的值或所有行的 1 个值。

案例 1: SB 有 100 个不同的值,并且这些值中的每一个都与 RB 匹配

在这种情况下,S 中 B 的每个值都将与 R 中的 B 值匹配。因此自然连接将有 100 个元组。

案例 2: SB 有 1 个值并且该值与 RB 匹配

在这种情况下,S 中 B 的每个值都将与 R 中的 B 值匹配。因此自然连接将有 100 个元组。

案例 3: SB 有 100 个不同的值,但这些值都与 RB 不匹配

在这种情况下,S 中 B 的任何值都不会与 R 中的 B 值匹配。因此自然连接将具有 0 元组。

案例 4: SB 有 1 个值,与 RB 不匹配

在这种情况下,S 中 B 的任何值都不会与 R 中的 B 值匹配。因此自然连接将有 0 个元组。

因此,元组的最大数量将为 100,而 min 将为 0。

注意 –如果明确提到 SB 是 RB 的外键,那么上面讨论的 Case-3 和 Case-4 是不可能的,因为 SB 的值将来自 RB 所以,最小和最大元组数在自然连接中将是 100。

参考资料 – Navathe 数据库系统基础