六开彩开奖结果2017玽

数据库设计规范化的5个要求

时间:2016-03-11 22:27??? 点击:

通常情况下,可?#28304;?#20004;个方面来判断数据库是否设计的比较规范。一是看看是否拥有大量的窄表,二是宽表的数量是否足够的少。若符合这两个条件,则可以说明这个数据库的规范化水平还是比较高的。

?#27604;?#36825;是两个泛泛而谈的指标。为了达到数据库设计规范化的要求,?#35805;?#26469;说,需要符合以下五个要求。

要求一:表中应该避免可为空的?#23567;?/h2>

虽然表中允许空列,但是,空字段是一种比较特殊的数据类型。数据库在处理的时候,需要进行特殊的处理。如此的话,就会增加数据库处理记录的复?#26377;浴?#24403;表中有比较多的空字段时,在同等条件下,数据库处理的性能会降低许多。

所以,虽然在数据库表设计的时候,允许表中具有空字段,但是,我们应该尽量避免。若确实需要的话,我们可以通过一些折中的方式,来处理这些空字段,让其对数据库性能的影响降低到最少。

一是通过设置默认值的形式,来避免空字段的产生。如在一个人事管理?#20302;?#20013;,有时候身份证号码字段可能允许为空。因为不是每个人都可以记住自己的身份证号码。而在员工报到的时候,可能身份证没有带在身边。所以,身份证号码字段往往不能及时提供。为此,身份证号码字段可以允许为空,以满足这些特殊情况的需要。但是,在数据库设计的时候,则可以做一些处理。如当?#27809;?#27809;有输入内容的时候,则把这个字段的默认值设置为0或者为N/A。以避免空字段的产生。

二是若一张表中,允许为空的列比较多,接近表全部列数的三?#31181;?#19968;。而且,这些列在大部分情况下,都是可有可无的。若数据库管理员遇到这种情况,?#25910;?#24314;议另外建立一张副表,以保存这些?#23567;?#28982;后通过关键字把主表跟这张副表关联起来。将数据存储在两个独立的表中使得主表的设计更为简单,同时也能够满足存储空值信息的需要。

要求二:表不应该有重复的值或者?#23567;?/h2>

如现在有一个进销存管理?#20302;常?#36825;个?#20302;?#20013;有一张产品基本信息表中。这个产品开发有时候可以是一个人完成,而有时候?#20013;?#35201;多个人合作才能够完成。所以,在产品基本信息表产品开发者这个字段中,有时候可能需要填入多个开发者的名字。

如进销存管理中,还需要对客户的联?#31561;?#36827;行管理。有时候,企业可能只知道客户一个采购员的姓名。但是在必要的情况下,企业需要对客户的采购代表、仓库人员、财务人员共同进行管理。因为在订单上,可能需要填入采购代表的名字;可是在出货单上,则需要填入仓库管理人员的名字等等。

为了解决这个问题,有多种实现方式。但是,若设计不合理的话在,则会导致重复的值或者?#23567;?#22914;我们也可以这么设计,把客户信息、联?#31561;?#37117;放入同一张表中。为了解决多个联?#31561;?#30340;问题,可以设置第一联?#31561;恕?#31532;一联?#31561;说?#35805;、第二联?#31561;恕?#31532;二联?#31561;说?#35805;等等。若还有第三联?#31561;恕?#31532;四联?#31561;说?#31561;,则往往还需要加入更多的字段。

可是这么设计的话,会产生一系列的问题。如客户的采购员流动性比较大,在一年内换了六个采购员。此时,在?#20302;?#20013;该如何管理呢?难道就建立六个联?#31561;?#23383;段?这不但会导致空字段的增加,还需要频繁的更改数据库表结构。明显,这么做是不合理的。也有人说,可以直?#26377;?#25913;采购员的名字呀。可是这?#21019;?#29702;的话,会?#35328;?#20808;采购订单上采购员的名字也改变了。因为采购单上客户采购员信息在数据库中存储的不是采购员的名字,而只是采购员对应的一个编号。在编号不改而名字改变了的情况下,采购订单上?#20801;?#30340;就?#27465;?#25913;后的名字。这不利于时候的追踪。

所以,在数据库设计的时候要尽量避免这种重复的值或者列的产生。?#25910;?#24314;议,若数据库管理员遇到这种情况,可以改变一下策略。如把客户联?#31561;?#21478;外设置一张表。然后通过客户ID把供应商信息表跟客户联?#31561;?#20449;息表连接起来。也就是说,尽量将重复的值放置到一张独立的表中进行管理。然后通过视图或者其他手段把这些独立的表联系起来。

要求三:表中记?#21152;?#35813;有一个唯一的标识符。

