如何对关系代数中不存在的内容进行建模或查询 [英] How to model or query for something that does not exist in relational algebra

查看:30
本文介绍了如何对关系代数中不存在的内容进行建模或查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想查询所有从未出租的公寓的ID。

我尝试了类似的操作:

    (π a_id (apartments))
-
    (π a_id
    σ from_date Exists ∧ end_date Exists 
    (rental) ⨝ rental.a_id on apartment.a_id (apartment))

但我认为我不能在关系代数中使用EXISTS或NULL。

我怎么做?

我附加架构here

推荐答案

我们如何根据表中行的含义查询原因

对于最简单的关系代数,其中关系的属性设置为标题&tuple设置为主体:

每个查询表达式都有一个关联的(特征)谓词--按属性参数化的填空(已命名)语句模板。使谓词变成真正的命题--语句--的元组在关系中。在未被告知每个基本关系的谓词的情况下,我们无法更新或查询业务情况。

为我们提供了关系(值或变量)名称表达式的谓词。

假设查询表达式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)HAS谓词existsnon-A attributes of R[r]

给定一个关系代数查询,我们可以从叶子开始应用上述事实来获得其谓词的表达式。给定一个谓词表达式,我们可以类似地将上述事实应用于另一种方式;如果需要,我们首先重新排列成一个等价的表达式,其中每个&;-都有2个具有相同属性的参数。(它始终按照Codd的归约算法重新排列为特定的prenex范式。)

Re relational algebra querying.

将其应用于您的查询

假设公寓中的公寓ID用于公寓&;Rental中的公寓ID用于出租的公寓。那么未租的公寓是公寓里的,而不是出租的。它们的ID是那些基本关系的投影之间的关系差异中的ID。

猜测您的ERD的图例/键,在Rental Reference公寓中有一个FK(外键)。这证实了Rental的一套公寓也在公寓里。所以Apartment ⨝ RentalRental拥有相同的公寓。这证实了您不需要加入;您可以只使用Rental来出租公寓。

您提到空&;存在。可能您正在谈论SQL NULL&;EXISTS和/或您正在尝试查找SQL查询的关系代数版本和/或您正在使用SQL进行推理。和/或可能您谈论的是逻辑存在&;无论值存在于列还是元组中。

从租赁的常识来看,Rental可能是occupant O rented apartment A from date F to date T所在的行。但是你提到了NULL。根据常识&猜测T可以为空,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]中,假设存在一个值,我们可以将其命名为满足条件p的X。SQLEXISTS (R)表示表R中是否存在行,即EXISTS t [t IN R]。当R为(X,.)时其中r的行数表示是否EXISTS X,... [r]

当R是其中r的行时,π x (R)根据定义是其中EXISTSnon-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)。这就是本节开头的关系差异。

这篇关于如何对关系代数中不存在的内容进行建模或查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