SQL是数据库的程序集吗?

SQL是数据库的程序集吗?,sql,assembly,Sql,Assembly,谈到hibernate和其他ORMs,ORMs的鼓吹者们谈论SQL,就像数据库的汇编语言一样 我想很快就会有人断言这一点,但我想在不久的将来可能是真的,不确定 更新:我所指的类比意味着SQL是汇编语言,就像ORM是C/Java/C#一样。当然,精确的类比是不可能的。问题是,在未来,随着功能更强大的计算机的出现,开发人员是否将只使用ORM(或类似ORM的)而不是SQL。不,不,不是。那些说从来没有编写过汇编的人。没有,但是你可以说SQL是数据库的C语言。它们既是过程性的,也是命令性的,并且是面向数

谈到hibernate和其他ORMs,ORMs的鼓吹者们谈论SQL,就像数据库的汇编语言一样

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


更新:我所指的类比意味着SQL是汇编语言,就像ORM是C/Java/C#一样。当然,精确的类比是不可能的。问题是,在未来,随着功能更强大的计算机的出现,开发人员是否将只使用ORM(或类似ORM的)而不是SQL。

不,不,不是。那些说从来没有编写过汇编的人。

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

绝对不是

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

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


您会注意到.NET framework最近引入了LINQ,这是一种将类似SQL的高级构造引入C#和VB等语言的方法。与汇编语言不同,我们很容易认为SQL比大多数主流编程语言具有更高的抽象级别。

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

不要相信这种废话。

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


SQL是“C代码”,可读性强,与“硬件”非常接近,只要你知道自己在做什么,就能够超越所有其他高级语言:-)。

多年来,我听过很多关于关系语言和OO之间阻抗不匹配的b*s

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


OO不是唯一的水果人。

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

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


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

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

即:

  • Orm是SQL之上的一层
  • HLL是组件上方的一层

然而,我并不是说人们会停止使用SQL而更喜欢ORM,就像人们停止使用汇编而更喜欢HLL一样。

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

  • 直接使用SQL编码可以让您以非常紧凑的方式编写非常高效的代码
  • 有效地使用SQL是被专业软件开发人员和大学课程忽视的技能
  • 因为SQL非常紧凑,所以重构SQL往往会让人厌烦,而且成本高昂
  • 软件开发人员中有一大群“金字塔的底层”,他们对SQL深恶痛绝,喜欢使用模仿他们首选的OO编程范式的抽象层,尽管这些抽象层限制了他们对SQL的有效使用,并导致了缓慢而沉重的应用程序

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

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

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

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

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

这永远不会发生。SQL实际上是一种dsl,而汇编程序显然不是。将关系数据库映射到对象模型很有用,但这并不是dbs的唯一目的,也就是说,ORM只是数据库的一小部分,因此sql始终是处理dbs的首选语言

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

程序性和强制性?如果你写对了就不会。编写良好的SQL应该是声明性的,并且是基于集合的。但我会给你一个。ORM是一把大锤,SQL是一把普通的锤子。大多数时候……你所需要的只是一把锤子,有时甚至可以用它来拔钉子。我已经编写了汇编代码,并且一直在考虑将SQL作为db汇编语言。为什么?因为它是DB的本地语言,+1 SQL在语义上接近关系代数——RDBMS技术背后的理论模型。它是专门为手头的任务设计的,是广泛使用的领域特定语言的一个极好的例子。除了人们不这样使用它之外,他们使用它来编写过程性的if/then逻辑,这不是SQL的目的,ORM是一种将一种习惯用法映射到另一种状态相对平等的习惯用法的方法。但是,从程序员的角度来看,这并不能使SQL屈从