问题描述
教授给我的任务如下:R-E Modell
- 假设这些公司可能位于多个城市。查找位于“小银行公司”所在的每个城市的所有公司 找到。
现在,教授的解决方案如下:
s ← Π city (σ company_name=’Small Bank Corporation’ (company)) temp1 ← Π comp_id,company_name (company) temp2 ← Π comp_id,company_name ((temp1 × s) − company) result ← Π company_name (temp1 − temp2)
我自己发现了一个自然连接方案的完全不同的解决方案,这似乎简单得多:
我试图做的是使用自然联合运算,其定义如下:关系r和s在它们的公共属性上结合在一起。因此,我试图通过对所有公司名称为“小型银行合作”的公司进行投影来获得所有城市的名称。之后,我将带有城市名称的表与公司表一起加入,这样我就得到了所有带有城市名称的公司条目。
company ⋈ Π city (σ company_name=”Small Bank Cooperation” (company)))
现在我的问题是我的解决方案是否也有效,因为这似乎微不足道?
解决方法
您不一样。
My answer here says how to query relationally.它使用关系代数的一种版本,其中标题是属性名称的集合。 My answer here summarizes it:
每个查询表达式都有一个关联的(特征) 谓词-由属性参数化的语句模板。元组 使谓词成为真实的命题(陈述) 关系。
我们为关系名称的表达式提供了谓词。
让查询表达式E具有谓词e。然后:
R ⨝ S
具有谓词{{1}}r and s
具有谓词{{1}}R ∪ S
具有谓词{{1}}r or s
具有谓词{{1}}R - S
有谓词{{1}}r and not s
σ p (R)
当我们希望元组满足某个谓词时,我们找到了一种方法 用关系运算符表达该谓词 给定关系谓词的转换。对应查询 返回/计算元组。
您的解决方案
r and p
是其中的行
π A (R)
即
exists
即
non-A attributes of R
您将返回的行比company_name还要多。但是您的公司不是要求的公司。
在company_name上投影行将在其中显示行
[r]
之后,我与公司一起加入了带有城市名称的表格 表格,这样我就可以获得所有城市名称都在其中的公司条目 它。
目前尚不清楚您会得到什么。但是,您所在行中的公司是至少一个SBC城市中的公司。该请求针对所有SBC城市中的人:
位于“小银行公司”所在的每个城市的公司
我提供的链接告诉您如何构成查询,还可以在查询结果规范和关系代数表达式之间进行转换,以返回结果。
当您看到与其他行的“每”或“所有”匹配的行的查询时,您可以期望查询的该部分涉及relational-division或一些相关的习惯用法。确切的代数取决于(经常表现不佳/模棱两可)需求的目的。例如,当没有这样的城市时,“位于每个城市的公司”应该是没有公司(部门)还是所有公司(相关习语)。 (对您的任务的一般数学解释是后者。)例如,他们是否想要在所有此类城市或至少所有此类城市中的公司。
(这有助于避免在“查找”和“返回”之后出现“全部”和“每个”,因为它们在任何地方都是多余的。)
Database Relational Algebra: How to find actors who have played in ALL movies produced by “Universal Studios”?
How to understand u=r÷s
,the division operator,in relational algebra?
How to find all pizzerias that serve every pizza eaten by people over 30?