在数据库表设计的时候,数据库管理员应该养成一个好习惯,用一个ID号来唯一的标识行记录,而不要通过名字、编号等字段来对纪录进行区分。每个表?#21152;?#35813;有一个ID列,任何两个记录都不可以共享同一个ID值。另外,这个ID值最好有数据库来进行自动管理,而不要把这个任务给前台应用程序。否则的话,很容易产生ID值不统一的情况。

另外,在数据库设计的时候,最好还能够加入行号。如在销售订单管理中,ID号是?#27809;?#19981;能够维护的。但是,行号?#27809;?#23601;可以维护。如在销售订单的行中,?#27809;?#21487;以通过调整行号的大小来对订单行进行排序。通常情况下,ID列是以1为单位递进的。但是,行号就要以10为单位累进。如此,正常情况下,行号就以10、20、30?#26469;?#25193;展下去。若此时?#27809;?#38656;要把行号为30的纪录调到第一行?#20801;尽?#27492;时,?#27809;?#22312;不能够更改ID列的情况下,可以更改行号来实现。如可以把行号改为1,在排序时就可以按行号来进行排序。如此的话,原来行号为30的纪录现在行号变为了1,就可以在第一行中?#20801;尽?#36825;是在实际应用程序设计中对ID列的一个有效补充。这个内容在教科书上是没有的。需要在实际应用程序设计中,才会掌握到这个技巧。

要求四:数据库对象要有统一的前?#22909;?/h2>

一个比较复杂的应用?#20302;常?#20854;对应的数据库表往往以千计。若让数据库管理员看到对象名就了解这个数据库对象所起的作用,恐怕会比较困难。而且在数据库对象引用的时候,数据库管理员?#19981;?#20026;不能迅速找到所需要的数据库对象而头疼。

为此,?#25910;?#24314;立,在开发数据库之前,最好能够花?#27426;?#30340;时间,去制定一个数据库对象的前?#22909;?#21517;规范。如?#25910;?#22312;数据库设计时,?#19981;?#36319;前台应用程序协商,?#33539;?#21512;理的命名规范。?#25910;?#26368;常用的?#27465;?#25454;前台应用程序的模块来定义后台数据库对象前?#22909;?#22914;跟物料管理模块相关的表可以用M为前缀;而以订单管理相关的,则可以利用C作为前缀。具体采用什么前缀可以以?#27809;?#30340;爱好而定义。但是,需要注意的是,这个命名规范应该在数据库管理员与前台应用程序开发者之间达成共识,并?#24050;?#26684;按照这个命名规范来定义对象名。

其次,表、视图、函数等最好也有统一的前缀。如视图可以用V为前缀,而函数则可以利用F为前缀。如此数据库管理员无论是在日常管理还是对象引用的时候,都能够在最短的时间内找到自己所需要的对象。

要求五:尽量只存储单一实体类型的数据。

这里将的实体类型跟数据类型不是一回事,要注意区分。这里讲的实体类型是指所需要描述对象的本身。?#25910;?#20030;一个例子,估计大家就可以明白其中的内容了。如现在有一个图书馆里?#20302;常?#26377;图书基本信息、作者信息两个实体对象。若?#27809;?#35201;把这两个实体对象信息放在同一张表中也是可以的。如可以把表设计成图书名字、图书作者等等。可是如此设计的话,会给后续的维护带来不少的麻烦。

如当后续有图书出版时,则需要为?#30475;?#20986;版的图书增加作者信息,这无疑会增加额外的存储空间,?#19981;?#22686;加记录的长度。而且若作者的情况有所改变,如住址改变了以后,则还需要去更改每本书的记录。同时,若这个作者的图书从数据库中全?#21487;?#38500;之后,这个作者的信息也就荡然无存了。很明显,这不符合数据库设计规范化的需求。

遇到这种情况时,?#25910;?#24314;议可以把上面这张表分解成三种独立的表,分别为图书基本信息表、作者基本信息表、图书与作者对应表等等。如此设计以后,以上遇到的所有问题就都引刃而解了。

以上五条是在数据库设计时达到规范化水平的基本要求。除了这些另外还有很多细节方面的要求,如数据类型、存储过程等等。而且,数据库规范往往没有技术方面的严格限制,主要依靠数据库管理?#27604;?#24120;工作经验的累积。

来源:未知//所属分类:技术资料/更新时间:2016-03-11 22:27
顶一下
(1)
100%
踩一下
(0)
0%
上一篇:数据库性能优化之SQL语句优化
下一篇:单机数据库优化的一些实践
相关内容
六开彩开奖结果2017玽 魔法师计划破解版 52开奖网pk10 时时彩计划软件免费版 老时时360 云南时时开奖记录 兴发娱乐官网 富宝彩坛网址 足球竞猜稳赚不赔技巧 时时彩如何杀一码 28码计划官网