对于开发数据库软件,我有一套很简单的哲学,这是我多年以来一直信守的准则。口如果可能,尽量利用一条SQL语句完成工作。无论你是否相信,这几乎总是行之有效的方法。口如果无法用一条SQL语句完成,就通过PL/SQL实现。(不过,尽可能少用PL/SQL)要知道,代码越多,bug越多l代码越少,bug越少。
口如果在PL/SQL中也无法做到,可以试试使用Java存储过程来实现。不过,有了OracleDatabase9f及以上版本后,如今需要这样做的可能性极小。
口如果用Java还办不到,那就在c外部例程中实现。如果速度要求很高,或者要使用采用c编写的第三方API,就常常使用这种做法。
口如果在c外部例程中还无法实现,就该好好想想有没有必要做这个工作了。
在这本书中,你会看到我是怎样将上述思想付诸实践的。我会使用PL/sQL和PL/sQL中的对象类型来完成SQIL本身办不到的事情。PL/SQL发展至今已经有很长时间了,它经历了长达二十多年的调整和优化。实际上,OracleDatabase10g编译器本身就首次重写为一个优化编译器。你会发现,没有哪种语言能像PL/SQL这样与sQL如此紧密地耦合,也没有哪种语言得到如此优化,可以与SQL更好地交互。在PL/sQL中使用sQL是一件相当自然的事情,而在几乎所有其他语言(从VisualBasic到Java)中,使用SQL都很麻烦。对于这些语言来说,使用SQL绝对没有“自然”的感觉,它不是这些语言本身的扩展。如果PL/SQL还无法做到(这在当前数据库版本中相当少见),我们会使用Java。有时,如果c是唯一的选择,或者需要C才能提供的高速度,我们也会用c来完成工作。随着本地Java编译(nativeJavacompilation)的闪亮登场(可以把Java.字节码转换为具体平台上特定于操作系统的对象码),你会发现,在许多情况下,Java.与C的运行速度相差无几。所以,需要用到c的情况越来越少。
1.2 黑盒方法
根据我个人的第一手经验(这表示,在学习软件开发时我自己也曾犯过错误),我对基于数据库的软件开发为什么如此频繁地遭遇失败有一些看法。先来澄清一下,这里提到的这些项目可能一般不算失败,但是启用和部署所需的时间比原计划多出许多,原因是需要大幅重写,重新建立体系结构,或者需要充分调优。我个人把这些延迟的项目称为“失败”,因为它们原本可以按时完成(甚至可以更快完成)。
……
展开