——扬帆启航)
一直在从事数据库开发和设计工作也看了一些书籍算是略有心得。很久之前就想针对关系数据库设计进行整理、总结但因为种种原因迟迟没有动手主要还是惰性使然。今天也算是痛下决心开始这项卓绝又令我兴奋的工作。这将是一个系列的文章我将以讲座式的口吻展开讨论个人偷懒这里的总结直接拿去公司培训新人用。系列的第一讲我们先来回答下面几个问题数据库是大楼的根基大多数程序员都很急切在了解基本需求之后希望很快的进入到编码阶段可能只有产出代码才能反映工作量对于数据库设计思考得比较少。这给系统留下了许多隐患。许多软件系统的问题如输出错误的数据性能差或后期维护繁杂等都与前期数据库设计有着密切的关系。到了这个时候再想修改数据库设计或进行优化等同于推翻重来。我经常把软件开发比作汽车制造。汽车制造会经过图纸设计模型制作样车制造小批量试生产最后是批量生产等步骤。整个过程环环相扣后一过程是建立在前一过程正确的前提基础之上的。如果在图纸设计阶段发现了一个纰漏我们可以重新进行图纸设计如果到了样车制造阶段发现这个错误那么我们就要把从图纸设计到样车制造的阶段重来越到后面发现设计上的问题所付出的代价越大修改的难度也越大。数据库是整个应用的根基没有坚实的根基整个应用也就岌岌可危了。强大的数据库面对不良设计也无能为力现代数据库管理系统DBMS提供了方便的图形化界面工具通过这些工具可以很方便的创建表、定义列但我们设计出的结构好吗关系数据库有许多非常好的特性但设计不当会使这些特性部分或完全的丧失。我们来看看以下几个数据库不良设计造成的场景1. 数据一致性的丧失一个订单管理系统维护着客户和客户下的订单信息。使用该系统的用户在接到客户修改收货地址的电话后在系统的客户信息页面把该客户的收货地址进行了修改但原先该客户的订单还是送错了地址。2. 数据完整性的丧失公司战略转移准备撤出某地区。系统操作人员顺手把该地区的配置信息在系统中进行删除系统提示删除成功。随后问题就来了客服人员发现该地区的历史订单页面一打开就出错。3. 性能的丧失一个库存管理系统仓库管理员使用该系统记录每一笔进出货情况并能查看当前各货物的库存情况。在系统运行几个月后仓库管理员发现打开当前库存页面变得非常慢而且整个趋势是越来越慢。上面这些场景都是由于数据库设计不当造成的根源包括设计时引入了冗余字段没有设计合理的约束对性能没有进行充足设计等上面的例子也只是沧海一粟。数据库平台无关性我在这个系列博客里讨论的数据库设计不针对任何一个关系数据库产品。无论你使用的是OracleSQL ServerSybase亦或是开源数据库如MySQLSQLite等都可以用来实践我们这里讨论的设计方法和设计理念设计是这个系列博文的核心和灵魂。注在文中我会选用一个数据库产品来进行演示大家可以选用自己熟悉的数据库产品来实验。本文最后会给出一些免费数据库产品的链接大家可以下载学习。一起学习共同进步无论你是数据库设计师应用架构师软件工程师数据库管理员DBA软件项目经理软件测试工程师等项目组成员都能从该系列博文中有所收获。大家一起讨论共同进步。内容涉及领域我对这一系列博文现在的设想是涉及数据库设计的整个过程。从需求分析开始到数据库建模概念数据建模进行范式化直至转化为SQL语句。在我们一头扎进数据库设计之前我们先了解一下除了关系型数据库之外的数据存储方式。平面文件Flat File包括以.txt和.ini结尾的文件。eg: 一个.ini文件的内容------------------------------------------------------------[WebSites]MyBloghttp://www.cnblogs.com/DBFocus[Directorys]ImageE:\DBFocus Project\ImgTextE:\DBFocus Project\DocumentsDataE:\DBFocus Project\DB------------------------------------------------------------优点文件的存储形式非常简单普通的编辑器都能对其进行打开、修改缺点无法支持复杂的查询没有任何验证功能对平面文件中间的内容进行插入、删除操作其实是重新生成了一个新文件适用场景存放小量修改不频繁的数据如应用配置信息Windows注册表错误的修改Windows注册表会引起系统的紊乱故不建议把很多数据存放在注册表中。Windows注册表为树形结构存放着一些系统配置信息和应用配置信息。通过把不同的配置存放在注册表的不同分支上使得应用程序公共配置信息与用户个人配置信息分离。eg某文档版本管理系统能通过配置与本主机上安装的文件比较器建立关联进行文档比较。这是一个公共配置信息文件比较器路径可以存放在注册表的HKEY_LOCAL_MACHINE\SOFTWARE分支下。同时该文档版本管理系统能记录用户最近打开的10个文档路径。这是用户个人配置信息对于不同的Windows用户最近打开的10个文档可以不同这些配置信息可存放在注册表的HKEY_CURRENT_USER\Software分支下。Excel表单Spreadsheets优点Excel 非常普及用户对于Spreadsheet的表现形式非常熟悉可以进行简单统计方便出各种图表缺点不适用于许多Spreadsheet之间关系复杂的情况无法应对复杂查询数据验证功能弱适用场景数据量不是非常大的办公自动化环境XMLXML是一种半结构化的数据。相比于超文本标记语言HTML其标签是可以自行定义的即可扩展的。eg一个XML文件内容-----------------------------------------------------?xml version”1.0” encoding”UTF-8” ?ClassScheduleClass Name“Psychology” Room”Field 3”InstructorRichard Storm/InstructorStudentsStudentFirstNameBen/FirstNameLastNameBreaker/LastName/StudentStudentFirstNameCarol/FirstNameLastNameEnflame/LastNameNickNameCandy/NickName/Student/Students/Class/ClassSchedule-----------------------------------------------------XML文件有几个特点。首先XML标签要求严格对应且不能出现交错的现象。