日期:2014-05-17  浏览次数:20466 次

数据库图书ABC
数据库相关的图书(包括各种图书、文档、手册,在此都以图书代称;并且这里只包含纯数据库方面的内容,不涉及前端开发、商业智能等相关内容),大体上可以分为ABC三类:
(每本图书之后的大括号中是我个人给出的一个推荐指数(R)和难度指数(D),分值为1-5;如{R5D3}表示强烈推荐,难度中等,{未知}表示这本书没看过。主观评价,仅供参考。)

A. 基础理论(fundamental theory)
A部分是数据库相关的基础理论,独立于各种DBMS的实现。

A1 基础原理
- 《数据库系统概念(第5版)》{R5D3}:这本书基本涵盖了数据库领域方方面面的问题,必读。
A2 理论深入
- 《离散数学及其应用(第5版)》{R4D3}:离散数学是与数据库理论关系最紧密的数学基础。特别是集合论、数理逻辑、关系几块内容,对于直观地理解数据模型和严谨地编写查询语句非常有用;图论部分对于用数据库实现类似数据模型(如树形结构、网状结构)也是必需的知识。
- 《深度探索关系数据库》{R3D5}:C.J.Date对关系理论的深入剖析,有助于提升对关系模型的理解层次。
A3 相关知识
这里是一些与数据库相关的其它计算机基础,想要深入技术值得去了解。但每块内容都是一个很大的领域,给出的难度指数仅指初步了解的难度;相关经典书目很多,不再开列。
- 数据结构{R3D4}:增加对排序、查找、B+树索引和Hash索引的理解。
- 操作系统{R3D4}:数据库系统是运行于操作系统之上的子系统。用好数据库也需要增加对存储管理、文件系统、权限控制的理解。
- 计算机网络{R3D3}:如今多数的数据库系统都是基于网络的。
- 计算机安全{R3D3}:包括操作系统安全、网络安全和数据库安全,整个系统的安全取决于最弱的一环。
- 编译原理{R3D5}:有助于理解SQL的语法解析过程。

B. 技术实践(technical practice)
B部分是针对某一个DBMS的技术实践。在此以SQL Server为例,其它平台的图书也可以有类似分类。

B1 技术入门(tutorial)
技术入门的书都大同小异,只要内容完整、条理清楚、自己看着顺眼即可。
- 《SQL Server 2005数据库管理与应用高手修炼指南》{R4D2}:这本书讲的是SQL Server的使用和T-SQL的开发,偏重DB Developer的角度。
- 《SQL Server 2005管理员必备指南》{R4D3}:这本书讲的是SQL Server的安装、配置和管理,偏重DBA的角度。这本书的2008版也出了。
- 《SQL Server 2008基础教程》{未知}
- 《SQL必知必会(第3版)》{R4D2}:这本书是SQL语言入门,较为独立于各种DBMS上的SQL方言。
B2 技术参考(reference)
SQL Server联机丛书{R5D?}:这是SQL Server开发者的必备资料。
B3 技术原理(inside principle)
这是成为技术高手的必经之路。还是那句话:深入理解原理,一切表面问题都是浮云。
- 《SQL Server 2005技术内幕》系列4本(前两本{R5D4} 后两本{R5D5}):Inside SQL Server系列是关于SQL Server技术原理的经典图书,不必多说。
- 《SQL Server 2008技术内幕》系列(截至20100818尚未出完){未知}

C. 经验素养(expertness)
C部分是关于数据库程序员的实践经验和综合素养。

C1 技术专题(subjects)
如何设计一个稳定、高效、安全、方便管理、可扩展的数据库系统,需要对数据库基础原理和DBMS实现机制有充分了解,还需要丰富的实战经验。以下几本书与此有关。
- 《数据库设计教程》{R4D3}
- 《SQL Server 2005性能调校》{R5D5}
- 《SQL Server 2005数据库服务器架构设计》{R5D5}
C2 心得技巧(tips)
以下是人们总结的关于数据库设计和SQL使用的一些心得技巧,可作锦上添花之用。
- 《SQL编程风格》{R4D4}
- 《SQL语言艺术》{R4D4}
- 《SQL Cookbook》{R3D4}
- 《SQL Hacks》{R3D4}
- 《SQL解惑(第2版)》{R3D4}
C3 综合经验(art/tao)
以下是关于程序员的经合经验,不限数据库领域。
- 《程序员修炼之道》{R5D?}:英文书名原意为“务实的程序员”,中文翻译成了“道”,但不为过。这是每个程序员都值得一看的书,被评为编程首要原则之一的DRY原则便出自此书,另一个KISS原则出自Unix编程艺术(这两本书相互引用,甚是有趣)。数据库设计的三范式可视为DRY原则的体现,而关系模型胜过层面模型和网状模型之处也在于关系模型在KISS原则上的优势。
- 《编程珠玑(第2版)》{R4D?}
- 《代码大全(第2版)》{R4D?}

以上ABC三部分的划分,本质上是数据库相关知识范围的划分。有些书可能会包含各部分的内容,目前这种排布只是根据其侧重作出的粗略归类。

关于推荐指数(R)和难度指数(D)的说明
推荐指数:R5是强烈推荐,是搞数据库的人的必读书;R4是比较推荐,是值得一看的书;R3是一般介绍,如有机会(毕竟找书和看书都需要成本)可以一看,必定会有收获;R2和R1没有,不值得引见的书就不会在此开列了。然而各人的技术基础和学习目标不同,对书的需求就会不同,众口难调,不再细分。
难度指数:D1没有,学技术总归需要花些精力;D2和D3是入门级,零基础即可看懂;D4是稍难,最好有一定基础再看;D5是很难,要做好思想准备。D?表示难度无法评判,有的内容一看就懂,有的内容需要仔细思考钻研才能明白,有的内容则要有一定的基础和经验才能领悟。

初学者的学习路线图
争论实践与理论敦重敦轻没有意义,就像剑宗气宗之争,只会贻笑大方。只不过,有的人喜欢从具体到抽象,先装个DBMS,建个数据库,把基本的SQL练熟,再深入学习数据库设计相关的理论基础,即先B后A;有的人喜欢从抽象到具体,先把基本概念和原理搞清楚了,再去学具体的DBMS技术,即先A后B(一般来说,前一种类型的人数较多,而后一种类型则是高校计算机教育惯常的方式)。总之,只有A和B两部分的功夫深入了,对C部分才能有更高的领悟。
对于初学者而言,可从A1和B1两类的书入手(先A后B还是先B后A看个人喜好),对数据库和SQL有了基本认识,然后参考B2来建库、建表、写代码,多练则熟。此后,其它各类的书自可根据个人的喜好和需要去翻阅、钻研、体会。

杂谈
大脸师太在《武侠,从牛A到牛C》一书中用内功、招式和实战经验三个维度来评估一个人的武功水平。这三个维度与以上ABC三类有异曲同工之妙。

既然谈到了武侠,不妨再借用独孤前辈的阶段论来品评一下数据库技术水平:
- 熟练使用SQL实现所需功能,是为利剑;
- 能够写出相当花哨相当巧妙相当简炼的写法,是为软剑;(“紫薇软剑,误伤义士不祥……”,过于追求巧技,未尝不是一种歧途)
- 在数据库设计和SQL查询层面充分考虑性能、安全和可维护性,是为重剑;(“重剑无锋,大巧不工