检查我的关系代数对SQL?

时间:2013-08-30 11:55:35

标签: sql relational-algebra

SELECT * FROM Schools JOIN Masts on Schools.City = Masts.City

变为:

Schools ⋊ Masts = σSchools.city = masts.city SCHOOLS X MASTS

我对此是否正确?希望有人在接下来的20分钟左右快速回答。

1 个答案:

答案 0 :(得分:1)

如果你没有这本书的副本:Applied Mathematics for Database Professionals,你真的应该检查一下。它极大地帮助了我解决这些问题。 (精装书是一个真正的发现,但只有一个副本,它太昂贵了 - 但也有软封面版本和电子书格式。)

另外,请查看关于关系代数的这篇非常好的Wikipedia文章。

上面的维基百科文章显示,您要完成的任务称为equijoin,这是一种特殊形式的θ-join。使用上面的示例,您应该输出以下内容:

让:

  • 学校→S;
  • 桅杆→M
  • θ→=

然后:

S⨝θ M→σθ(S×M)

数据库专业应用数学一书中,作者使用“低级”关系代数来定义SQL JOIN。定义如下:

让:

  • 学校→S
  • 桅杆→M

然后:

{s∪m | s∈S∧m∈M∧s(City)= m(City)}

作者进一步继续使用运算符give给出了上述的一般定义(也许他们更容易发布该符号而不是使用传统的⨝符号 - 虽然没有意义,因为他们确实使用乳胶 - 但我会坚持传统的符号):

R⨝θ T→{r∪t| r∈R∧t∈T∧“ r t 兼容”}

兼容性是“用户定义的”,因此⨝θ。 θ可以是任何关系运算符,<,>等等。当测试两个属性相等是成功连接条件的结果时,则θ→=,并且如前所述,这是已知的专用θ-连接作为 equijoin

所以,毕竟:

R⨝θ T→σθ(R×T)→{r∪t| r∈R∧t∈T∧“ r t 兼容”}

我知道这比你发布的时间晚了20分钟,但希望有人觉得它有用。