我的问题根植于T-SQL、SQL Server 环境,但其范围并不局限于此技术。我正在研究一个具有相当复杂业务逻辑的数据库,其中包含现有视图、存储过程和要设计的新视图。通过对不同查询或其中一部分的比较,我有一种强烈的感觉,即有些部分以不同的安排执行相同的工作,但当然要重构整个混乱,我需要的不仅仅是感觉;所以我试图确定一种方法来证明两个语句是等价的。
一个明显但微弱的响应可能是确定两个查询 A 和 B 产生相同的记录集:如果 A 是 B 的子集,B 是 A 的子集,那么它们是相同的记录集;但我不确定这是一个好主意,因为当然,记录集不是查询,结果可能取决于数据和特定的参数值。我的问题是:有一种方法可以证明两个不同查询的等价性吗?我会说是的,因为数据库执行的优化应该适用于此。有人可以为我提供一些指向文档或书籍的指针吗?如果没有通用方法来证明等价性,那么有一些基于回归测试的智能方法,根据一些有效的启发式方法来完成这项工作?
稍后编辑:如果通过关系代数对查询进行逆向工程(手动?),可能是评估查询等效性而不是使用其他查询和/或计算机的更好方法?有自动化工具可以帮助执行这种“逆向工程”,以防万一?
非常感谢您的帮助