database - 如何建模或查询关系代数中不存在的东西

标签 database null exists relational-algebra

关闭。这个问题需要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 ⨝ RentalRental 拥有相同的公寓.这确认您不需要加入;您可以只使用 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 .假设 Apartmentapartment 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/

    相关文章:

    html - 当值为 null 时使用 Thymeleaf

    oracle - 为什么无法删除用户,尽管它存在于 dba_users View 中

    mysql - 如何检查mysql数据库是否存在

    mysql - DBeaver 错误解决 Maven 依赖项

    mysql - 是否可以在内部连接期间重命名连接列?

    MySQL 从两个数据库表中获取最新条目

    null - 从 Ada 中的地址 0x0 读取

    java - 数据截断 : Incorrect datetime value: 'null' in Java

    database - 如果从 Delphi 应用程序创建的 .mdb( Access 数据库)已经存在,如何确定 IN APP?

    database - 没有主键的关系(表)是否符合适当的关系?