快捷搜索:

数据库开发者常犯的十大错误,你有吗?

只管软件成长中的热点技巧层出不穷,赓续地变更,有一些器械却不停不曾改变,此中之一便是开拓职员对数据库的应用和设计开拓。

你可能会愉快地紧跟时尚创建一个AJAX Web界面,或者应用近来迷人的Windows用户界面,然则透过这些各类各样的外不雅界面,你可能依然必要从后台数据库中提取或存取所必要的数据——这一点就犹如十多年以昔人们对数据库的操作是一样的。

然而,令人吃惊的是,现在还有很多开拓者依然在赓续地重复着很多年曩昔就存在的数据库应用和开拓上的差错。或许是有太多的开拓者只是来进修若何应用一个数据库,而不是真正的去钻研它。以下是笔者作为一个开拓者,小我在日常平凡的开拓事情中所精选出的数据库开拓者常犯的十大年夜差错,以飨读者和同业。

1、选择了差错的数据库

不是所有的数据库都可以用来完成你的义务,这意味着当你在应用数据库来做任何开拓事情和其他工作前,你必须选择相宜的数据库。例如,我们常常看到一些Access数据库没有能力处置惩罚的大年夜容量数据集,对付SQL Server来说却像玩小孩子的游戏一样轻松地完成处置惩罚。然则,对付只必要处置惩罚几百行数据的需求,有的人却费钱来购买SQL Server。这些都是差错的做法。

广泛地来说,在当今市场中的数据库可以分为三个层次:桌面和嵌入数据库——得当于处置惩罚小型义务;一些大年夜型数据库产品的“Express”版也是不错的,可以处置惩罚数G条数据;而真正的企业级数据库,像SQL Server、Oracle和DB2的数据处置惩罚能力是异常惊人的,你可以绝不踌躇地把数据抛给它们。

是以,在你选择数据库前,你必要对付你的数据进行一次客不雅真实的阐发,从而选择得当你的开拓事情和实际需求的数据库产品。

2、选择了太多的数据库

诸如ODBC、JDBC和OLEDB等利用法度榜样编程接口的呈现,大年夜大年夜匆匆进和提升了数据库自力性,也便是说,开拓职员可以这样来编写你的利用法度榜样:你可以让你的利用法度榜样支持应用任何数据库来进行数据存储。

然而,这种环境是要付出一些价值的,我曾经看到有的开拓团队为了追求利用法度榜样的数据库“无关性”,专门编写了利用法度榜样将所有的SQL语句转换成一些底层的说话,以便让所有的数据库都能理解并履行,然则,这样做的同时也丢掉了现稀有据库的一些高档功能。

那么为什么这么做呢?可能是出于这样的斟酌:某些客户在将来的应用中可能想切换到Oracle或DB2或FoxPro,或其他的什么数据库,采纳上面的这种做法或许是现在先筹备好了,“未雨缱绻”。

对付此,另一种相反的做法是:当你开始开拓一个新产品的时刻,选择一个存储引擎并开始在此根基上编写你的利用法度榜样。假如你的产品足够好,人们会安装你指定的数据库,是以你不用挥霍光阴和精力来支持一种“假想”的用户需求。

3、懂得你的数据

在我们应用数据库的历程中会碰着很多必要斟酌的问题,例如有些客户编号可能并不是我们平日觉得的七位,而是六位;而有一些公司和企业出于保护小我隐私的斟酌,可能不必然非要求员工输入他们的身份证号码或者银行帐号,是以这中数据类型在数据库搭建和开拓中必须设置成可以为空(NULL)。

也便是说,数据库开拓和设计不能离开实际环境进行,不能阔别实际营业规则。对数据库开拓者来说,必须要完全懂得用户真正输入数据的需求是什么,并根据这些数据来合理地设计数据字段的大年夜小、类型以及什么规则,等等。否则,等待你的将是一次又一次地返转头来进行改动事情。是以,你要学会在开始的时刻就对你必要处置惩罚的数据具有异常周全、深入的懂得,要只管即便斟酌到各类意外的环境。

4、数据库不像Excel一样各人会用

现在有一种熟识上的误区,尤其是在一些小单位的治理者眼中,他们总觉得任何开拓者都知道若何去合理地搭建一个数据库。

很显着,这种误解让我很利诱。既然你不会假定任何开拓者都知道若何用C#编程或创建一个Web办事,那么为什么要假定每个开拓者都是数据库专家呢?

