写点什么

你对 SQL 的认识可能是错的

2015 年 10 月 15 日

Lukas Eder 是 jOOQ 母公司 Data Geekery GmbH 的创建者兼首席执行官。关于 SQL,他经常听到一些错误的观点,比如:

SQL 已经老化。我们为什么不使用更现代的技术?

像汇编一样,SQL 是低级语言。你是喜欢使用汇编还是 Java 呢?类似地,你是喜欢使用 SQL 还是 Hibernate 呢?

近日,他发表了一篇博文,逐一反驳了类似的偏见和谬论。

谬论1:SQL 已经老化

Lukas 认为,许多人之所以认为 SQL 已经老化,是因为它是一项已经超过了 30 年的 ISO/IEC 标准,而且是以更为古老的关系代数学为基础。但他指出,知名网站 Use The Index, Luke 的作者 Markus Winand 已经很好地展示了SQL 这些年的发展。现代SQL 已经可以做许多超出通用编程语言开发人员意料的事。

谬论2:SQL 是低级语言

Lukas 并不认为 SQL 是同汇编一样的低级语言。相反,他认为 SQL 是主流语言中最高级的,因为 SQL 是唯一真正流行的第四代编程语言。而且,SQL 还是唯一真正流行的声明式编程语言。使用SQL,只需要告诉机器需要什么数据,如何获取这些数据则由查询分析器完成。

谬论3:NoSQL 更现代

“NoSQL 比SQL 更现代”, Lukas 认为,这是 NoSQL 数据库供应商的宣传之词。他指出,如果(层次化)的 JSON 数据存储就是现代的话,那么 SQL 并不落后。许多关系型数据库提供商都已经集成了 JSON。而且,即使是对半结构化数据而言,SQL 仍然是最好的查询和数据批处理语言。实际上,SQL 就是针对 SQL 出现之前的混乱而设计的。关于这一点,感兴趣的读者可以阅读《 Codd 的关系型观点——NoSQL 兜了个圈又回到了原点?》。现如今,许多大数据数据库提供商都押宝 SQL 作为查询语言, Mark Madsen 已经在 Strata Conf 大会上做了很好地展示

谬论 4:数据库不适合编写业务逻辑

在 Lukas 看来,这是最大的谬论,因为事实正好相反,数据库是进行统计运算的最佳之处。它有许多信息可以帮助运算,而且是在内存中进行。它还有约束、索引和其它各种元数据来帮助优化查询。这种优化使用纯 Java 代码可能是无法实现的。另外,这种方法还有一个巨大的优势,就是业务逻辑在一个地方实现,却可以供多个应用程序使用。

此外, Lukas 还以窗口函数为例说明了 SQL 的简洁性,并指出,窗口函数及其它许多很棒的 SQL 特性自 SQL:2003 起已经实现标准化,使用这些特性,无需担心被数据库供应商锁定。

最后,Lukas 总结道:

  • SQL 能做的事比你知道的要多许多;
  • SQL 比许多其它技术都要先进得多;
  • SQL 是实现业务逻辑的理想之地。

感谢魏星对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015 年 10 月 15 日 19:005282
用户头像

发布了 1008 篇内容, 共 319.1 次阅读, 收获喜欢 289 次。

关注

评论

发布
暂无评论
发现更多内容

数字时代,如何跟上互联网医院的建设潮?

CECBC区块链专委会

数字化医疗

清华大佬马士兵告诉你从阿里P5级一直学到P8架构师的成长路线+视频教程!

比伯

Java 编程 架构 面试 计算机

我是如何在五年阿里面试官的连珠炮问下三面斩获Java岗offer,最后定级P6的呢?

Java~~~

《具有算法和程序的离散数学基础》PDF免费下载

计算机与AI

算法 离散数学

白皮书丨关于工业互联网,你想知道的都在这儿

华为云开发者社区

工业互联网 华为云 白皮书 ICT 智能

iOS 项目避坑:多个分类中方法重复实现检测

iOSer

ios 项目管理 编程语言 iOS Document

跨国区块链投资 花式“割韭菜”骗光你的钱

CECBC区块链专委会

区块链

架构师训练营第 10 周学习总结

netspecial

极客大学架构师训练营

精心整理MySQL基本使用(数据库的操作、数据类型、MySQL的常用命令)

ShenDu_Linux

c++ MySQL 程序员 数据类型

go-zero 如何扛住流量冲击(二)

万俊峰Kevin

go microservice

我就不信2W字把源码拆的这么碎,你还不明白mybatis缓存

996小迁

Java 源码 架构 面试 mybatis

Python进阶——什么是上下文管理器?

Kaito

Python

数仓搬迁:从方法到实践,带你解决数据一致性对比

华为云开发者社区

数据仓库 数据 存储 数据校验 搬迁

阿里要求其内部程序员必须精通的并发编程笔记:原理+模式+应用

Java架构追梦

阿里巴巴 编程 面试 并发 java架构

多线程源码明白了吗?不明白的话来看腾讯大牛给你画的面试重点

小Q

Java 学习 架构 面试 线程

区块链技术赋能信息通信行业信用监管

CECBC区块链专委会

区块链 信用

架构师训练营第 1 期 - 第十周总结

Todd-Lee

极客大学架构师训练营

Week 1 学习总结

J

极客大学架构师训练营

一张图彻底理解Spring如何解决循环依赖!!

冰河

spring aop ioc 源码解析 循环依赖

五周 - 总结

水浴清风

tcp/ip协议栈——epoll的内部实现原理

Linux服务器开发

TCP/IP 后端开发 epoll 网络协议栈 服务器开发

Redis面试受阻?阿里P8架构师整理出的核心笔记+实战+面试题+脑图送你

比伯

Java 编程 程序员 面试 计算机

如何应对Spark-Redis行海量数据插入、查询作业时碰到的问题

华为云开发者社区

数据库 redis spark 开源 数据

WSL2:我在原生的Win10玩转Linux系统

梁桂钊

架构师训练营第 1 期 - 第十周作业

Todd-Lee

极客大学架构师训练营

学习工作即游戏:游戏化生存的现实物语

脑极体

深入浅出Spark

大数志

大数据 spark 数据科学

讲真,你知道Python咋来的吗?

华为云开发者社区

Java Python 编程语言 C语言 代码

Week 10 作业

黄立

和同事交流不会kafka怎么行,API奉上,不是大神也能编

小Q

Java 学习 架构 面试

架构师训练营第十周课后作业

Gosling

极客大学架构师训练营

你对SQL的认识可能是错的-InfoQ