5

在发现HandlerSocket并弄乱了许多 ORM 之后,困扰我的一件事是:

为什么 SQL 存在?有吗?

为什么数据库驱动程序不能直接提供例如 InnoDB 的方式,并将各种操作封装在 ORM 库本身中?

为什么 ORM -> SQL -> DB parse SQL -> Db 引擎操作?

为什么不能 ORM -> Db 引擎操作?

4

4 回答 4

1

SQL 的目的Structured Query Language是提供一种Structured使用Query标准在数据库中获取信息的方法Language

SQL 提供了global使用数据库的标准,在不同平台上几乎没有差异。例如,如果您熟悉 SQL,您可以使用主要的 DB,例如SQL Server mySql语法Oracle 上存在一些细微差别,但至少就基本操作而言,它们并不是很突出

于 2012-11-29T10:23:35.870 回答
1

好吧,在任何类型的 ORM 存在之前,SQL 是第一个。一个简短的历史

  • 首先,您将数据存储在顺序文件中
  • 后来你使用了直接文件(clients.dat)
  • 后来出现了第一个非关系数据库(检查这个

然后有人想到了带有查询语言的关系数据库。幸运的是,我们有一个标准叫做 SQL(即使在 sql server、oracle 等中不同的 SQL 方言之间存在一些小的差异)

很久之后(SQL 已经很老了),有人发明了使用 sql 与 dbs 通信的 ORM。

也有一些努力让 ORM->DB 像 no-sql dbs、面向对象的 dbs (OODBMS) 和文档

于 2012-11-29T10:20:04.097 回答
0

使用 ORM 时,您只需将 SQL 替换为其他内容,例如 Hibernate 的 HQL。

SQL 在后台为您做了很多工作,您需要手动实现。SQL 的设计目的是让您声明查询的结果应该是什么。然后让数据库弄清楚如何去做。

想一想:

找我所有在 2011 年被录用的员工,他们的工资比他们所在部门的平均工资高 20%。

在 SQL 中执行此操作并不复杂。

select name, 
       salary,
       deptno,
       hire_date
from (
   select name, 
          salary, 
          deptno,
          avg(salary) over (partition by deptno) as avg_detp_salary,
          hire_date
   from employee
   where extract(year from hire_date) = 2011    
) as t
where salary >= avg_dept_salary * 1.20;

现在想想如果你没有查询语言(既没有 SQL 也没有 ORM 查询语言)你会怎么做

于 2012-11-29T11:12:25.167 回答
-1

它的存在是因为很多人使用它。有许多与 SQL 兼容的非常好的工具。ODBC、JDBC。

我认为 SQL 非常古老,但没有什么比这更好的了,它几乎可以与任何数据库引擎一起使用,并允许您使用 SQL 的功能来操作数据。

有一些现代工具可以处理数据,更适合今天的需求——ORM、Linq、OLAP,但它们有不同的用途,它们不兼容。

还有一件事——你弄乱了许多 ORM。那就是问题所在。ORM的很多,互不兼容,大家互相学习。SQL 是一种语言(不同数据库引擎中的一些小差异。

于 2012-11-29T10:39:28.443 回答