这是个哲学问题..。
今天,我花了太多的时间来调试一个生成SQL命令的方法。
我发现错误是因为代码生成了如下内容:
WHERE X BETWEEN 10 AND 5它没有返回任何值,而正确的形式是:
WHERE X BETWEEN 5 AND 10我的问题是,如果您可以使用比BETWEEN更接近自然语言的WHERE X >= lowerBound AND X <= upperBound语法,那么设计它来自动检测哪个是下限还是哪个是上界就没有意义了?
我的意思是,如果我说我想要10到5之间的数字或5到10之间的自然语言,我想每个人都会告诉我间隔五、十中的数字
我对sql做得太多了吗?
发布于 2015-08-26 19:19:32
实际上,您对数据库的要求太高了。
数据库是为DBA和开发人员设计的。这些人通常不会认为a.b=b.a在数据库或程序的上下文中,并且自然倾向于把最小值放在第一位,而把最大值放在第二位。
可能是因为这个原因,您所使用的数据库的设计者认为,反式,即a.b和a> b,构成了一个不值得特别处理的边情况。毕竟,数据库引擎的目标是非常快,这意味着从代码中删除边缘情况。
代码减少意味着出错的风险更小,调试更少,日志记录更少,测试更少,最终CPU周期和内存使用也更少。
如果同一批人设计的不是数据库,而是针对普通用户的产品,他们可能会做出相反的决定,因为简单的用户会认为“a介于b和c之间”与“a在c和b之间”是完全相同的。
他们是如何决定什么时候创建规范的?也许他们做了个有教养的猜测。也许他们不太在意,认为他们不想写更多的代码。或者,他们实际上观察到程序员使用他们的数据库引擎,并确定你犯的错误的频率太小,不值得关注。出于同样的原因,十年前许多数据库对select a, b from c的响应会比select * from c更快,但这并不总是正确的:通过观察成千上万的程序员在不应该使用*的情况下,一些数据库引擎的设计者最终专门处理这种情况,以便为这两种查询提供相同或非常相似的性能。
https://softwareengineering.stackexchange.com/questions/294651
复制相似问题