关系代数/演算证明可以用于测试/验证SQL吗?


9

使用证明形式的关系代数和/或关系演算来测试/验证SQL语句,函数和存储过程的正确性,是否可行甚至可能?

在我看来,至少应该有这种可能,但是我不知道是否缺少细节,使证明与代码之间的1:1映射不正确。

你们有没有尝试过这样的方法?奏效了吗?您的经历如何?


2
请跟我重复:SQL与关系无关。
Deer Hunter

Answers:


4

关系代数运算符和SQL语句之间存在一些已知的映射规则。例如,Sigma运算符映射到SELECT语句,联接运算符具有一对一映射,Delta映射选择列的子集,等等。

是否可以使用关系代数来验证SQL语句的正确性?

是的,有可能。当然,您需要具有所有关系,外键等的清晰数据库模式。在某些情况下,关系代数语句的操作比SQL语句更容易(有公认的用于修改和简化语句的转换规则) 。

但是,另一方面,我认为使用关系代数来验证语句并不比测试SQL语句容易得多,尤其是当您已经准备好可以执行查询并查看结果的数据库时。


1
只是想说:关系运算符映射到“ SELECT DISTINCT”,因为关系代数使用元组集,因此无法处理重复项。sigma本身对应于WHERE子句,pi对应于SELECT等。
2014年

联接运算符不是1:1,SQL版本专门对待null,类似的谓词也不是布尔值。
philipxy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.