每当我们面前有任何查询描述时,我们都会尝试应用启发式和头脑风暴来构建查询。
是否有任何系统的分步或数学方法可以根据给定的人类可读描述构建 SQL 查询?
例如,如何确定 SQL 查询是否需要联接而不是子查询、是否需要 group by、是否需要 IN 子句等等。
例如,任何研究数字电子学的人都会知道卡诺图或奎因·麦克劳斯基方法等方法。这些是简化数字逻辑的一些系统方法。
是否有类似这样的方法来手动分析sql查询以避免每次头脑风暴?
在考试中,我被要求以 SQL 查询和代数表达式的形式获取拥有不止一笔租金的客户列表。
由于某些原因,更正没有提供代数版本。
所以现在我只剩下:
SELECT IdClient, Name, ...
FROM Client
WHERE IdClient IN (
SELECT IdClient
FROM Rental
GROUP BY IdClient
HAVING COUNT(*) > 1
)
Run Code Online (Sandbox Code Playgroud)
我不知道代数符号是否有标准,因此:
然后我翻译成:
? IdClient, Name, ... (
? (count(IdClient)>1) (? Rental) ? (Client ? Rental)
)
Run Code Online (Sandbox Code Playgroud)
但我找不到任何来源来证明我是对还是错,尤其是对于:
? Rental 看起来像一个阴暗的生意我count()在https://cs.stackexchange.com/questions/29897/use-count-in-relational-algebra看到了使用,虽然它的使用方式不同,但我想不出一种使用方法它没有投影(我想避免。)
当FE Codd提出关系模型时,已建立的时间数据库使用了层次模型.我的理解是,关系模型被认为是对分层方法的重大改进.
我的直觉是,出于某些原因,这"有道理".
然而,虽然感觉关系数据模型具有优势,但我想要了解为什么它当时被认为显着优越,并且可能仍然存在.
我真的很感激某些提炼形式的论点,或理想情况下,一篇或多篇论文或其他文件,或经过这背后推理的规范参考.
为清楚起见,我不会询问任何一种方法的实际实现,或者它们在存储或计算方面的相对资源使用情况,除非这对答案非常重要.
谢谢.