数据库开发者常犯的十大错误

尽管软件发展中的热点技术层出不穷,不断地变化,有一些东西却一直不曾改变,其中之一就是开发人员对数据库的使用和设计开发。 所以,在你选择数据库前,你须要对于你的数据进行一次客观真实的分析,从而选择适合你的开发工做和实际需求的数据库产品。

    尽管软件发展中的热点技术层出不穷,不断地变化,有一些东西却一直不曾改变,其中之一就是开发人员对数据库的使用和设计开发。

  你可能会兴奋地紧跟时尚建立一个AJAX Web界面,或者使用最近迷人的Windows用户界面,可是透过这些各类各样的外观界面,你可能依然须要从后台数据库中提取或存取所须要的数据——这一点就如同十多年之前人们对数据库的操做是同样的。

  然而,使人吃惊的是,如今还有不少开发者依然在不断地重复着不少年之前就存在的数据库使用和开发上的错误。或许是有太多的开发者只是来学习如何使用一个数据库,而不是真正的去研究它。如下是笔者做为一个开发者,我的在平时的开发工做中所精选出的数据库开发者常犯的十大错误,以飨读者和同行。

  一、选择了错误的数据库

  不是全部的数据库均可以用来完成你的任务,这意味着当你在使用数据库来作任何开发工做和其余事情前,你必须选择合适的数据库。例如,咱们常常看到一些Access数据库没有能力处理的大容量数据集,对于SQL Server来讲却像玩小孩子的游戏同样轻松地完成处理。可是,对于只须要处理几百行数据的需求,有的人却花钱来购买SQL Server。这些都是错误的作法。

  普遍地来讲,在当今市场中的数据库能够分为三个层次:桌面和嵌入数据库——适合于处理小型任务;一些大型数据库产品的“Express”版也是不错的,能够处理数G条数据;而真正的企业级数据库,像SQL Server、Oracle和DB2的数据处理能力是很是惊人的,你能够绝不犹豫地把数据抛给它们。

  所以,在你选择数据库前,你须要对于你的数据进行一次客观真实的分析,从而选择适合你的开发工做和实际需求的数据库产品。

  二、选择了太多的数据库

  诸如ODBC、JDBC和OLEDB等应用程序编程接口的出现,大大促进和提高了数据库独立性,也就是说,开发人员能够这样来编写你的应用程序:你可让你的应用程序支持使用任何数据库来进行数据存储。

  然而,这种状况是要付出一些代价的,我曾经看到有的开发团队为了追求应用程序的数据库“无关性”,专门编写了应用程序将全部的SQL语句转换成一些底层的语言,以便让全部的数据库都能理解并执行,可是,这样作的同时也丧失了现有数据库的一些高级功能。

  那么为何这么作呢?多是出于这样的考虑:某些客户在未来的使用中可能想切换到Oracle或DB2或FoxPro,或其余的什么数据库,采用上面的这种作法或许是如今先准备好了,“未雨绸缪”。

  对于此,另外一种相反的作法是:当你开始开发一个新产品的时候,选择一个存储引擎并开始在此基础上编写你的应用程序。若是你的产品足够好,人们会安装你指定的数据库,所以你不用浪费时间和精力来支持一种“假想”的用户需求。

  三、了解你的数据

  在咱们使用数据库的过程当中会碰到不少须要考虑的问题,例若有些客户编号可能并非咱们一般认为的七位,而是六位;而有一些公司和企业出于保护我的隐私的考虑,可能不必定非要求员工输入他们的×××号码或者银行账号,所以这中数据类型在数据库搭建和开发中必须设置成能够为空(NULL)。

  也就是说,数据库开发和设计不能脱离实际状况进行,不能远离实际业务规则。对数据库开发者来讲,必需要彻底了解用户真正输入数据的需求是什么,并根据这些数据来合理地设计数据字段的大小、类型以及什么规则,等等。不然,等待你的将是一次又一次地返回头来进行修改工做。所以,你要学会在开始的时候就对你须要处理的数据具备很是全面、深刻的了解,要尽可能考虑到各类意外的状况。

  四、数据库不像Excel同样人人会用

  如今有一种认识上的误区,尤为是在一些小单位的管理者眼中,他们总认为任何开发者都知道如何去合理地搭建一个数据库。

  很明显,这种误解让我很困惑。既然你不会假定任何开发者都知道如何用C#编程或建立一个Web服务,那么为何要假定每一个开发者都是数据库专家呢?

  这种假设所带来的最后结果是,太多的数据库被一些甚至历来没有据说过术语规范化(term normalization)的人所设计。不少数据库的功能根本没有被合理地运用,若是你是这样一个开发者的话,那么在你设计数据库以前,你须要增强这方面的培训和学习了。高效的数据库设计是你必须了解和掌握的技巧,而不要奢望能够经过失败的教训来了解到这一点。

  五、第三范式并非至高无上

  另外一方面,开发人员对数据库的只知其一;不知其二多是一件比较危险的事情。我看到过不少数据库被设计得过于死板,这些数据库的设计者坚持把全部东西都放在查询表中。

  是的,数据库开发者须要知道规范化的规则,可是你也须要知道何时要中止去用规范化,何时逆规范化反而可能会带来更好的效果。

    六、隐藏应用逻辑的“黑匣子”

    存储过程和触发器是两个很是伟大的功能。当你有多个客户访问一个数据库的时候,它们能够帮助你确保对数据的一致性处理。

    不过,它们也可能会变成一个隐藏应用逻辑的“黑匣子”,让Web和瘦客户端开发者没法查看和调试这些逻辑。在大多数状况下,数据库代码不能像其余应用程序代码同样被进行代码测试和代码调试。

    所以,当你要将代码放到数据库中的时候,花点时间来问一下本身:这些代码是否真的适合放在数据库中?

    七、备份!备份!备份!

    你的数据库须要备份吗?固然须要!

    咱们为何要把数据存在数据库中的缘由之一就是想长久地保存它们。然而,我却常常碰到这样的状况,有的开发人员却由于这样或那样的缘由——例如硬件故障、***或数据库错误——由于没有备份而致使珍贵的数据永远丢失。所以在你开始开发以前,就应该制定一个数据备份计划,包括备份的频率、备份的类型,以及离线备份的频率等等,而不该该在数据丢失后才想起备份的重要。

    我不但愿“亡羊补牢”的故事发生在各位数据库程序员的身上。

    八、你须要版本控制

    说到备份,你须要担忧的不只仅是数据的变化,还有数据库的修改。你须要跟踪并记录下这些数据库版本的变化,以便在任何须要的时候从新建立这个数据库。若是你想真正专业化的开发软件,你须要在你的数据库设计中增长版本控制。

    举个例子来讲,若是你想调试某个软件版本中的客户漏洞,可是你没法恢复到该软件版本所对应的数据库版本的话,调试可能不会正常进行。所以数据库开发者必需要作好版本控制,不然可能所以带来不少之后的麻烦。

    九、使用数据库自带的工具

    现代数据库中已经不只仅是一些让你存放数据的工具。它们还具备不少潜在的工具来使得管理数据库更容易。

    举个例子来讲,SQL Server中有工具能够检测SQL语句中潜在的***,甚至包括了一个向导,来告诉你该使用什么样的索引才能使你的查询上更高效,甚至能够模拟在真实服务器上的实际负载。

    经过这些工具,咱们的确在有的时候加速了数据库运行的速度,下降了CPU的利用率,可是实际状况是,不少人只有在一些专家顾问告诉他们后才知道在数据库中存在这样的工具。若是你不知道在你的数据库中存在什么样的工具,以及这些工具能帮你作什么,那么你花的钱就没有获得应有的回报。

    十、不要由于你有一个锤子就认为何都是钉子

    如今有一种潮流,一些开发人员把应用程序用到的全部数据都存储在数据库中。我曾经看到有的应用程序试图建立一个彻底数据元驱动(metadata-driven)的用户界面,它把元数据和用户偏好的数据都存放在相同的数据库中。显然这会让开发人员的生活变得复杂和下降性能。

    某些数据可能的确适合存放在本地文件中,而不是存放在网络的客户—服务器数据库中。当你存储数据的时候,你须要分析一下你的数据适合存放在什么地方,是数据库?注册表?文本文件?仍是XML文件?而后为其选择最适合的存储类型。“不要由于你有一个锤子就认为何都是钉子”,不要由于有一个数据库,就把全部东西都扔到数据库中——如今还存在一种对XML文件的过分滥用,也是一样的状况。

     [文章来源:“十万个为何”电脑学习网]
相关文章
相关标签/搜索