还要不要学习 SQL

  今天又翻起《MySQL5 权威指南》的时候,又看到 MySQL 关于 PHP,Java,Perl,等语言的API,看到书中各种语言直连 MySQL 的各种代码,就又想起来 CakePHP,ADODB,ZendFramework,Hibernate 以及 Active Record 等各种各样的 DAO 层,想起来各种教程里关于直连数据库的各种批判。
  各个 DAO 层的公共目标必然都是对底层的抽象,只是抽象的目标与抽象的程度不一样而已,有的仅仅是为了在更换数据库的时候不用更改程序中的 SQL 代码,有的不但为了能更改数据库,而且更改数据表的时候都不需要更改太多的程序代码,而有的,甚至把这个控制的精细程度精细到了字段,在更改字段的时候都不需要更改太多的程序代码,而更甚把数据库这层面都给抽象开,让你不字段你实际在底层操作的究竟是一个数据库,还是一个 XML,还是一个远程资源。
  我曾经听到过别的老师说过这样一个事情:DBA 常常抱怨程序员不懂 SQL,却能使用 Spring 等开发框架开发出来基于数据库的应用,而这些应用的 SQL 必然是未经过优化的,DBA 为了这些 SQL 肯定头大的很。
  我刚开始听到这个故事的时候,我也觉得程序员不懂得 SQL 却去写基于数据库的应用是一个很不好的现象,那简直是一个很不可思议的事情,不过现在想想,其实这也是很正常的,可能程序员在编写代码的时候,根本不知道底层用的是什么数据库,是 MySQL,SQLServer 还是 oracle?各个 DBMS 的方言都不一样,假如程序员都在代码里实现,那从 MySQL 迁移到 oracle 的时候,就需要改很多很多的代码了。这也是那些教材里写的为啥不直连数据库的原因了。既然 DBMS 方言都不一样,我们又需要做很多迁移数据库的工作,上层的 DAO 框架自然而然就需要开发出一套自己的语法,例如 Hibernate 的 HQL,那程序员在了解了 DAO 的框架之后,基本上只需要学习 DAO 层的语法就可以了,而不需要学习太具体的 SQL 语法。
  听起来是不是很没有道理?但是我们退一步来说,每个人是否都必须懂得汇编语言才编写的出让计算机工作的代码?显然不是,我们有很多高级语言,例如 C 语言等,我们不也站在比直接面对计算机硬件更高的程度来编程么?我们可以使用标准 C 来编写出不用管是 PowerPC 的应用还是 Intel 的 PC。
  甚至我们不去用 C,我们去使用 JavaScript 来编写浏览器端的代码,我们都不知道用户的计算机究竟是 IE,还是 Firefox,操作系统是 Windows 还是 Linux ?
  我们甚至直接使用 Rails,Dojo 等 Framework 写出自动跨浏览器兼容的,跨平台的很 Cool 的浏览器应用的 js 代码。
  我们在这个时候关心汇编怎么写了么?我们关心 C 怎么写了么?我们关心 JavaScript 怎么写了么?诚然,可能学会汇编有助于你写出更有效率的 C 语言代码,但是在越来越多的语言可以选择,越来越高级的语言实现来看,自己每层都去学会,那是一件很奢侈的事情。
  自我第一次听说三层架构,到现在分的越来越细的 N 层架构,大家都是为了更好的抽象,都是为了不同层面上,不同分工的程序员做好他自己那层的事情,而不用去关心他上,下几层的事,以达到更好的开发效率。
  在这个工业化的软件开发时代,你不用去关心 SQL 是怎么写的,不用去关心你操作的究竟是一个数据库,还是一个远程资源,用 Java 的接口来说,只要这个资源能实现这样一个接口,你去操作就可以了。就好象你在流水线上的一套工作,你的任务就是拧螺丝,你就把你面前经过的设备的螺丝拧上就行了,你也不用去管你拧的究竟是一个电视机还是一个收音机,甚至是一个笔记本电脑,你只需要拿着十字螺丝刀使劲拧吧。

你可能感兴趣的:(DAO,oracle,sql,mysql,cakephp)