谈到 hibernate 和其他 ORM,ORM 的布道者谈论 SQL 就像数据库的汇编语言一样。
我认为很快就会断言这一点,但我想在不久的将来可能是真的,不确定。
更新:我所指的类比意味着SQL 是组装 ORM 是C / Java / C #。当然,不可能有一个确切的类比。问题是在未来,如果使用更强大的计算机,开发人员将只使用ORM(或类似 ORM)而不是SQL。
绝对不。
汇编语言是一种非常低级的语言,您可以在其中准确地指示处理器做什么,包括您要使用的寄存器等。
SQL 是一种非常高级的语言,您可以在其中描述所需内容的语义,然后查询优化器决定如何执行它,因此您甚至无法控制要执行的内容。它是一种极其强大和灵活的语言,任何 ORM 最多只能提供一个(相当小的)子集。
您会注意到 .NET 框架最近引入了 LINQ,这是一种将高级 SQL 类结构引入 C# 和 VB 等语言的方法。与其像汇编程序一样,很容易争论说 SQL 在比大多数主流编程语言更高的抽象级别上工作。
多年来,我听到了很多关于关系和 OO 之间的阻抗不匹配的问题。
我的回答一直是,确实存在很大的阻抗不匹配——在天真的不灵活的“一切都是对象,只是一个对象”和极其灵活和复杂的“数据描述现实世界的事物;这些数据可以以不同的方式组合产生数学上可证明的结果的未知方法”。
OO 不是唯一的水果人。
不,关系代数是数据库的“汇编代码”。
SQL 是“C 代码”,可读性强并且与“硬件”足够接近,只要您知道自己在做什么 :-) 就能够胜过所有其他高级语言。
不,SQL 本身是一个高级抽象层,(大部分)与数据库无关。
SQL 与汇编语言有一些共同点:
然而,与汇编不同的是,SQL 是一种高级的、独立于平台的语言。此外,汇编语言没有 ANSI/ISO 标准。
不,不,不是。那些说从未编写过汇编代码的人。
如果您只进行在线事务处理,则只使用简单的 sql 语句。Hibernate 可以为您生成它们。
但是,如果您想做报告、数据分析或快速批量操作,您必须学习 SQL,并且您通常会使用供应商特定的 SQL 扩展。例如,当您使用供应商特定的 SQL 时,可以查询分层数据。
如果你想正确使用 SQL,你必须在集合中思考,而不是逐行的小语句。因此我说它与汇编程序完全相反。
让我们比较一下编写并行化 SQL 和编写并行化汇编程序。
这是在 Oracle 中编写并行化 sql 语句的方式:
select /*+ parallel (e, 4) */ deptno,count(*)
from employees e
group by deptno
现在我希望我能告诉你如何编写并行汇编程序,但我强烈怀疑它是否像添加/ + parallel (e,4) /这样的东西那么容易。
不要相信这种胡说八道。
这永远不会发生。SQL 确实是一个 dsl,而汇编器绝对不是。将关系数据库映射到对象模型很有用,但不是 dbs 的唯一目的,即 orms 只是数据库用途的一小部分,因此 sql 将始终是处理 dbs 的首选方言!
RPG是数据库的汇编语言。:-)
不,但是您可能会说 SQL 是数据库的 C。它们既是过程性的又是命令性的,并且是面向数据的而不是面向对象的。和 C 一样,它更容易用高级语言对对象和功能进行建模,但最终 C 是性能测量的基准。
在以下意义上,它是:ORM 提供了一个高级的、特定于域的 API,它发出 SQL 语句,就像高级语言创建特定于域的 API 并发出机器语言语句一样。
IE:
但是,我并不是要暗示人们将停止使用 SQL 并更喜欢 ORM,就像人们停止使用汇编并更喜欢 HLL 一样。