什么是反范式
发布网友
发布时间:2022-04-23 05:40
我来回答
共3个回答
懂视网
时间:2022-04-07 22:56
范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法。数据库的设计范式是数据库设计所需要满足的规范。只有理解数据库的设计范式,才能设计出高效率、优雅的数据库,否则可能会设计出错误的数据库。
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,还又称完美范式)。满足最低要求的叫第一范式,简称1NF。在第一范式基础上进一步满足一些要求的为第二范
式,简称2NF。其余依此类推。各种范式呈递次规范,越高的范式数据库冗余越小。通常所用到的只是前三个范式,即:第一范式(1NF),第二范式(2NF),第三范式(3NF)。
第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列。简而言之,第一范式就是无重复的列。
第二范式(2NF):首先要满足它是1NF,另外还需要包含两部分内容:一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。
即要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性。
第三范式(3NF):在1NF基础上,任何非主属性不依赖于其它非主属性[在2NF基础上消除传递依赖]。第三范式(3NF)是第二范式(2NF)的一个子集,即满足第三范式(3NF)必须满足第二范式(2NF)。
简而言之,第三范式(3NF)要求一个关系中不包含已在其它关系已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性,也就是在满足2NF的基础上,任何非主属性不得传递依赖于主属性。
关于范式的讨论
第二范式和第三范式如何区别?
第二范式:非主键列是否依赖主键(包括一列通过某一列间接依赖主键),要是有依赖关系的就是第二范式;
第三范式:非主键列是否是直接依赖主键,不能是那种通过传递关系的依赖的。要是符合这种就是第三范式;
使用范式有哪些优点和缺点?
范式可以避免数据冗余,减少数据库的空间,减轻维护数据完整性的麻烦。
范式再给我们带来的上面的好处时,同时也伴随着一些不好的地方:按照范式的规范设计出来的表,等级越高的范式设计出来的表越多。
如第一范式可能设计出来的表可能只有一张表而已,再按照第二范式去设计这张表时就可能出来两张或更多张表,如果再按第三范式或更高的范式去设计这张表会出现更多比第二范式多的表。
表的数量越多,当我们去查询一些数据,必然要去多表中去查询数据,这样查询的时间要比在一张表中查询中所用的时间要高很多。也就是说我们所用的范式越高,对数据操作的性能越低。
所以我们在利用范式设计表的时候,要根据具体的需求再去权衡是否使用更高范式去设计表。在一般的项目中,我们用的最多也就是第三范式,第三范式也就可以满足我们的项目需求,性能好而且方便管理数据;
当我们的业务所涉及的表非常多,经常会有多表发生关系,并且我们对表的操作要时间上要尽量的快,这时可以考虑我们使用“反范式”。
关于反范式
不满足范式的模型,就是反范式模型。
反范式跟范式所要求的正好相反,在反范式的设计模式,我们可以允许适当的数据的冗余,用这个冗余去取操作数据时间的缩短。本质上就是用空间来换取时间,把数据冗余在多个表中,当查询时可以减少或者是避免表之间的关联;
RDBMS模型设计过程中,常常使用范式约束我们的模型,但在NOSQL模型中则大量采用反范式。
范式和反范式的对比
范式化模型 |
数据没有冗余,更新容易 |
当表的数量比较多,
查询设计需要很多关联模型(join)时,会导致查询性能低下
|
反范式化模型 |
数据冗余将带来很好的读取性能
(因为不需要join很多表,而且通常反范式模型很少做更新操作)
|
需要维护冗余数据,从目前NoSQL的发展可以看到,
对磁盘空间的消耗是可以接受的
|
参考: 百度百科·数据库范式
关系数据库的范式和反范式
数据模型的范式化和反范式化
关系数据库的范式和反范式设计
标签:
热心网友
时间:2022-04-07 20:04
反范式是通过增加冗余数据或数据分组来提高数据库读性能的过程。在某些情况下, 反范式有助于掩盖关系型数据库软件的低效。关系型的范式数据库即使做过优化, 也常常会带来沉重的访问负载。
数据库的范式设计会存储不同但相关的信息在不同的逻辑表, 如果这些表的存储在物理上也是分离的,那么从几个表中完成数据库的查询可能就会很慢 (比如JOIN操作)。如果JOIN操作的表很多,那么可能会慢得离谱。 有两个办法可以解决这个问题。首选的方法是使逻辑上的设计遵循范式, 但允许数据库管理系统(DBMS)在磁盘上存储额外的冗余信息来加快查询响应。 在这种情况下,DBMS还要保证冗余副本与原始数据的一致性。 这种方法通常在SQL中以索引视图(微软的SQL Server)或物化视图(Oracle)实现。 视图将信息表示为方便查询的格式,索引确保视图上的查询进行了优化。
更常见的做法是对数据做反范式设计。这种方法同样能提高查询响应速度, 但此时不再是DBMS而是数据库设计者去保证数据的一致性。 数据库设计者们通过在数据库中创建规则来保证数据的一致性,这些规则叫约束。 这样一来,数据库设计的逻辑复杂度就增加了,同时额外约束的复杂度也增加了, 这使该方法变得危险。此外,“约束”在加快读操作(SELECT)的同时,减慢了写操作 (INSERT, UPDATE和DELETE)。这意味着一个反范式设计的数据库, 可能比它的范式版本有着更差的写性能。
反范式数据模型与没有范式化的数据模型不同。 只有在范式化已经达到一定的满意水平并且所需的约束和规则都已经建立起来, 才进行反范式化。例如,所有的关系都属于第三范式, 连接的关系和多值依赖得到了妥善处理。
热心网友
时间:2022-04-07 21:22
数据库设计有六种范式,但是由于业务的特殊性,有时设计时,可以违反这六种范式,称为反范式设计
什么是反范式
反范式是通过增加冗余数据或数据分组来提高数据库读性能的过程。在某些情况下, 反范式有助于掩盖关系型数据库软件的低效,关系型的范式数据库即使做过优化, 也常常会带来沉重的访问负载。数据库的范式设计会存储不同但相关的信息在不同的逻辑表, 如果这些表的存储在物理上也是分离的,那么从几个表中...
范式和反范式是什么意思,数据库相关问题。
数据库设计的一些规则,反范式就是不遵循那些规则。像数据库范式中的字段冗余就是反范式
数据库反范式化表设计和表的垂直和水平拆分什么意思?
为了维持范式,会降低数据库的查询性能,大量冗余信息等。在实际生产环境,很多情况下,不能去实现这种范式,所以要违反范式的定义,就是反范式数据库设计。范式只是一个理想化状态,仅用于关系型数据库。
数据仓库和数据库有什么区别?
2. 数据仓库中数据通常来源于多个不同的业务系统数据库(存储多年数据),数据量较大,一般做为企业数据中心用。3. 数据库一般存储在线交易数据,数据仓库存储的一般是历史数据。4. 数据库设计是尽量避免冗余,一般采用符合范式的规则来设计,数据仓库在设计是有意引入冗余,采用反范式的方式来设计。5. ...
数据库与数据仓库的本质差别是什么
2、数据库通常追求交易的速度,交易完整性,数据的一致性等,在数据库模型上主要遵从范式模型(1NF,2NF,3NF等),从而尽可能减少数据冗余,保证引用完整性;而数据仓库强调数据分析的效率,复杂查询的速度,数据之间的相关性分析,所以在数据库模型上,数据仓库喜欢使用多维模型,从而提高数据分析的效率。3...
什么是第二范式?第三范式的定义是什么?
提高了数据的一致性和完整性。此外,第三范式也可以提高查询的效率,避免了不必要的关联操作。需要注意的是,第三范式并非绝对必须满足的规范化要求,而是一种设计准则。在某些情况下,为了满足特定的业务需求或性能要求,可能会放宽对第三范式的要求,例如采用第二范式或反范式设计。
数据仓库在数据库里处于什么层级
简而言之,数据库是面向事务的设计,数据仓库是面向主题设计的。数据库一般存储在线交易数据,数据仓库存储的一般是历史数据。数据库设计是尽量避免冗余,一般采用符合范式的规则来设计,数据仓库在设计是有意引入冗余,采用反范式的方式来设计。数据库是为捕获数据而设计,数据仓库是为分析数据而设计,它的两...
数据仓库是什么意思?
也就是数据仓库中一般有大量的查询操作,但修改和删除操作很少,通常只需要定期的加载、刷新。◆反映历史变化:数据仓库中的数据通常包含历史信息,系统记录了企业从过去某一时点(如开始应用数据仓库的时点)到目前的各个阶段的信息,通过这些信息,可以对企业的发展历程和未来趋势做出定量分析和预测。
数据库水平分库和垂直分库有什么区别
2016-08-03 数据库反范式化表设计和表的垂直和水平拆分什么意思? 1 2016-08-13 数据库为什么要分库分表 16 2015-04-02 数据库水平垂直分表具体什么意思? 5 2012-08-27 数据库分库和数据库分离是一个意思吗?什么情况下用到分库或分离... 2014-10-24 数据库为什么要分库分表 2013-11-08 mysql数据...
什么是反范式
反范式是通过增加冗余数据或数据分组来提高数据库读性能的过程。在某些情况下, 反范式有助于掩盖关系型数据库软件的低效,关系型的范式数据库即使做过优化, 也常常会带来沉重的访问负载。数据库的范式设计会存储不同但相关的信息在不同的逻辑表, 如果这些表的存储在物理上也是分离的,那么从几个表中...