020-29815005
预约专线时间:09:00-23:59

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

新闻来源:本站 日期:2021-07-02
一般来说,可以从两个方面判断数据库是否设计得比较规范:
    一,看是否有大量的窄表,

    二,宽表量是否足够少;

    如果这两个条件都满足,就可以看出这个数据库的标准化程度还是比较高的。它当然是两个一般性的指标。通常,要满足以下五项要求,才能使数据库设计达到标准化的要求。

    1.应避免在表格中使用空白列。

    尽管表中允许空列,但空字段是一种比较特殊的数据类型。处理数据库时,需要进行特殊处理。这样,就增加了数据库处理记录的复杂性。在相同情况下,当一个表中的空字段数量较多时,数据库处理性能会下降很多。因此,尽管在数据库表设计时,允许表中包含空字段,但我们应尽量避免。如果真的需要的话,我们可以用一种折中的方法来处理这些空字段,使它对数据库性能的影响最小化。

    第一,通过设置缺省值的形式,避免空字段。例如在人事管理系统中,有时可能会将身份证号码字段空格。由于并非每个人都能记住自己的身份证号码。而且员工报到时,可能身边没有带身份证。因此,经常会出现身份证号码栏不能及时提供。为了这个目的,ID号字段可以允许空白,以满足这些特殊情况。然而,在数据库设计时,可以进行一些处理。如果用户没有输入任何内容,那么就将该字段的默认值设为0或N/A。为避免产生空字段。

    第二,若一个表中允许空列较多,则接近于所有表列数的三分之一。同样,这些列在大多数情况下都是不可缺少的。对于出现这种情况的数据库管理员,笔者建议另外创建一个副表来保存这些列。接着,主表与这个副表通过关键字相关联。在两个不同的表中存储数据,使主表的设计更加简单,同时还可以满足存储空值信息的需求。

    2.表不应具有重复值或列。

    就像现在有了进销存管理系统,在这个系统里有产品基本信息表。这种产品开发有时可能由一个人完成,有时需要多个人的协作才能完成。因此,在产品基本信息表产品开发人员字段中,有时可能需要填写多个开发人员的名字。比如进销存管理,也需要管理客户的联系方式。有时,一个公司可能只知道客户某个采购人员的名字。但如有必要,企业需要与采购代表、仓库职员、财务等部门共同管理。由于在订单中,采购代表的名字可能需要填写;但在出货单上,则需要填写仓库管理员的名字,等等。要解决这个问题,有很多种实现方法。然而,如果设计不合理,则会导致重复的值或列。比如我们也可以这样设计,将客户信息、联系人信息放在同一个表格中。为解决多人联络问题,您可以设定第一联络人、第一联络人、第二、第三联络人等。如果有第三个联系人、第四个联系人等等,通常还需要添加更多的字段。但是这样设计,会产生一系列的问题。例如客户的买主流动性较大,一年内换了六位买主。这时,系统应该如何管理呢?是否要建立六个联系字段?这样不仅会使空字段增加,而且需要经常改变数据库表结构。显然,这样做是没有道理的。还有人说,买家的名字可以直接修改呀。不过这样处理,原来订购单上的买家的名字也会发生变化。由于采购单上的顾客购买信息并不是采购人员的名字,而是存储在数据库中采购人员的姓名。如果数字没有改变,而且名字改变了,采购订单上显示的就是这个名字。这样做不利于跟踪。因此,在数据库设计时,应尽量避免此类重复值或生成列。作者建议,如果数据库管理员遇到这种情况,可以改变一下策略。例如为客户联系人设置额外的表格。之后,供应商信息表通过客户ID与客户联系信息表进行连接。即,尽量将重复的值放在一个单独的表中进行管理。这样,就可以通过视图或其他方式将这些独立的表连接起来。


数据库


    3.表格中的记录应具有唯一标识符。

    当设计数据库表时,数据库管理员应该养成良好的习惯,即使用ID号记录惟一的标识行,而不要用姓名、编号等字段来区分记录。每一个表都应该有一个ID列,并且没有任何两个记录可以共享相同的ID值。此外,这个ID值最好是有一个用于自动管理的数据库,而不要将这个任务交给前台应用程序。不然的话,很容易出现ID值不一致的情况。

    此外,在设计数据库时,最好也能加入行号。例如在销售订单管理中,用户无法维护ID号。然而,行号用户可以维护。例如在一个销售订单的行中,用户可以通过调整行号的大小来对订单行进行排序。一般来说,ID列是按1递进的。然而,行号必须以10为单位累进。所以,通常情况下,行号按10、20、30依次展开。如果用户需要将行号为30的记录调至显示的第一行。这时,如果用户无法更改ID列,则可以更改行号来实现。如果您可以将行号改为1,那么在进行排序时可以根据行号进行排序。这样,原来行号为30的记录的行号变成了1,现在可以在第一行显示。在实际应用程序设计中,这是对ID列的有效补充。这是教科书中没有的内容。要真正的应用程序设计,才能掌握这一技巧。

    4.数据库对象使用统一的前缀名。

    一种较为复杂的应用系统,其相应的数据库表往往以千计。要让数据库管理员看到对象的名称,就能理解该数据库对象所扮演的角色,恐怕会更加困难。当数据库对象被引用时,数据库管理员也会因为无法快速找到所需数据库对象而感到头痛。因此,笔者认为,在开发数据库之前,最好能花一定的时间,对数据库对象制定前缀命名规范。正如作者在设计数据库时,喜欢和前台应用协商,确定合理的命名规范。作者通常根据前台应用程序的模块定义后台数据库对象前缀名称。例如与物料管理模块相关的表可以前缀为M;对于订单管理相关的,可以使用C作为前缀。使用什么前缀可以根据用户的爱好来定义。然而,一定要注意,此命名规范应该在数据库管理员和前台应用程序开发人员之间达成一致,并严格按照此命名规范定义对象名。第二,表格、视图、函数等最好有统一的前缀。一个视图可以使用V作为前缀,而函数可以使用前缀F。不管是在日常管理还是对象引用时,数据库管理员都能在最短的时间内找到自己需要的对象。

    5.尽量只存储单一实体类型的数据。

    此处所使用的实体类型与数据类型并不相同,需要注意区别。本文中提到的实体类型是对对象本身进行描述的。作者举例说明,估计每个人都能理解其中的内容。比如现在的图书馆里系统,有图书基本信息、作者信息两个实体对象。如果用户想要将两个实体对象信息放到同一个表中也是可以的。例如将表格设计成书籍名称、书籍作者等。但这样设计的话,会给以后的维修工作带来不少麻烦。如果以后有书籍出版,就需要为每一本书的出版增加一个作者信息,这无疑增加了存储空间,同时也增加了记录长度。并且如果作者的情况发生了变化,如果以后地址发生变化,那么还需要修改每本书的记录。与此同时,如果这位作者的书籍从数据库中完全删除,该作者的信息也将一去不复返。这显然不符合规范数据库设计的要求。面对这种情况,笔者建议可以将上述表格分解成三个独立的表格,分别是图书基本信息表、作者基本信息表、图书和作者对应表等。这样设计之后,所遇到的所有上述问题都会一针见血地解决。

    上述五条是实现数据库设计时达到标准化水平的基本要求。除此之外,还需要大量的详细信息,如数据类型、存储过程等。此外,数据库规范通常没有严格的技术限制,主要依赖于数据库管理员的日常工作经验。