我了解到关系演算是基于一阶逻辑,因此没有空值的概念,但是可以在关系代数中的查询中使用反联接来表示非空约束。是否存在仅使用关系演算来表达这种查询的等效机制?
例如,可以使用以下形式的基本SQL查询: SELECT * from x WHERE y NOT NULL 用关系演算来表达?
答案 0 :(得分:1)
E.F。Codd建议将空值引入关系模型,但他似乎从未处理过后果。在他的《数据库管理的关系模型》一书中,他提议使用两种不同的null和四值逻辑。他建议这样的系统将需要重言式检测算法,以确保针对某些查询返回正确的结果(或至少是有用的,可理解的结果)。在我看来,尽管我没有证据,但这种计划必须是不切实际的,注定要失败。对我来说,用户似乎不太可能能够正确理解重言式检测。
在Codd的方案下,即使存在空值,类似x = x的短路操作也可能会评估为true。 SQL的作者当然没有遵循Codd的方案,这就是困难所在。在理论上或在工作软件中,都没有统一的规则来处理空值,因此,除非您解释了这样的系统及其规则,否则您的问题将无法回答。