这种假设所带来的着末结果是,太多的数据库被一些以致从来没有据说过术语规范化(term normalization)的人所设计。很多半据库的功能根本没有被合理地运用,假如你是这样一个开拓者的话,那么在你设计数据库之前,你必要加强这方面的培训和进修了。高效的数据库设计是你必须懂得和掌握的技术,而不要奢望可以经由过程掉败的教训来懂得到这一点。

5、第三范式并不是登峰造极

另一方面,开拓职员对数据库的一孔之见可能是一件对照危险的工作。我看到过很多半据库被设计得过于古板,这些数据库的设计者坚持把所有器械都放在查询表中。

是的,数据库开拓者必要知道规范化的规则,然则你也必要知道什么时刻要竣事去用规范化,什么时刻逆规范化反而可能会带来更好的效果。

6、暗藏利用逻辑的“黑匣子”

存储历程和触发器是两个异常巨大年夜的功能。当你有多个客户造访一个数据库的时刻,它们可以赞助你确保对数据的同等性处置惩罚。

不过,它们也可能会变成一个暗藏利用逻辑的“黑匣子”,让Web和瘦客户端开拓者无法查看和调试这些逻辑。在大年夜多半环境下,数据库代码不能像其他利用法度榜样代码一样被进行代码测试和代码调试。

是以,当你要将代码放到数据库中的时刻,花点光阴来问一下自己:这些代码是否真的得当放在数据库中?

7、备份!备份!备份!

你的数据库必要备份吗?当然必要!

我们为什么要把数据存在数据库中的缘故原由之一便是想长久地保存它们。然而,我却常常碰着这样的环境,有的开拓职员却由于这样或那样的缘故原由——例如硬件故障、黑客或数据库差错——由于没有备份而导致贵重的数据永世损掉。是以在你开始开拓之前,就应该拟订一个数据备份计划,包括备份的频率、备份的类型,以及离线备份的频率等等,而不应该在数据损掉后才想起备份的紧张。

我不盼望“亡羊补牢”的故事发生在各位数据库法度榜样员的身上。

8、你必要版本节制

说到备份,你必要担心的不仅仅是数据的变更,还稀有据库的改动。你必要跟踪并记录下这些数据库版本的变更,以便在任何必要的时刻从新创建这个数据库。假如你想真正专业化的开拓软件,你必要在你的数据库设计中增添版本节制。

举个例子来说,假如你想调试某个软件版本中的客户破绽,然则你无法规复到该软件版本所对应的数据库版本的话,调试可能不会正常进行。是以数据库开拓者必须要做好版本节制,否则可能是以带来很多今后的麻烦。

9、应用数据库自带的对象

今世数据库中已经不仅仅是一些让你寄放数据的对象。它们还具有很多潜在的对象来使得治理数据库更轻易。

举个例子来说,SQL Server中有对象可以检测SQL语句中潜在的进击,以致包括了一个领导,来奉告你该应用什么样的索引才能使你的查询上更高效,以致可以模拟在真实办事器上的实际负载。

经由过程这些对象,我们切实其其实有的时刻加速了数据库运行的速率,低落了CPU的使用率,然则实际环境是,很多人只有在一些专家顾问奉告他们后才知道在数据库中存在这样的对象。假如你不知道在你的数据库中存在什么样的对象,以及这些对象能帮你做什么,那么你花的钱就没有获得应有的回报。

10、不要由于你有一个锤子就觉得什么都是钉子

现在有一种潮流,一些开拓职员把利用法度榜样用到的所稀有据都存储在数据库中。我曾经看到有的利用法度榜样试图创建一个完全数据元驱动(metadata-driven)的用户界面,它把元数据和用户偏好的数据都寄放在相同的数据库中。显然这会闪开拓职员的生活变得繁杂和低落机能。

某些数据可能切实着实得当寄放在本地文件中,而不是寄放在收集的客户—办事器数据库中。当你存储数据的时刻,你必要阐发一下你的数据得当寄放在什么地方,是数据库?注册表?文本文件?照样XML文件?然后为其选择最得当的存储类型。“不要由于你有一个锤子就觉得什么都是钉子”,不要由于有一个数据库,就把所有器械都扔到数据库中——现在还存在一种对XML文件的过度滥用,也是同样的环境。

您可能还会对下面的文章感兴趣: