如何在关系代数中表达“无信息”?

时间:2018-10-27 13:00:42

标签: database relational-database relational-algebra

我正在研究关系代数的一项任务是要我找到想要免费租用房地产或未提供信息的客户。 他们愿意支付多少钱。该表如下所示:

Client(clientNo,firstName,lastName,maxRent)

我很难找到有关如何表示信息不足或空数据点的任何信息。.到目前为止,我已经提出了其中一半表达式是伪代码的问题:

σmaxRent = 0或[未提供任何信息](客户端)

1 个答案:

答案 0 :(得分:1)

此表中有哪些行?不知道该如何回答?谁会不知不觉地查询?

假设您的表包含“名为[firstname] [lastname]的client [clientid]愿意支付[maxrent]的行”。如果特定的客户端没有名字和姓氏,则此表中没有对应的行。您无法使用它回答您的查询。如果它们确实有名字和姓氏,但您不知道它们,那么您将无法设置表格-您无法继续操作-该表格不适合您。进一步假设我们拥有所有客户端名称。但是,如果我们不知道他们愿意支付什么,我们同样无法进行。

假设您的表包含“名为[firstname] [lastname]的clent [clientid]说他们愿意支付[maxrent]”的行。然后,您可以将其用于提供最高租金的客户。但是它无法为其他客户记录任何内容。但是,如果您还有一个表,其中包含“名为[firstname] [lastname]的client [clientid]的行,但未说出他们愿意支付的价格”,则可以为所有客户记录。这样您就可以回答您的查询。

假设您的表包含以下行,其中“名为[firstname] [lastname]的[cilent [clientid]表示他们愿意支付[maxrent]或未说明他们愿意支付多少并且[maxrent] =” xxx'”。如果您有客户的ID和名称,但他们没有说出他们愿意支付的价格,那么他们的行会带有maxrent ='xxx'。然后,您可以编写查询-您的“ [未提供任何信息]”表示maxrent ='xxx'。

假设我们有两个表,而不是该表,“客户端[clientid]被命名为[firstname] [lastname]”和“客户端[clientid]愿意支付[maxrent]”。然后,您的表在其含义下就是对这些新表在其含义下的某种查询。每个新表都可以用旧表来表示。一个设计中的查询与另一个设计中的查询之间存在简单的对应关系。这样我们就可以编写您的查询了。

在SQL中,传统是使用NULL作为特殊值,而不是'xxx'。该表的含义是“名为[firstname] [lastname]的客户端[clientid]表示他们愿意支付[maxrent]或没有说他们愿意支付多少,并且[maxrent]为NULL”。 SQL中的运算符特别对待NULL,它们与名称相同的关系运算符或日常运算符都不相同。

请注意,无NULL设计具有更多但更简单的基本表和含义。任何带有NULL的设计都可以重新排列为无。所有这四个设计都可以重新排列为其他任何形式。还有其他样式的无NULL设计与具有NULL的设计更相似。

(肯定会从中提取表格的某本教科书允许maxrent为NULL。它们也从不明确地说出表中有哪些行。但是这种想法是,每个可以包含NULL的表的含义很明显他们显然错了无空含义的含义。他们错误地模糊地说:“没有空值,就必须引入错误的数据来表示这种状态,或者添加可能对用户没有意义的其他属性。”典型的模糊无用的东西,例如“空不是值”。)

(不清楚“未知信息”或“表达”未知或“空数据点”是什么意思。人们可以表达 不知道满足条件的值。但是表中的每一行都根据其含义断言该语句,而其中的每一行(适当类型)中的每一行都根据其含义断言该语句的取反。)

Re relational querying.
What to do with null values when modeling and normalizing?