Sql 一对多关系的关系代数

Sql 一对多关系的关系代数,sql,relation,algebra,relational-algebra,Sql,Relation,Algebra,Relational Algebra,假设我有以下关系: Academic(academicID(PK), forename, surname, room) Contact (contactID(PK), forename, surname, phone, academicNO(FK)) 这不是家庭作业,我只是想了解记谱法的用法,下面如果你能帮我的话 π(关系,attr1,…attrn)表示从关系中投影n个属性 σ(关系、条件)表示选择与条件匹配的行 ⊗(relation1,attr1,relation2,attr2)表示将命名

假设我有以下关系:

Academic(academicID(PK), forename, surname, room)

Contact (contactID(PK), forename, surname, phone, academicNO(FK))
这不是家庭作业,我只是想了解记谱法的用法,下面如果你能帮我的话

π(关系,attr1,…attrn)
表示从关系中投影n个属性

σ(关系、条件)
表示选择与条件匹配的行

⊗(relation1,attr1,relation2,attr2)
表示将命名属性上的两个关系连接起来

relation1–relation2
是两种关系之间的区别

关系1÷关系2
是一种关系与另一种关系的划分

我看到的示例使用了三个表。我正在使用Java,只想知道当只涉及两个表(academic和contact)而不是三个表(academic、contact和owns)时的逻辑

到目前为止,我一直在使用这种结构 "

lessumvac=∏(σ(职位,空缺<2),类型)
所有类型=π(作业,类型)
所有类型–LESSUMVAC。
我如何构造..的代数


列出学术“John”拥有的所有联系人的姓名。

您必须使用
自然联接扩展您的操作集⋈
左外连接⟕和/或<代码>右侧外部连接⟖以显示连接

维基百科上有一篇关于这方面的文章。你绝对应该读那本

列出学术“John”拥有的所有联系人的姓名

为此,您将加入
academical
Conctact
关系,筛选John,并投影name属性。为了提高效率,请在加入之前选择John:


π名,surename(联系人⋈academicNO=academicID(πacademicID(σforename=“John”Academic)))

你忘了给我们看关系了吗
工作
?没必要,我只是展示一下结构。将结果分配给一个变量lessumvac等。人们倾向于提出复杂的解决方案,所以这只是为了显示我想要帮助的结构。那么你的问题是什么?顺便说一句,你对关系代数的描述是不完美的,看看
LessNumVac = Π( σ( job, vacancies < 2 ), type )
AllTypes = Π( job, type )
AllTypes – LessNumVac.