SQL反模式:避开数据库编程的陷阱
1. 引言
刚从加州大学计算机与信息科学专业毕业不久,我就拒绝了第一份与SQL相关的工作。当时,一位在学校工作且通过校园活动认识我的经理找到我。他有一家软件创业公司,正在开发一个可在各种UNIX平台间移植的数据库管理系统,使用的是shell脚本和awk等工具(那时,像Ruby、Python、PHP甚至Perl这样的现代动态语言还不流行)。他需要一名程序员来编写代码,以识别并执行有限版本的SQL语言,而且他表示只需要支持一个SQL语句:SELECT。
我在学校没学过SQL,那时数据库不像现在这么普及,像MySQL和PostgreSQL这样的开源数据库也不存在。但我用shell开发过完整的应用程序,也了解一些解析器方面的知识,因为在编译器设计和计算语言学等课程中做过相关项目。所以,我考虑过接受这份工作,心想解析像SQL这样的专用语言的单个语句能有多难呢?
我找了一份SQL参考资料,立刻发现它与支持if、while语句、变量赋值和表达式以及函数的语言不同。把SELECT仅仅看作SQL语言中的一个语句,就像把发动机仅仅看作汽车的一个部件一样。这两句话从字面上看是对的,但它们掩盖了其主题的复杂性和深度。为了支持执行这一个SQL语句,我意识到我必须开发出一个功能齐全的关系数据库管理系统和查询引擎的所有代码。于是,我拒绝了这个用shell脚本编写SQL解析器和RDBMS引擎的机会,那位经理可能因为不了解RDBMS的工作原理,而低估了项目的范围。
对于软件开发人员来说,即使是有计算机科学学位的人,早期接触SQL的经历也很常见。大多数人是自学SQL的,当他们发现自己在项目中需要使用SQL时,才出于自卫去学习它,而不是像学习大多数编程语言那样专
超级会员免费看
订阅专栏 解锁全文
374

被折叠的 条评论
为什么被折叠?



