用于一对多关系的关系代数



假设我有以下关系:

Academic(academicID (PK), forename, surname, room)
Contact (contactID (PK), forename, surname, phone, academicNO (FK))

我正在使用Java &我想了解符号的用法。

Π( relation, attr1, ... attrn )表示将n个属性投影出关系。
σ( relation, condition)表示选择符合条件的行。
⊗(relation1,attr1,relation2,attr2)表示在命名属性上连接两个关系。
relation1 – relation2是两个关系的差。
relation1 ÷ relation2将一个关系除以另一个关系

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

我使用这个结构:

LessNumVac = Π( σ( job, vacancies < 2 ), type )
AllTypes = Π( job, type )
AllTypes – LessNumVac

如何构造代数:

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

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

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

π name, surename(联系方式 academicNO = academicIDacademicID name = "John" Academic))))

您必须扩展natural join ⋈, Left outer join ⟕和/或Right outer join ⟖的操作集以显示连接。

维基百科上有一篇关于关系代数的好文章。你一定要读这本书!

最新更新