`

数据库的范式及反范式

 
阅读更多

范式:英文名称是 Normal Form,它是英国人 E.F.Codd(关系数据库的老祖宗)在上个世纪70年代提出关系数据库模型后总结出来的,范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法。数据库的设计范式是数据库设计所需要满足的规范。只有理解数据库的设计范式,才能设计出高效率、优雅的数据库,否则可能会设计出错误的数据库.目前有迹可寻的共有8种范式,依次是:1NF,2NF,3NF,BCNF,4NF,5NF,DKNF,6NF。满足最低要求的叫第一范式,简称1NF。在第一范式基础上进一步满足一些要求的为第二范式,简称2NF。其余依此类推。通常所用到的只是前三个范式,即:第一范式(1NF),第二范式(2NF),第三范式(3NF)。下面就简单介绍下这三个范式。

◆ 第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列。简而言之,第一范式就是无重复的列。
◆ 第二范式(2NF):首先要满足它是1NF,另外还需要包含两部分内容:一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。简而言之,第二范式就是非主属性非部分依赖于主关键字。
◆ 第三范式(3NF):首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。

 

问:第二范式和第三范式如何区别?
第二范式:非主键列是否依赖主键(包括一列通过某一列间接依赖主键),要是有依赖关系的就是第二范式;
第三范式:非主键列是否是直接依赖主键,不能是那种通过传递关系的依赖的。要是符合这种就是第三范式;
问:范式的存在有什么好处? 
范式可以避免数据冗余,减少数据库的空间,减轻维护数据完整性的麻烦。

范式再给我们带来的上面的好处时,同时也伴随着一些不好的地方:按照范式的规范设计出来的表,等级越高的范式设计出来的表越多。如第一范式可能设计出来的表可能只有一张表而已,再按照第二范式去设计这张表时就可能出来两张或更多张表,如果再按第三范式或更高的范式去设计这张表会出现更多比第二范式多的表。表的数量越多,当我们去查询一些数据,必然要去多表中去查询数据,这样查询的时间要比在一张表中查询中所用的时间要高很多。

也就是说我们所用的范式越高,对数据操作的性能越低。所以我们在利用范式设计表的时候,要根据具体的需求再去权衡是否使用更高范式去设计表。在一般的项目中,我们用的最多也就是第三范式,第三范式也就可以满足我们的项目需求,性能好而且方便管理数据;

当我们的业务所涉及的表非常多,经常会有多表发生关系,并且我们对表的操作要时间上要尽量的快,这时可以考虑我们使用“反范式”。反范式,故名思义,跟范式所要求的正好相反,在反范式的设计模式,我们可以允许适当的数据的冗余,用这个冗余去取操作数据时间的缩短。也就是用空间来换取时间,把数据冗余在多个表中,当查询时可以减少或者是避免表之间的关联;

如我们现在要对一个学校的课程表进行操作,现在有两张表,一张是学生信息student(a_id,a_name,a_adress,b_id)表,一张是课程表subject(b_id,b_subject),现在我们需要一个这样的信息,把选择每个课程的的课程名称和学生姓名输出来:

SQL语句为:select  B.b_id,B.b_subject,A_a_name from student A ,subject B;

当上面的数据量不多时,我们这样去查询没有问题;当我们的两张表的数据都是在百万级的时候,我们去查上面的信息,问题出现了,这个查询动不动就是几百毫秒,甚至更慢,这样的查询效率根本不能满足我们对于网页速度的要求(一般不能超过100毫秒),怎么办?当然要反范式,在课程表里面添加冗余字段——学生姓名,这样我们就可以通过下面的查询达到同样的目的:

SQL语句为:select  b_id,b_subject,a_name from subject B;

将两个查询放在一起查看执行计划,就会发现,第一个查询开销占了92%,而第二个才8%,也就是说,第二个查询比起第一个查询,效率上优化了10倍以上,成果显著啊。

当我们开始着手一个项目后,范式的应用是这样的变化的:

第三范式数据库的设计—–>当数据量越来越大,达到百万级时,经常要对一些多表数据进行大范围高频率进行操作——->范式数据库的设计———->网站的数据量再持续增长———->范式和反范式的数据库设计

分享到:
评论

相关推荐

    数据库范式理解例题数据库范式理解例题.doc

    数据库范式理解例题 数据库范式是relation database设计中的一种规范,旨在确保数据库的结构正确性和数据的一致性。其中包括第一范式(1NF)、第二范式(2NF)和第三范式(3NF)等。 第一范式(1NF) 第一范式是...

    数据库范式.pdf

    "数据库范式" 数据库范式是关系数据库的设计理论,旨在消除数据冗余,提高数据的一致性和可管理性。范式是一个升级的过程,每个上层的模式都是建立在下一级范式之上的。消除数据冗余的影响包括:减少物理空间的存储...

    数据库范式理解例题.doc

    数据库范式理解例题 数据库范式是关系数据库设计中的一种规范约束规则,用于确保数据库的逻辑一致性和数据的完整性。下面是对数据库范式的理解和例题: 1. 属性的分类: 在关系数据库中,属性可以分为主属性和非...

    数据库范式详解+实例

    ### 数据库范式详解 #### 一、范式的概念与作用 在数据库设计过程中,为了减少数据冗余、避免更新异常等问题,引入了**数据库范式**的概念。范式是衡量关系模式优劣的标准,其核心目的是通过规范化过程来简化...

    数据库设计范式最好的讲解

    目前关系数据库有六种设计范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。每种范式都有其特点和应用场景,关系数据库的设计需要根据实际情况选择...

    数据库范式理论

    数据库系统概论数据库范式理论。数据库范式理论

    数据库三大范式详解

    数据库范式1NF 2NF 3NF BCNF(实例) 设计范式(范式,数据库设计范式,数据库的设计范式)是符合某一种级别的关系模式的集合。构造数据库必须遵循一定的规则。在关系数据库中,这种规则就是范式。关系数据库中的关系...

    数据库范式讲解

    数据库范式讲解

    数据库范式

    设计范式(范式,数据库设计范式,数据库的设计范式)是符合某一种级别的关系模式的集合。构造数据库必须遵循一定的规则。在关系数据库中,这种规则就是范式。关系数据库中的关系必须满足一定的要求,即满足不同的范式...

    什么是数据库范式?什么是设计范式?

    数据库范式是关系型数据库设计中的核心理论,它是一组规则,用来指导如何构建和组织数据库,以确保数据的一致性、减少冗余并避免数据异常。这些规则以不同的级别存在,即第一范式(1NF)、第二范式(2NF)、第三范式...

    数据库系统范式教程数据库系统范式教程.ppt

    数据库系统范式教程 数据库系统范式是数据库系统设计的基础,它们是关系数据库设计的标准,旨在解决数据冗余、更新异常、插入异常和删除异常等问题。 1.1 数据库系统原理 数据库系统设计的主要目标是解决数据...

    数据库范式【转】

    数据库范式 数据库范式是数据库设计中的一种规则,旨在确保数据的正确性、完整性和一致性。数据库范式通常有三种:第一范式、第二范式和第三范式。下面将对每种范式进行详细的介绍。 第一范式 第一范式是最基本的...

    Java面试中数据库三范式详解

    "Java面试中数据库三范式详解" 数据库设计范式是指在设计数据库时需要遵守的一些基本规则,以确保数据的一致性、完整性和简洁性。在 Java 面试中,数据库三范式是常见的考察点,本文将对三范式进行详细的解释,并以...

    数据库范式化教程 - 订单数据实例速成.pdf

    数据库范式化是数据库设计中保证数据关系清晰、降低数据冗余和提高数据一致性的过程。根据文档内容,本教程将简明扼要地介绍范式化的概念,并通过订单数据实例进行阐释。以下是基于文档内容的知识点梳理。 首先,...

    通俗易懂,实例讲解数据库范式,三范式,六范式

    ### 数据库范式详解 #### 一、基础知识 在深入探讨数据库范式之前,我们需要先了解几个基础概念。 ##### 实体(Entity) 实体是指现实世界中客观存在的、可以被区别的事物。例如:“一个学生”、“一本书”、...

    数据库范式解析,看了秒懂

    数据库范式是关系数据库设计中的核心理论,它们是用来衡量数据依赖规范化的程度,确保数据库的结构合理、数据冗余最小,从而减少数据异常。本文将深入解析数据库的几个主要范式,包括第一范式(1NF)、第二范式(2NF...

    数据库范式以及范式的级别

    数据库范式是数据库设计中的一个重要概念,用于优化数据存储,减少数据冗余并避免数据不一致性。这个概念源自于关系数据库理论,由埃德加·科德在其关系模型中提出。在数据库设计中,遵循不同级别的范式有助于构建...

    数据库系统范式教程.ppt

    数据库系统范式教程 数据库系统范式是关系数据库设计的基础,旨在解决数据冗余、更新异常、插入异常、删除异常等问题。通过关系模式的规范化,我们可以消除不合适的数据依赖,提高数据的一致性和完整性。 数据库...

    数据库设计的基础-数据库范式

    数据库设计的基础——数据库范式

Global site tag (gtag.js) - Google Analytics