我们如何根据表中的行的含义进行查询和推理
对于最简单的关系代数,其中关系具有设置为标题的属性和设置为主体的元组:
每个查询表达式都有一个关联的(特征)谓词--fill-in-the-(named)-blanks 由属性参数化的语句模板。使谓词变为真的元组主张--声明--处于关系中。如果不知道每个基本关系的谓词,我们就无法更新或查询业务情况。
我们得到的表达式的谓词是关系(值或变量)名称。
令查询表达式 E 具有谓词 e。然后:
-
R ⨝ S
有谓词r and s
-
R ∪ S
有谓词r or s
-
R - S
有谓词r and not s
-
σ p (R)
有谓词r and p
-
π A (R)
有谓词exists
non-A attributes of R
[r]
给定一个关系代数查询,我们可以从叶子向上应用上述事实来获取其谓词的表达式。给定一个谓词表达式,我们可以类似地应用上述事实来走另一条路;如有必要,我们首先重新排列为等效表达式,其中每个∪
& -
有 2 个具有相同属性的参数。 (它总是可以重新排列每个Codd 约简算法到一定程度prenex范式.)
重新关系代数查询。 https://stackoverflow.com/a/24425914/3404097
将其应用于您的查询
据推测,Apartment 中的公寓 ID 是针对公寓的,而 Rental 中的公寓 ID 是针对出租公寓的。那么未出租的公寓就是Apartment中的公寓而不是Rentaling中的公寓。它们的 id 是那些基本关系的投影之间的关系差异中的 id。
猜测您的 ERD 的图例/密钥,在引用 Apartment 的 Rental 中有一个 FK(外键)。这证实了 Rental 中的公寓也在 Apartment 中。所以Apartment ⨝ Rental
拥有相同的公寓Rental
。这确认您不需要加入;您可以仅使用出租来出租公寓。
你提到了 NULL 和 EXISTS。也许您正在谈论 SQL NULL & EXISTS 和/或您正在尝试查找 SQL 查询的关系代数版本和/或您正在 SQL 中进行推理。和/或者您可能正在谈论逻辑 EXISTS 以及值是否存在于列或元组中。
从关于租房的常识以及你没有说的其他方面来看,Rental
可能是行occupant O rented apartment A from date F to date T
。但你提到了NULL。根据常识&猜测 T 可以为 NULL,Rental
似乎是行occupant O rented apartment A from date F to date T OR occupant O rented apartment A from date F ongoing & T is null
.
NULL 是由 SQL 运算符和语法特殊处理的值。我们不知道你的代数和语言如何对待 NULL。在数学方面EXISTS X [p]
& FOR SOME X [p]
假设存在一个我们可以命名为 X 且满足条件 p 的值。 SQLEXISTS (R)
表示表 R 中是否存在行。即是否EXISTS t [t IN R]
。当R为(X,...)rows其中r时,即是否EXISTS X,... [r]
.
当 R 是 r 的行时,π x (R)
根据定义行,其中EXISTS
non-x attributes of R
[r]
. So π A (Rental)
是行,其中EXISTS O,F,T [occupant O rented apartment A from date F to date T OR occupant O rented apartment A from date F ongoing & T is null]
.
当 R 是 r 的行时,σ p (R)
根据定义行,其中r & p
。行在哪里occupant O rented apartment A from date F ongoing & T is null
是行,其中(occupant O rented apartment A from date F to date T OR occupant O rented apartment A from date F ongoing & T is null) & T is null
。那是σ T is null (Rental)
.
当 R 是行,其中 r & S 是行,其中 s,R - S
根据定义行,其中r & NOT s
。认为Apartment
是行,其中apartment A has S square feet ...
。你想要的行在哪里EXISTS S,... [apartment A has S square feet ...] & NOT EXISTS O,F,T [occupant O rented apartment A from date F to date T OR occupant O rented apartment A from date F ongoing & T is null]
。那是π A (Apartment) - π A (Rental)
。这就是本节开头的关系差异。