精华内容
下载资源
问答
  • 啥是数据库范式

    2020-11-06 10:58:55
    关于数据库范式,时常有听说过,一直没有详细去了解。一般数据库书籍或数据库课程会介绍范式相关内容,范式也经常出现在数据库考试题目中。不清楚你是否对范式有比较清晰的了解呢?本篇文章我们一起来学习下数据库...

    前言:

    关于数据库范式,时常有听说过,一直没有详细去了解。一般数据库书籍或数据库课程会介绍范式相关内容,范式也经常出现在数据库考试题目中。不清楚你是否对范式有比较清晰的了解呢?本篇文章我们一起来学习下数据库范式吧。

    1.数据库范式简介

    为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。

    范式的英文名称是 Normal Form ,简称 NF 。它是英国人 E.F.Codd 在上个世纪70年代提出关系数据库模型后总结出来的。范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法。

    目前关系型数据库有六种常见范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。

    2.常用范式详解

    在设计数据库时,会参考范式要求来做,但是并不是说遵循的范式等级越高越好,范式过高虽然具有对数据关系有更好的约束性,但是也会导致表之间的关系更加繁琐,从而导致每次操作的表会变多,数据库性能下降。通常,在关系型数据库设计中,最高也就遵循到 BCNF ,普遍还是 3NF 。即一般情况下,我们使用前三个范式已经够用了。下面我们来详细了解下常用的前三个范式。

    第一范式(1NF)

    第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。简单的讲第一范式就是每一行的各个数据都是不可分割的,同一列中不能有多个值,如果出现重复的属性就需要定义一个新的实体。

    示例:假设一家公司要存储其员工的姓名和联系方式。它创建一个如下表:

    ![image.png](https://img-blog.csdnimg.cn/img_convert/575aa863e0c19acf391646f82db8a535.png#align=left&display=inline&height=439&margin=[object Object]&name=image.png&originHeight=878&originWidth=1498&size=83175&status=done&style=none&width=749)

    两名员工(Jon&Lester)拥有两个手机号码,因此公司将他们存储在同一表格中,如上表所示。那么该表不符合 1NF ,因为规则说“表的每个属性必须具有原子(单个)值”,Jon&Lester员工的 emp_mobile 值违反了该规则。为了使表符合 1NF ,我们应该有如下表数据:

    ![image.png](https://img-blog.csdnimg.cn/img_convert/07570050c3166a154a20d890bac3d84a.png#align=left&display=inline&height=351&margin=[object Object]&name=image.png&originHeight=702&originWidth=1500&size=80191&status=done&style=none&width=750)

    第二范式(2NF)

    第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。

    +----------+-------------+-------+
    | employee | department  | head  |
    +----------+-------------+-------+
    | Jones    | Accountint  | Jones |
    | Smith    | Engineering | Smith |
    | Brown    | Accounting  | Jones |
    | Green    | Engineering | Smith |
    +----------+-------------+-------+
    

    上表描述了被雇佣者,工作部门和领导的关系。我们把能够唯一表示数据库中表的一行的数据成为这个表的主键。表中 head 列不和主键相关。 因此,该表是不符合第二范式的,为了使上面的表符合第二范式,需要将它拆分为两个表:

    -- employee 为主键
    +----------+-------------+
    | employee | department  |
    +----------+-------------+
    | Brown    | Accounting  |
    | Green    | Engineering |
    | Jones    | Accounting  |
    | Smith    | Engineering |
    +----------+-------------+
    
    -- department 为主键
    +-------------+-------+
    | department  | head  |
    +-------------+-------+
    | Accounting  | Jones |
    | Engineering | Smith |
    +-------------+-------+
    

    第三范式(3NF)

    满足 2NF 的前提下,非主键外的所有字段必须互不依赖,即需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。

    简而言之,第三范式(3NF)要求一个关系中不包含已在其它关系已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。

    3.关于反范式

    范式的优点是明显的,它避免了大量的数据冗余,节省了存储空间,保持了数据的一致性。范式化的表通常更小,可以更好地放在内存里,所以执行操作会更快。那么是不是只要把所有的表都规范为 3NF 后,数据库的设计就是最优的呢?这可不一定。范式越高意味着表的划分更细,一个数据库中需要的表也就越多,用户不得不将原本相关联的数据分摊到多个表中。稍微复杂一些的查询语句在符合范式的数据库上都可能需要至少一次关联,也许更多,这不但代价昂贵,也可能使一些索引策略无效。

    所以我们在进行数据库设计时,并不会完全按照范式要求来做,有时候也会进行反范式设计。通过增加冗余或重复的数据来提高数据库的读性能,减少关联查询时,join 表的次数。

    参考:

    wx_blog.png

    展开全文
  • 数据库范式与反范式

    2017-12-23 10:31:10
    数据库范式与反范式的介绍以及特点,反范式的七种模式与举例
    1.范式
      1.1 1NF-3NF
    • 定义
                1NF 确保原子性( Atomicity 原子性的粒度、原子性的价值( 1 范式:单值,并且把值当做单值用,建议不要把值拆开
                2NF 检查对键的完全依赖 价值在在于控制数据冗余和查询性能
                3NF 检查属性的独立性
                规范化的价值 合理规范化的模型可应对需求变更
                规范化数据重复降至最少

    • 为什么要有三范式?
                   不会发生插入( insert )、删除( delete )和更新( update )操作异常。
                控制数据冗余和提高查询性能
                更好的进行数据有效性检查,提高存储效率。
                 范式的满足便于数据一致性的控制

    • 如何控制冗余?
                使用数据库三范式

    • 缺点
               范式化的表,在查询的时候经常需要很多的关联,因为单独一个表内不存在冗余和重复数据。这导致多次的关联,增加查询代价
                可能使一些索引策略无效。因为范式化将列存放在不同的表中,而这些列在一个表中本可以属于同一个索引。

      1.2  反范式(逆范式)打破范式
    • 定义,为什么要有反范式?
                等级越高的范式设计出来的表越多,可能会增加查询所需时间。当我们的业务所涉及的表非常多,经常会有多表连接,并且我们对表的操作要时间上要尽量的快,这时可以考虑我们使用“反范式”。
                反范式 用空间来换取时间,引入受控的数据冗余,当查询时可以减少或者是避免表之间的关联

    • 优点
                可以避免关联,因为所有的数据几乎都可以在一张表上显示;
                可以设计有效的索引;
    • 缺点
                提高了对数据冗余的维护,为了保证数据的一致性(可以用触发器来解决这个问题,某个表被修改后触发另一个表的更新)

    • 反范式的7种模式,并举例。
                ①一对一:合并表
                     如果双方都是完全参与,那么某个表直接可以作为另一张表的属性直接合并。若有一方是部分参与,把完全参与的并入部分参与的会出现空值,将部分参与并入完全参与的可以。若双方都是部分参与,一定会出现空值,这样就很难确定主键
                    例子:员工表(员工编号,姓名,住址,薪水,科室编号) 亲属表(员工编号,亲属姓名,亲属电话),其中亲属表中只登记一位亲属,如果要查询张三的亲属的电话,就要连接两张表,所以将两张表合并以减少连接。

                ②一对多:复制非关键字以减少连接
                  适用条件:当两张表连接时,最主要的事务都与某个非键值相关
          例子: 两个表(用户id,好友id)和(用户id,用户昵称,用户邮箱,联系电话)符合3NF,如果需查询某个用户的好友(昵称)名单,此时需对2个表进行连接查询,可以把第一个表修改成(用户id,好友id,好友昵称)这样只需要查询第一个表就可获取所有好友昵称.

                ③一对多:复制关键字以减少连接
                    复制一对多关系中的外键,使需要通过第三张表连接的两张表直接关连在一起
                    在一对多的关系中,将另一实体表的主键复制到多的实体表当外键,减少join表的数量
                    例子:每个部门租了一些录像带,每盘录像带是有 租赁协议的。这样 有三张表:部门(部门编号),租的录像(录像带编号,部门编号),租赁协议,见下图关系表
                

                ④多对多:关系里面复制值以减少连接
                    引入一张新表,多对多被拆成两个一对多(满足3NF)。
                    假设要查询,演员演了哪些电影,为了避免三张表连接,就在role表中复制电影名称以减少连接
                       
                    
                ⑤引入重复组
                    引入重复组,重复组一般不超过10个 (对于一个多值属性,如果多值的数量不多小于等于10)             
                    例子:customer 可能有多个address。一般是customer一张表,address一张表,address中存储它对应的customer的ID那么每次付款的时候,需要再查找address表来得到customer的所有地址。可以在customer后面加addr1、addr2字段,但不知道要加多少个,不好。较为常见的做法是,在customer表中引入一条addr字段,放最常用地址,address表中存储所有地址。

                ⑥提取表
                    extract table的表中内容和原表可能都相同,只是组织结构不同,有可能一个是为了查询而建的表(将经常被查询的数据提前计算出来存入该表,会有大量冗余,但是提高效率),另一个是为了update的,一定程度上实现了读写分离。
                    比如有学生表,宿舍表,为了查学生的住宿费,需要连接两表。此时可以提取出一张用于查询的表,其中包含了学生姓名,住宿费用以及其他字段,方便查询。

                ⑦使用分区表
                    可以将表分解成更少的分区。
                     水平分区:跨多个(较小)的表分配记录。 这种形式分区是对表的行进行分区,通过这样的方式不同分组里面的物理列分割的数据集得以组合,从而进行个体分割(单分区)或集体分割(1个或多个分区)。所有在表中定义的列在每个数据集中都能找到,所以表的特性依然得以保持。
                   例子:一个包含十年发票记录的表可以被分区为十个不同的分区,每个分区包含的是其中一年的记录。
                     垂直分区:跨多个(较小)表分布列。 PK复制,以便重建。 垂直分区(Vertical Partitioning) 这种分区方式一般来说是通过对表的垂直划分来减少目标表的宽度,使某些特定的列被划分到特定的分区,每个分区都包含了其中的列所对应的行。
                   例子: 一个包含了大text和BLOB列的表,这些text和BLOB列又不经常被访问,这时候就要把这些不经常使用的text和BLOB了划分到另一个分区,在保证它们数据相关性的同时还能提高访问速度。
    展开全文
  • 数据库范式

    2019-10-09 19:25:10
    数据库范式 简介:  范式来自英文Normal form,简称NF。要想设计—个好的关系,必须使关系满足一定的约束条件,此约束已经形成了规范,分成几个等级,一级比一级要求得严格。满足这些规范的数据库是简洁的、结构...

    数据库范式

    • 简介:
       范式来自英文Normal form,简称NF。要想设计—个好的关系,必须使关系满足一定的约束条件,此约束已经形成了规范,分成几个等级,一级比一级要求得严格。满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。
    • 作用:
       使结构更合理,消除存储异常,使数据冗余尽量小。便于插入、删除和更新。
    • 原则:
       遵从概念单一化“一事一地”原则,即一个关系模式描述一个实体或实体间的一种联系。规范的实质就是概念的单一化。
    • 范式的优缺点
       优点:1)范式化的数据库更新起来更加快;
          2)范式化之后,只有很少的重复数据,只需要修改更少的数据;
          3)范式化的表更小,可以在内存中执行;
          4)很少的冗余数据,在查询的时候需要更少的distinct或者group by语句。
       缺点:1)范式化的表,在查询的时候经常需要很多的关联,因为单独一个表内不存在冗余和重复数据。这导致,稍微复杂一些的查询语句在查询范式的schema上都可能需要较多次的关联。这会增加让查询的代价,也可能使一些索引策略无效。因为范式化将列存放在不同的表中,而这些列在一个表中本可以属于同一个索引。
    • 各类范式
       1.第一范式(1NF)
        第一范式(1NF)是指在关系模型中,对于添加的一个规范要求,所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。即实体中的某个属性有多个值时,必须拆分为不同的属性。在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。简而言之,第一范式就是无重复的域。
       2.第二范式(2NF)
        第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或记录必须可以被唯一地区分。选取一个能区分每个实体的属性或属性组,作为实体的唯一标识。
        第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是在第一范式的基础上属性完全依赖于主键。
       3.第三范式(3NF)
        第三范式(3NF)是第二范式(2NF)的一个子集,即满足第三范式(3NF)必须满足第二范式(2NF)。第三范式(3NF)要求一个关系中不包含已在其它关系已包含的非主关键字信息。
       4.巴斯-科德范式(BCNF)
        在3NF基础上,任何非主属性不能对主键子集依赖(在3NF基础上消除对主码子集的依赖)。
        巴斯-科德范式(BCNF)是第三范式(3NF)的一个子集,即满足巴斯-科德范式(BCNF)必须满足第三范式(3NF)。通常情况下,巴斯-科德范式被认为没有新的设计规范加入,只是对第二范式与第三范式中设计规范要求更强,因而被认为是修正第三范式,也就是说,它事实上是对第三范式的修正,使数据库冗余度更小。这也是BCNF不被称为第四范式的原因。
       5.第四范式(4NF)
        设R是一个关系模型,D是R上的多值依赖集合。如果D中存在凡多值依赖X->Y时,X必是R的超键,那么称R是第四范式的模式。
       6.第五范式(5NF,完美范式)
        如果关系模式R中的每一个连接依赖均由R的候选码所隐含,则称此关系模式符合第五范式。
    • 反范式
       1.定义:试图增加冗余数据或分组数据来优化数据库读取性能的过程,减少了表之间的连接,但如果冗余数据量过大的时候,可能会碰到I/O瓶颈,导致性能变得更差,所以需要衡量各个表的更新量和查询量。在数据统计分析,数据仓库等领域使用的比较多
       2.优缺点
        优点:1)可以避免关联,因为所有的数据几乎都可以在一张表上显示;
           2)可以设计有效的索引;
        缺点:1)表格内的冗余较多,删除数据时候会造成表有些有用的信息丢失。
    展开全文
  • 范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法。数据库的设计范式数据库设计所需要满足的规范。只有理解数据库的设计范式,才能设计出率、优雅的数据库,否则可能会设计出...

    范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法。数据库的设计范式是数据库设计所需要满足的规范。只有理解数据库的设计范式,才能设计出率、优雅的数据库,否则可能会设计出错误的数据库。

    反范式,不满足范式的模型,就是反范式模型。反范式跟范式所要求的正好相反,在反范式的设计模式,我们可以允许适当的数据的冗余,用这个冗余去取操作数据时间的缩短。本质上就是用空间来换取时间,把数据冗余在多个表中,当查询时可以减少或者是避免表之间的关联。

    RDBMS模型设计过程中,常常使用范式约束我们的模型,但在NOSQL模型中则大量采用反范式。

    数据库中范式和反范式的的主要区别在于:

    1

    在范式化的数据库中,每个事实数据会出现并且只出现一次;相反,在反范式化的数据库中,信息是冗余的,可能会存储在多个地方。

    范式化的优点:

    1)范式化的新操作通常比反范式化要快。

    2)当数据较好地范式化时,就只有很少或者没有重复数据,所以只需要修改少的数据。

    3)范式化的表通常小,可以好地放在内存里,所以执行操作会快。

    4)很少有多余的数据意味着检索列表数据时少需要DISTINCT或者GROUP BY语句。

    范式化设计的schema的缺点是通常需要关联,较多的关联可能使得一些索引策略无效,例如,范式化可能将列存放在不同的表中,而这些列如果在一个表中本可以属于同一个索引。

    反范式的schema因为所有数据都在一张表中,可以很好地避免关联。缺点是update操作的代价高,需要新多个表,至于这会不会是一个问题,需要考虑新的频率以及新的时长,并和执行select查询的频率进行比较。

    从另一个父表冗余一些数据到子表的理由通常是排序的需要。

    缓存衍生值也是有用的。如果需要显示每个用户发了多少消息(像很多论坛做的),可以每次执行一个昂贵的子查询来计算并显示它;也可以在user表中建一个num_messages列,每当用户发新消息时新这个值。

    本文来自千锋教育,转载请注明出处。

    展开全文
  • 数据库范式理解

    2018-07-30 08:57:22
    之所以使用范式,往往是设计不规范的数据库表可能造成大量的数据冗余,也可能在发生插入、删除、修改操作后出现各种各样的不合理的问题。 1)1NF(第一范式): 数据库表的每一列都是不可分割的基本数据项。 如...
  • https://zhuanlan.zhihu.com/p/20028672三范式详解 解决了什么问题:(上面也有讲到)https://blog.csdn.net/qq_41174684/article/details/90313791
  • 数据库范式通俗理解

    2021-04-18 22:25:59
    一、第一范式 1NF是对属性的原子性,要求属性具有原子性,不可再分解; 表:字段1、 字段2(字段2.1、字段2.2)、字段3 ...... 如学生(学号,姓名,性别,出生年月日),如果认为最后一列还可以再分成(出生年,...
  • 数据库范式简单理解

    万次阅读 2018-03-09 09:11:40
    数据库设计当中三范式是经常遇到的,如果实际项目数据库设计中能达到第三范式基本也就满足要求了,那么如何快速有效的理解三个范式,同时应用于实际项目中去呢?首先看看标准定义的三个范式:第一范式(1NF)所谓第一...
  • 数据库设计:范式与反范式

    万次阅读 2016-07-19 15:49:37
    我们在设计数据库的过程中,往往要用到范式或反范式的设计模式。熟悉地掌握范式与反范式的要领,学会在实际开发中恰当地混合使用范式与反范式,才能设计出结构合理,执行高效的数据库。下面就以一个经典的例子进行...
  • 数据库范式介绍

    2020-11-06 15:08:01
    关于数据库范式,时常有听说过,一直没有详细去了解。一般数据库书籍或数据库课程会介绍范式相关内容,范式也经常出现在数据库考试题目中。不清楚你是否对范式有比较清晰的了解呢?本篇文章我们一起来学习下数据库...
  • 【MySQL】数据库范式

    2021-01-22 11:46:27
    1、数据库范式简介 ...2、应用范式优点 (1)减少数据冗余(这是最主要的好处,其他好处都是由此而附带的) (2)消除异常(插入异常,更新异常,删除异常) (3)让数据组织的更加和谐 3、常见范式
  • 关系数据库范式

    2021-03-11 23:04:33
    种类:目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。 范式之间的关系 范式的特点 优点 1.
  • 数据库 - BC范式(BCNF)

    千次阅读 2015-05-07 09:33:28
    BC范式(BCNF)关系模式R,F>∈1NF,若X→Y且Y  X时X必包含码,则R,F> ∈BCNF。 这个定义表明,如果非平凡的FD X→Y中X不包含码,那么Y必定传递依赖于候选键,因此R不是BCNF模式。 等价于:每一个决定属性因素都...
  • 文章目录函数依赖部分函数依赖完全函数依赖传递函数依赖(非)平凡函数依赖多值依赖范式第一范式(1NF)第二范式(2NF)存在的问题第三范式(3NF)存在的问题鲍依斯-科得范式(BCNF)存在的问题第四范式(4NF)范式化...
  • 关系型数据库优点

    2020-04-01 17:09:17
    六、范式 想要使用我们关系型数据库,必须得遵守一定的规则,这些规则就是“范式”。 第一范式是基本要求,即每个列都是不分割的数据项。 第二范式要求实体属性要完全依赖主键,不能依赖部分主键。 第三范式就是一...
  • 数据库范式化和反范式化模型

    千次阅读 2016-04-28 10:14:35
    在实际工作中,数据库数据模型的建立和选择对数据的“增删改查”具有直接影响,从基本角度来讲,数据模型具有“范式化”和“反范式化”两种,而在实际工作场景中,常依赖实际情况采取这两种模型混用。 范式范式化...
  • 单纯通过概念原理性的描述来了解三大范式可能会一头雾水,像我在一开始接触到数据库范式的时候也是分不清第二范式和第三范式的关系,后来记住了概念一段时间不使用就描述不清楚了,今天有人问起,于是我想出了一个...
  • 文章目录范式理论何为范式,何为建模函数依赖1. 完全函数依赖2. 部分函数依赖3. 传递函数依赖第一范式第二范式第三范式 范式理论 何为范式,何为建模 范式理论和谁有关?和关系建模有关,通常我们说的三...优点: ???
  • 本文讲解数据库三大范式、业务设计、逻辑设计、范式设计、反范式设计 数据库设计的第一大范式 数据库表中的所有字段都只具有单一属性,单一属性的列是由基本数据类型所构成的,设计出来的表都是简单的二维表: ...
  • ①要设计合适的关系模式,使其逻辑结构更加符合要求,出现了规范化理论。而三大范式即第一、第二和第三范式就是规范化理论重要部分。...因此,在数据库设计的时候满足范式要求可以很大限度的合理的处理数据,
  • 数据库逻辑设计之 三大范式 及 反范式化 优缺点

    千次阅读 多人点赞 2018-08-31 15:03:16
    一、第一范式 原子性:要求属性具有原子性,不可再分解; 如学生(学号,姓名,性别,出生年月日),如果认为最后一列还可以再分成(出生年,出生月,出生日),它就不是一范式了,否则就是; 二、第二范式 ...
  • 关系型数据库进行设计的时候,一般需要遵循三大范式,第一范式要求确保表中每列的原子性,也就是不可拆分;第二范式要求确保表中每列与主键相关,而不能只与主键的某部分相关(主要针对联合主键),主键列与非主键列...
  • 基础知识 实体:现实世界中客观存在并可以被区别的事物。比如“一个学生”、“一本书”、“一门课”等等。值得强调的是这里所说的“事物”不仅仅是看得见摸...在一个关系数据库中,它是一个操作原子,即关系数据库在做
  • 数据库设计反范式

    千次阅读 2018-07-12 15:32:52
    1.范式 1.1 1NF-3NF 定义 1NF确保原子性(Atomicity)原子性的粒度、原子性的价值(1范式:单值,并且把值当做单值用,建议不要把值拆开) 2NF检查对键的完全依赖价值在在于控制数据冗余和查询性能 3NF检查属性的独立性 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,809
精华内容 8,323
关键字:

数据库范式优点