关闭。这个问题需要details or clarity .它目前不接受答案。
想改进这个问题?通过 editing this post 添加详细信息并澄清问题.
2天前关闭。
Improve this question
我想查询所有从未出租过的公寓的id。
我试过这样的事情:
(π a_id (apartments))
-
(π a_id
σ from_date Exists ∧ end_date Exists
(rental) ⨝ rental.a_id on apartment.a_id (apartment))
但我认为我不能在关系代数中使用 Exists 或 null。我怎么能做到?
我附上架构 here
最佳答案
我们如何根据表中行的含义进行查询和推理
对于最直接的关系代数,其中关系的属性设置为标题,元组设置为主体:
每个查询表达式都有一个关联的(特征)谓词--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 范式。)Re relational algebra querying.
将其应用于您的查询
大概 Apartment 中的公寓 ID 用于公寓,而 Rental 中的公寓 ID 用于出租公寓。那么未出租的公寓是公寓中的公寓,而不是出租公寓中的公寓。它们的 id 是那些基本关系的投影之间的关系差异中的那些。
猜测您的 ERD 的图例/键,在租赁引用公寓中有一个 FK(外键)。这证实了 Rental 中的公寓也在 Apartment 中。所以
Apartment ⨝ Rental
与 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。 SQL EXISTS (R)
表示表 R 中是否存在行。即 EXISTS t [t IN R]
是否存在.当 R 为 (X,...) rows where r 时,即是否 EXISTS X,... [r]
.当 R 是 r 所在的行时,
π x (R)
是根据定义行,其中 EXISTS
non-x attributes of R
[r]
.所以π 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)
.这就是本节开头的关系差异。
关于database - 如何建模或查询关系代数中不存在的东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55663848/