【问题标题】:Natural Join in Relational Algebra - Database Theory关系代数中的自然连接 - 数据库理论
【发布时间】:2018-03-28 20:51:38
【问题描述】:

如果我删除了黄色部分,我还能想出正确的答案吗?它甚至是必要的吗?

【问题讨论】:

  • 嗨。请use text, not images/links, for text (including code, tables & ERDs)。使用图像仅是为了方便补充文本和/或无法在文本中给出的内容。你好。请阅读点击谷歌搜索“stackexchange 作业”。说出您正在遵循的参考资料和/或引用您正在遵循的定义和流程。解释你的推理以及你被卡住的地方和原因。为什么黄色不重要? PS 自然连接符号是“领结”。

标签: relational-database relational-algebra natural-join database-theory


【解决方案1】:

为了知道是否可以省略它,您必须查看对应于表达式及其子表达式的谓词。

例如,最里面的限制说(我猜是因为这个例子很熟悉)“供应商 S# 供应 P# 的数量为 QUANTITY AND P# = 3”。或更短的“供应商 S# 供应第 3 部分的数量 QUANTITY”。

关于 S# 的预测然后说“存在一些数量 q,使得供应商 S# 供应该数量的第 3 部分”。

与 S 的 JOIN 然后说“供应商 S# 被命名为 SNAME,[熟悉的部分被剪断] 并且存在一些数量 q,使得供应商 S# 供应该数量的部分 3”。或者更短的“供应商 S# 被命名为 SNAME,[熟悉的部分被剪断] 并提供一定数量的第 3 部分”。

SNAME 上的投影然后说“存在一些 S#、CITY、STATUS,因此供应商 S# 被命名为 SNAME,[熟悉的部分被剪断]并提供一定数量的第 3 部分”。

对于省略“内部投影”的情况,您也可以这样做,然后尝试证明获得的谓词必须与这个等价。如果可以,您知道包含该投影是不必要的。 [如果你不能,你必须更加努力:-)]

【讨论】:

  • “供应商 S# 供应第 3 部分的数量 QUANTITY” 否,因为 P# 应该是免费的。 PS不清楚你所说的“那个[表达]说”是什么意思。你的意思似乎是“那个[表达式]有一个相应的谓词说”。但是您没有解释“对应”或与查询结果或查询有什么关系。 (例如,查询表达式的值是一组元组,它们使相应的谓词成为真正的命题。)或者你在这里所说的谓词的意思。所以从不了解所有这些术语的读者的角度来看,这不是很清楚。
【解决方案2】:

假设这不是家庭作业:

我猜|X| 是自然连接,# 表示主键属性。

S# 上突出显示的投影对于 查询结果的正确性(有效性)。

但是,它可能会提高效率:尽早进行项目 在加入之前删除重复项。这避免了不必要的努力 首先产生重复的 natjoined 元组,投影在 sname 然后必须删除。

【讨论】:

  • “重复”是什么意思?我想不投影会导致一些额外的列,如“P#”和“QUANTITY”。我说的对吗?
  • 我的意思是重复的元组。理论上,关系代数是一个集合论概念,其中不存在“重复”之类的东西。但在实践中,当您必须实现 RDBMS 时,会发生重复,并且为了与理论保持一致,必须以某种方式处理它们。
  • 我刚刚检查了投影的定义,发现它只需要唯一值。我意识到,同一供应商可能会重复发货,产品相同但数量不同(或相同但在其他时间完成并放入数据库导致重复),并且此投影操作会删除这些重复,并且只需要唯一性。非常感谢,你让我自己明白了。
  • @J.Doe 关系运算符不会“删除重复项”,它们不会产生“重复项”。如果您通过将关系转换为非关系来描述它们的结果,例如包或列表,然后再返回关系,那么该描述可能涉及“删除重复项”。
  • @J.Doe 在通常的解释下,'S 供应 P 并且有 Q 库存',每个 子行值只能出现在一行中。并且不太可能在每批货物的基础上声明某些内容,因为它无法记录具有相同 Q 的 2 批货物,只能记录某些货物具有给定的 Q。但是这些唯一性问题对查询无关紧要,因为约束是不需要查询;无论约束如何,您的查询都会返回与某些 Q 的 p3 关联的 Ss 的名称。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-17
  • 2011-04-14
  • 1970-01-01
相关资源
最近更新 更多