谈到 Hibernate 和其他 ORM 类型,ORM 宣传者们喜欢把 SQL 比作数据库的汇编语言。
我认为现在断言这一点还为时过早,但我猜在不久的将来可能会成真,不确定。
更新:我所说的类比是指 SQL 对 Assembly,就像 ORM 对 C/Java/C# 一样。当然,无法进行完全的类比。问题是,未来是否会随着更强大的计算机,开发人员只使用ORM(或类似ORM)而不是 SQL。
谈到 Hibernate 和其他 ORM 类型,ORM 宣传者们喜欢把 SQL 比作数据库的汇编语言。
我认为现在断言这一点还为时过早,但我猜在不久的将来可能会成真,不确定。
更新:我所说的类比是指 SQL 对 Assembly,就像 ORM 对 C/Java/C# 一样。当然,无法进行完全的类比。问题是,未来是否会随着更强大的计算机,开发人员只使用ORM(或类似ORM)而不是 SQL。
绝对不是。
汇编语言是一种非常低层次的语言,您可以告诉处理器要做什么,包括您想使用哪些寄存器等。
SQL是一种非常高级的语言,您描述您想要的语义,然后查询优化器决定如何执行它,因此您甚至不控制执行什么。它是一种非常强大和灵活的语言,任何ORM最多只提供其子集。
你会注意到,.NET框架最近引入了LINQ,这是一种将高级SQL类似结构引入到C#和VB等语言中的方式。与汇编语言不同,很容易争论认为SQL在抽象级别上比大多数主流编程语言更高。
我听过很多年关于关系型和面向对象之间阻抗不匹配的废话。
我的答案一直是:确实存在非常大的阻抗不匹配——天真固执的“一切都是对象,只有对象”与精细灵活的“数据描述现实世界的事物;这些数据可以以尚未知的不同方式组合,产生可以数学证明的结果。”
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
现在我希望我能告诉你如何编写并行汇编语言,但我强烈怀疑这并不像添加类似于/+ 并行 (e,4) /这样简单。
不要相信那个废话。
这绝不会发生。SQL 实际上是一种 DSL,而汇编语言显然不是。将关系型数据库映射到对象模型是有用的,但不是数据库的唯一目的,ORM 是数据库使用的一小部分,因此 SQL 将始终是处理数据库的首选语言!
RPG是数据库的汇编语言。 :-)
不,但您可能会说SQL是数据库的C语言。它们都是以数据为导向而非对象为导向的,与程序和命令有关。就像C语言一样,更高级的语言更容易建模对象和功能,但最终C语言是性能衡量的基准。
在以下意义上讲:ORM提供了高级,面向特定领域的API,该API发出SQL语句,就像高级语言创建面向特定领域的API并发出机器语言指令一样。
即:
然而,我并不是要暗示人们会停止使用SQL并更喜欢ORM,就像人们停止使用汇编语言并更倾向于高级语言一样。