English 中文(简体)
SQL是数据库的汇编语言吗?
原标题:
  • 时间:2009-01-15 07:41:26
  •  标签:

谈到 Hibernate 和其他 ORM 类型,ORM 宣传者们喜欢把 SQL 比作数据库的汇编语言。

我认为现在断言这一点还为时过早,但我猜在不久的将来可能会成真,不确定。

更新:我所说的类比是指 SQLAssembly,就像 ORMC/Java/C# 一样。当然,无法进行完全的类比。问题是,未来是否会随着更强大的计算机,开发人员只使用ORM(或类似ORM)而不是 SQL

最佳回答

绝对不是。

汇编语言是一种非常低层次的语言,您可以告诉处理器要做什么,包括您想使用哪些寄存器等。

SQL是一种非常高级的语言,您描述您想要的语义,然后查询优化器决定如何执行它,因此您甚至不控制执行什么。它是一种非常强大和灵活的语言,任何ORM最多只提供其子集。

你会注意到,.NET框架最近引入了LINQ,这是一种将高级SQL类似结构引入到C#和VB等语言中的方式。与汇编语言不同,很容易争论认为SQL在抽象级别上比大多数主流编程语言更高。

问题回答

我听过很多年关于关系型和面向对象之间阻抗不匹配的废话。

我的答案一直是:确实存在非常大的阻抗不匹配——天真固执的“一切都是对象,只有对象”与精细灵活的“数据描述现实世界的事物;这些数据可以以尚未知的不同方式组合,产生可以数学证明的结果。”

OO不是唯一的水果。

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

SQL是“C代码”,易于阅读且足够接近“硬件”,可以在您知道自己在做什么的情况下胜过所有其他高级编程语言:-)。

不,SQL本身是一个高级抽象层,它(大多数情况下)与数据库无关。

SQL 具有一些与汇编语言相似的特点:

  • Coding in SQL directly gives you the opportunity to write very efficient code in a very compact way.
  • Using SQL effectively is a neglected skill by both professional software developers and by college curricula.
  • Because SQL is very compact, refactoring SQL tends to be wearisome and costly.
  • There s a large "base of the pyramid" of software developers who hate SQL with a passion and prefer to use layers of abstraction that mimic their preferred OO programming paradigm, even though these layers limit their effective use of SQL and result in slow, heavyweight applications.

然而,与汇编语言不同,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并发出机器语言指令一样。

即:

  • Orm is is a layer above SQL
  • And HLL is a layer above assembly

然而,我并不是要暗示人们会停止使用SQL并更喜欢ORM,就像人们停止使用汇编语言并更倾向于高级语言一样。





相关问题
热门标签