`
xp9802
  • 浏览: 1208087 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

五个数据库规范化要求【转载】

阅读更多

       通常情况下,可以从两个方面来判断数据库是否设计的比较规范。一是看看是否拥有大量的窄表,二是宽表的数量是否足够的少。若符合这两个条件,则可以说明这个数据库的规范化水平还是比较高的。当然这是两个泛泛而谈的指标。为了达到数据库设计规范化的要求,一般来说,需要符合以下五个要求。

 

 

要求一:表中应该避免可为空的列。

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

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

  一是通过设置默认值的形式,来避免空字段的产生。如在一个人事管理系统中,有时候身份证号码字段可能允许为空。因为不是每个人都可以记住自己的身份证号码。而在员工报到的时候,可能身份证没有带在身边。所以,身份证号码字段往往不能及时提供。为此,身份证号码字段可以允许为空,以满足这些特殊情况的需要。但是,在数据库设计的时候,则可以做一些处理。如当用户没有输入内容的时候,则把这个字段的默认值设置为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为前缀。如此数据库管理员无论是在日常管理还是对象引用的时候,都能够在最短的时间内找到自己所需要的对象。

 

 

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

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

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

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

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

分享到:
评论

相关推荐

    Microsoft SQL Server数据库建模工具

    2、种类包含一个前缀,有利于数据库表的命名规范。 3、创建/编辑表定义时,您可以拷贝、粘贴多个列以减少创建表时的工作量。 4、每个列都包含编辑格式、列宽、显示格式等多种自定义属性,在设计控件时,您可以...

    Wiley - Wrox Beginning - Database Design

    - 规范化通常分为多个级别(第一范式到第五范式),每个级别都有特定的目标和规则。 ### 2. **《Beginning Database Design》一书概述** #### 2.1 书籍基本信息 - 书名:《Beginning Database Design》 - 作者:...

    基于ACCESS的合同管理系统(转载自百度)

    基于ACCESS的合同管理系统在科研管理中的应用,能够极大地提升工作效率和管理质量,实现合同流程的规范化,同时对于数据的检索和分析提供强大支持。这不仅有助于科研项目按计划顺利进行,而且对于成本控制、资金管理...

    本人提供SQL语句大全(转载) 12009年04月28日 星期二 19:35SQL语句大全(转载)

    - **规范化书写**:遵循一定的命名规则和书写风格可以提高代码的可读性和可维护性。 - **大小写敏感性**:不同的数据库系统对关键字和标识符的大小写敏感性不同,如Oracle区分大小写,而SQL Server则不区分。 - **...

    SQL大总结——转载经典——价值过亿

    12. **数据库设计与规范化**:良好的数据库设计遵循范式理论,如第一范式(1NF)、第二范式(2NF)和第三范式(3NF),以减少数据冗余和提高数据一致性。 13. **安全性**:SQL权限系统允许管理员控制用户对数据库的...

    jsr168 portlet(struts2+spring2.5+hibernate3.3)(转载)

    Hibernate3.3是一个持久化框架,简化了Java应用与数据库之间的交互。它提供了ORM(对象关系映射)功能,使得开发者可以使用Java对象而不是SQL语句来操作数据库。在这个组合中,Hibernate被用来处理数据持久化,将...

    数据模型设计心得(转载)

    数据模型设计是数据库系统开发中的核心环节,它定义了数据的结构、关系和操作,为应用程序提供了一种规范化的数据表示。这篇转自iteye博客的文章《数据模型设计心得》虽然链接不可用,但我们可以根据标题和标签来...

    MYSQL培训经典教程(共两部分) 1/2

    4 1.1.5总结 5 1.2 关系数据库管理系统 5 1.2.1 关系数据库系统 6 1.2.2 数据库系统的发展 7 1.2.3 与数据库系统通讯 8 1.2.4 MySQL的体系结构 8 1.2.5总结 8 1.3 MYSQL使用的SQL语言 9...

    基于JSP的毕业设计选题系统的设计与实现(源代码+论文)

    通过使用毕业设计选题目系统,为指导老师及毕业生提供一个信息平台,实现选题工作的系统化、规范 化、简易化、智能化,从而达到提高选题工作效率的目的。 开发设计思想 尽量利用基础软硬环境,采用先进的管理系统...

    软件需求分析文档模版(转载自国家计算机标准和文件模板)

    通过对文档编制过程的规范化管理,可以显著提高软件开发效率和质量。此外,该标准还特别强调了面向对象软件的文档编制,这对于当前广泛应用面向对象编程方法的软件项目尤为重要。通过遵循这一规范,可以有效地促进...

    《精密制造与自动化》征稿简约 (6).pdf

    9. 数字化收录:期刊已加入中国期刊网、万方数据中国数字化期刊群等数字化媒体,并被《中国核心期刊(遴选)数据库》收录。投稿即表示作者同意作品上网或转载,并且稿酬已包含相关费用。 以上就是从提供的文件内容...

    大学生毕业实习总结之一.docx

    随着证券市场规范化,对证券资讯的需求也在不断增长,尤其是高质量、专业的资讯需求。 2. **入世对证券资讯行业的影响**:入世后,证券市场规范度提升,这促使证券业对资讯的需求层次提高,从简单的数据提供转向更...

    短信平台设计方案.pdf

    目录 一、前言 4 二、平台总体规划 5 2.1、平台总体设计 5 2.2、系统总体框架 5 2.3、系统设计要求 6 2.4、系统设计原则 7 三、项目概况 8 3.1、项目的核心及开发目的 8 3.2、服务对象 8 3.3、项目开发环境 8 四、...

    转载:liferay-4-administration-guide.pdf

    - **易用的AJAX UI**:通过AJAX技术,Liferay提供了一个响应迅速且交互流畅的界面,增强了用户体验。 - **一键外观更改**:允许用户快速切换主题,个性化定制门户外观。 - **自由形式Portlets/WebOS**:支持自定义...

    c语言课程设计汽车会员管理系统转载.doc

    【C语言汽车会员管理系统】 本课程设计的主题是利用C语言编写一个...通过这个课程设计,学生不仅能巩固C语言的基础知识,还能学习到文件操作、结构化编程和简单的数据库管理,为将来从事软件开发工作打下坚实基础。

    Java程序员面试的试题集(1_122)帮助初学者的技术问题(转载)

    工厂模式是一种常用的创建型设计模式,它提供了一种创建对象的最佳方式,即通过使用专门的工厂对象决定实例化哪一个类。工厂模式主要解决了当一个类不知道它所必须创建的对象的类的时候,或者当一个类希望由它的子类...

Global site tag (gtag.js) - Google Analytics