0

谈到 hibernate 和其他 ORM,ORM 的布道者谈论 SQL 就像数据库的汇编语言一样。

我认为很快就会断言这一点,但我想在不久的将来可能是真的,不确定。

更新:我所指的类比意味着SQL 是组装 ORM 是C / Java / C #。当然,不可能有一个确切的类比。问题是在未来,如果使用更强大的计算机,开发人员将只使用ORM(或类似 ORM)而不是SQL

4

13 回答 13

18

绝对不。

汇编语言是一种非常低级的语言,您可以在其中准确地指示处理器做什么,包括您要使用的寄存器等。

SQL 是一种非常高级的语言,您可以在其中描述所需内容的语义,然后查询优化器决定如何执行它,因此您甚至无法控制要执行的内容。它是一种极其强大和灵活的语言,任何 ORM 最多只能提供一个(相当小的)子集。

您会注意到 .NET 框架最近引入了 LINQ,这是一种将高级 SQL 类结构引入 C# 和 VB 等语言的方法。与其像汇编程序一样,很容易争论说 SQL 在比大多数主流编程语言更高的抽象级别上工作。

于 2009-01-15T07:48:22.807 回答
7

多年来,我听到了很多关于关系和 OO 之间的阻抗不匹配的问题。

我的回答一直是,确实存在很大的阻抗不匹配——在天真的不灵活的“一切都是对象,只是一个对象”和极其灵活和复杂的“数据描述现实世界的事物;这些数据可以以不同的方式组合产生数学上可证明的结果的未知方法”。

OO 不是唯一的水果人。

于 2009-01-15T08:37:44.923 回答
6

不,关系代数是数据库的“汇编代码”。

SQL 是“C 代码”,可读性强并且与“硬件”足够接近,只要您知道自己在做什么 :-) 就能够胜过所有其他高级语言。

于 2009-01-15T07:55:29.500 回答
3

不,SQL 本身是一个高级抽象层,(大部分)与数据库无关。

于 2009-01-15T07:49:11.603 回答
2

SQL 与汇编语言有一些共同点:

  • 直接用 SQL 编码使您有机会以非常紧凑的方式编写非常高效的代码。
  • 有效地使用 SQL 是专业软件开发人员和大学课程都忽视的技能。
  • 由于 SQL 非常紧凑,重构 SQL 往往令人厌烦且成本高昂。
  • 有大量的软件开发人员“金字塔基础”,他们满怀热情地讨厌 SQL,更喜欢使用模仿他们首选的 OO 编程范式的抽象层,即使这些层限制了他们对 SQL 的有效使用并导致缓慢的重量级应用程序.

然而,与汇编不同的是,SQL 是一种高级的、独立于平台的语言。此外,汇编语言没有 ANSI/ISO 标准。

于 2009-01-24T21:23:05.797 回答
1

不,不,不是。那些说从未编写过汇编代码的人。

于 2009-01-15T07:44:34.920 回答
1

如果您只进行在线事务处理,则只使用简单的 sql 语句。Hibernate 可以为您生成它们。

但是,如果您想做报告、数据分析或快速批量操作,您必须学习 SQL,并且您通常会使用供应商特定的 SQL 扩展。例如,当您使用供应商特定的 SQL 时,可以查询分层数据。

如果你想正确使用 SQL,你必须在集合中思考,而不是逐行的小语句。因此我说它与汇编程序完全相反。

于 2009-01-15T08:45:20.507 回答
1

让我们比较一下编写并行化 SQL 和编写并行化汇编程序。

这是在 Oracle 中编写并行化 sql 语句的方式:

select /*+ parallel (e, 4)  */ deptno,count(*)
from employees e
group by deptno

现在我希望我能告诉你如何编写并行汇编程序,但我强烈怀疑它是否像添加/ + parallel (e,4) /这样的东西那么容易。

于 2009-01-24T21:33:12.487 回答
0

不要相信这种胡说八道。

于 2009-01-15T07:53:30.410 回答
0

这永远不会发生。SQL 确实是一个 dsl,而汇编器绝对不是。将关系数据库映射到对象模型很有用,但不是 dbs 的唯一目的,即 orms 只是数据库用途的一小部分,因此 sql 将始终是处理 dbs 的首选方言!

于 2009-01-24T21:34:46.103 回答
0

RPG是数据库的汇编语言。:-)

于 2009-01-24T21:38:13.053 回答
-1

不,但是您可能会说 SQL 是数据库的 C。它们既是过程性的又是命令性的,并且是面向数据的而不是面向对象的。和 C 一样,它更容易用高级语言对对象和功能进行建模,但最终 C 是性能测量的基准。

于 2009-01-15T07:47:39.703 回答
-1

在以下意义上,它是:ORM 提供了一个高级的、特定于域的 API,它发出 SQL 语句,就像高级语言创建特定于域的 API 并发出机器语言语句一样。

IE:

  • orm是SQL之上的一层
  • 而 HLL 是组件之上的一层

但是,我并不是要暗示人们将停止使用 SQL 并更喜欢 ORM,就像人们停止使用汇编并更喜欢 HLL 一样。

于 2009-01-24T21:11:31.563 回答