废话就不多说了,开始。。。
通常情况下,可以从两个方面来判断数据库是否计划的比拟标准。一是看看是否拥有大量的窄表,二是宽表的数量是否足够的少。若符合这两个条件,则可以说明这个数据库的标准化水平还是比拟高的。当然这是两个泛泛而谈的指标。为了达到数据库计划标准化的要求,一般来说,需要符合以下五个要求。
要求一:表中应该防止可为空的列。
虽然表中允许空列,但是,空字段是一种比拟特殊的数据类型。数据库在处理的时候,需要停止特殊的处理。如此的话,就会增长数据库处理记录的复杂性。当表中有比拟多的空字段时,在同等条件下,数据库处理的性能会下降许多。
所以,虽然在数据库表计划的时候,允许表中具有空字段,但是,我们应该尽量防止。若确切需要的话,我们可以通过一些折中的方式,来处理这些空字段,让其对数据库性能的影响下降到最少。
一是通过设置默认值的情势,来防止空字段的产生。如在一个人事管理系统中,有时候身份证号码字段可能允许为空。因为不是每个人都可以记住自己的身份证号码。而在员工报到的时候,可能身份证没有带在身边。所以,身份证号码字段往往不能及时供给。为此,身份证号码字段可以允许为空,以满意这些特殊情况的需要。但是,在数据库计划的时候,则可以做一些处理。如当用户没有输入内容的时候,则把这个字段的默认值设置为0或者为N/A。以防止空字段的产生。
二是若一张表中,允许为空的列比拟多,接近表全体列数的三分之一。而且,这些列在大部分情况下,都是无关紧要的。若数据库管理员碰到这种情况,笔者提议另外建立一张副表,以保存这些列。然后通过关键字把主表跟这张副表关联起来。将数据存储在两个独立的表中使得主表的计划更为简略,同时也能够满意存储空值信息的需要。
要求二:表不应该有重复的值或者列。
如现在有一个进销存管理系统,这个系统中有一张产品基本信息表中。这个产品开发有时候可所以一个人实现,而有时候又需要多个人协作才能够实现。所以,在产品基本信息表产品开发者这个字段中,有时候可能需要填入多个开发者的名字。
如进销存管理中,还需要对客户的联系人停止管理。有时候,企业可能只知道客户一个采购员的姓名。但是在须要的情况下,企业需要对客户的采购代表、仓库人员、财务人员共同停止管理。因为在订单上,可能需要填入采购代表的名字;可是在出货单上,则需要填入仓库管理人员的名字等等。
为懂得决这个问题,有多种实现方式。但是,若计划不合理的话在,则会致使重复的值或者列。如我们也可以这么计划,把客户信息、联系人都放入统一张表中。为懂得决多个联系人的问题,可以设置第一联系人、第一联系人电话、第二联系人、第二联系人电话等等。若还有第三联系人、第四联系人等等,则往往还需要参加更多的字段。
可是这么计划的话,会产生一系列的问题。如客户的采购员流动性比拟大,在一年内换了六个采购员。此时,在系统中该如何管理呢?难道就建立六个联系人字段?这不但会致使空字段的增长,还需要频繁的变动数据库表结构。明显,这么做是不合理的。也有人说,可以直接修改采购员的名字呀。可是这么处理的话,会把原先采购订单上采购员的名字也改变了。因为采购单上客户采购员信息在数据库中存储的不是采购员的名字,而只是采购员对应的一个编号。在编号不改而名字改变了的情况下,采购订单上表现的就是变动后的名字。这不利于时候的追踪。
所以,在数据库计划的时候要尽量防止这种重复的值或者列的产生。笔者提议,若数据库管理员碰到这种情况,可以改变一下策略。如把客户联系人另外设置一张表。然后通过客户ID把供应商信息表跟客户联系人信息表连接起来。也就是说,尽量将重复的值放置到一张独立的表中停止管理。然后通过视图或者其他手腕把这些独立的表联系起来。
要求三:表中记录应该有一个独一的标识符。
在数据库表计划的时候,数据库管理员应该养成一个好习惯,用一个ID号来独一的标识行记录,而不要通过名字、编号等字段来对记录停止区分。每个表都应该有一个ID列,任何两个记录都不可以共享统一个ID值。另外,这个ID值最好有数据库来停止自动管理,而不要把这个任务给前台应用程序。否则的话,很轻易产生ID值不统一的情况。
另外,在数据库计划的时候,最好还能够参加行号。如在销售订单管理中,ID号是用户不能够维护的。但是,行号用户就能够维护。如在销售订单的行中,用户可以通过调整行号的巨细来对订单行停止排序。通常情况下,ID列是以1为单位递进的。但是,行号就要以10为单位累进。如此,正常情况下,行号就以10、20、30顺次扩展下去。若此时用户需要把行号为30的记录调到第一行表现。此时,用户在不能够变动ID列的情况下,可以变动行号来实现。如可以把行号改成1,在排序时就能够按行号来停止排序。如此的话,本来行号为30的记录现在行号变为了1,就能够在第一行中表现。这是在现实应用程序计划中对ID列的一个有效补充。这个内容在教科书上是没有的。需要在现实应用程序计划中,才会把握到这个技巧。
要求四:数据库对象要有统一的前缀名。
一个比拟复杂的应用系统,其对应的数据库表往往以千计。若让数据库管理员看到对象名就懂得这个数据库对象所起的作用,恐怕会比拟困难。而且在数据库对象引用的时候,数据库管理员也会为不能迅速找到所需要的数据库对象而头疼。
为此,笔者建立,在开发数据库之前,最好能够花必定的时间,去制订一个数据库对象的前缀命名标准。如笔者在数据库计划时,喜好跟前台应用程序协商,确定合理的命名标准。笔者最经常使用的是根据前台应用程序的模块来定义后台数据库对象前缀名。如跟物料管理模块相干的表可以用M为前缀;而以订单管理相干的,则可以利用C作为前缀。具体采取什么前缀可以以用户的喜好而定义。但是,需要注意的是,这个命名标准应该在数据库管理员与前台应用程序开发者之间告竣共识,并且严厉按照这个命名标准来定义对象名。
其次,表、视图、函数等最好也有统一的前缀。如视图可以用V为前缀,而函数则可以利用F为前缀。如此数据库管理员无论是在日常管理还是对象引用的时候,都能够在最短的时间内找到自己所需要的对象。
要求五:尽量只存储单一实体类型的数据。
这里将的实体类型跟数据类型不是一回事,要注意区分。这里讲的实体类型是指所需要描述对象的本身。笔者举一个例子,估计大家就能够明确其中的内容了。如现在有一个图书馆里系统,有图书基本信息、作者信息两个实体对象。若用户要把这两个实体对象信息放在统一张表中也是可以的。如可以把表计划成图书名字、图书作者等等。可是如此计划的话,会给后续的维护带来不少的费事。
如当后续有图书出版时,则需要为每次出版的图书增长作者信息,这无疑会增长额定的存储空间,也会增长记录的长度。而且若作者的情况有所改变,如住址改变了以后,则还需要去变动每本书的记录。同时,若这个作者的图书从数据库中全体删除之后,这个作者的信息也就荡然无存了。很明显,这不符合数据库计划标准化的需求。
碰到这种情况时,笔者提议可以把下面这张表分解成三种独立的表,分别为图书基本信息表、作者基本信息表、图书与作者对应表等等。如此计划以后,以上碰到的全部问题就都引刃而解了。
以上五条是在数据库计划时达到标准化水平的基本要求。除了这些另外还有很多细节方面的要求,如数据类型、存储过程等等。而且,数据库标准往往没有技巧方面的严厉制约,主要依托数据库管理员日常工作经验的累积。
文章结束给大家分享下程序员的一些笑话语录: 关于编程语言
如果 C++是一把锤子的话,那么编程就会变成大手指头。
如果你找了一百万只猴子来敲打一百万个键盘,那么会有一只猴子会敲出一 段 Java 程序,而其余的只会敲出 Perl 程序。
一阵急促的敲门声,“谁啊!”,过了 5 分钟,门外传来“Java”。
如果说 Java 很不错是因为它可以运行在所有的操作系统上,那么就可以说 肛交很不错,因为其可以使用于所有的性别上。