数据库范式

数据建模:三大范式和反范式

匆匆过客 提交于 2020-03-09 09:29:57
范式是数据库规范化的⼀个⼿段,是数据库设计中的⼀系列原理和技术,⽤于减少数据库中的数据冗余,并增进数据的⼀致性。 数据规范化通常是将⼤表分成较⼩的表,并且定义它们之间的关系。这样做的⽬的是为了避免冗余存放数据,并确保数据的⼀致性。添加、删除和修改数据等操作可能需要修改多个表,但只需要修改⼀个地⽅即可保证所有表中相关数据的⼀致性。由于数据分布在多个表之间,因此检索信息可能需要根据表之间的关系联合查询多个表。 数据规范化的实质是简单写、复杂读。写⼊操作⽐较简单,对于不同的信息,分别修改不同的表即可;⽽读取数据则相对复杂,检索数据的时候,可能需要编写复杂的SQL来联合查询多个表。 第一范式(1NF) 第⼀范式是指数据库表的每⼀列(属性)都是不可分割的基本数据项,这就要求数据库的 每⼀列都只能存放单⼀值 ,即实体中的某个属性不能有多个值或不能有重复的属性。 第⼀范式是对关系模式的基本要求。 关键点: 每⼀列都只能存放单⼀值 例如:我们开发微博时的 User 表和微博表,⼀个⽤户可以发表多个微博,但设计时需要将⽤户 数据和微博数据单独存放。 第二范式(2NF) 第⼆范式(2NF)是在第⼀范式(1NF)的基础上建⽴起来的,⼀个数据表符合第⼆范式的前提是该数据表符合第⼀范式。 它的规则是要求数据表⾥的所有数据都要和该数据表的主键有完全相依的关系; 如果有哪些数据只和主键的⼀部分有关的话

Mongodb的性能优化问题

人走茶凉 提交于 2020-03-06 22:02:09
摘要 数据库性能对软件整体性能有着至关重要的影响,对于Mongodb数据库常用的性能优化方法主要有: 范式化与反范式化; 填充因子的使用; 索引的使用; 一. 范式化与反范式化 范式是为了消除重复数据减少冗余数据,从而让数据库内的数据更好的组织,让磁盘空间得到更有效利用的一种标准化标准,满足高等级的范式的先决条件是满足低等级范式。在数据库设计阶段,明确集合的用途是对mongodb数据库性能调优非常重要的一步。根据集合中数据最常用的操作,对于频繁更新和频繁查询的集合,我们最需要关注的重点是他们的范式化程度。 1.1 范式化 1.1.1 范式化的优点: 范式化的数据库更新起来更加快; 范式化之后,只有很少的重复数据,只需要修改更少的数据; 范式化的表更小,可以在内存中执行; 很少的冗余数据,在查询的时候需要更少的distinct或者group by语句。 1.1.2 范式化的缺点: 范式化的表,在查询的时候经常需要很多的关联,因为单独一个表内不存在冗余和重复数据。这导致,稍微复杂一些的查询语句在查询范式的schema上都可能需要较多次的关联。这会增加让查询的代价,也可能使一些索引策略无效。因为范式化将列存放在不同的表中,而这些列在一个表中本可以属于同一个索引。 1.1.3 范式化设计的例子: 以存储一篇图书及其作者为例,作者的信息包括作者的姓名,年龄,国籍。使用范式化的设计如下: {

数据库的三范式是什么?

北慕城南 提交于 2020-02-28 15:24:12
第一范式:强调的是列的原子性,就是列不能够再分成其他几列; 第二范式:一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖主键的一部分; 第三范式:任何非主属性不依赖于其他非主属性。 来源: CSDN 作者: 能解决一切的答案 链接: https://blog.csdn.net/weixin_45022376/article/details/104551142

数据库设计范式

本秂侑毒 提交于 2020-02-28 10:53:59
数据库设计范式是一个很重要的概念,但是这个重要程度只是适合于参考。使用数据库设计范式,可以让数据表更好的进行数据的保存,因为在合理的设计,如果数据量一大也肯定会存在性能上的问题,所以在开发中,唯一可以称为设计的宝典——设计的时候尽量避免日后的程序出现多表关联查询。 第一范式 所谓的第一范式指的是数据表中的数据列不可再分。例如,现有如下一张表: CREATE TABLE member( mid NUMBER PRIMARY KEY, name VARCHAR2(200) NOT NULL, contact VARCHAR2(200) ) 这个时候设计的就不合理,因为联系方式由多种数据所组成(电话、地址、email、手机、邮政编码等),所以这种设计是不符合第一范式的,现在可以修改设计如下: CREATE TABLE member( mid NUMBER PRIMARY KEY, name VARCHAR2(200) NOT NULL, address VARCHAR2(200), zipcode VARCHAR2(6), mobile VARCHAR2(20), tel VARCHAR2(20) ) 但是在这里有两点需要说明。 1、关于姓名,在国外的表设计姓名也分为姓和名两类,但是在中国就是姓名保存。 2、关于生日,生日有专门的数据类型(DATE),所以不能将其设置为生日年、生日月

数据库设计三大范式和五大约束

自闭症网瘾萝莉.ら 提交于 2020-02-28 06:50:01
来源: https://www.cnblogs.com/zhouguowei/p/9268788.html 一、三大范式: 什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范式。范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法,以下就是对这三个范式的基本介绍: 第一范式(1NF): 1、数据表中的每一列(字段),必须是不可拆分的最小单元,也就是确保每一列的原子性。满足第一范式是关系模式规范化的最低要求,否则,将有很多基本操作在这样的关系模式中实现不了。 如果需求知道那个省那个市并按其分类,那么显然第一个表格是不容易满足需求的,也不符合第一范式。 2、两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据。 显然第一个表结构不但不能满足足够多物品的要求,还会在物品少时产生冗余。也是不符合第一范式的。 第二范式(2NF): 满足1NF后要求表中的所有列,每一行的数据只能与其中一列相关,即一行数据只做一件事。只要数据列中出现数据重复,就要把表拆分开来。 一个人同时订几个房间,就会出来一个订单号多条数据,这样子联系人都是重复的,就会造成数据冗余。我们应该把他拆开来。

关系模式范式分解教程 3NF与BCNF口诀

廉价感情. 提交于 2020-02-25 16:19:18
https://blog.csdn.net/sumaliqinghua/article/details/86246762 【通俗易懂】关系模式范式分解教程 3NF与BCNF口诀!小白也能看懂 原创置顶 沃兹基.硕德 最后发布于2019-01-10 18:26:14 阅读数 13082 收藏 展开 本来是为了复习数据库期末考试,结果找了一圈都没有发现比较好的解释,通过查阅资料和总结,为大家提供通俗易懂的解法,一听就会!并且配有速记口诀!介是你没有玩过的船新版本包含最小依赖集求法候选码求法 在模式分解之前,首先对于1NF,2NF,3NF,BCNF做一个简明扼要的介绍。 1NF是指数据库表的每一列都是不可分割的基本数据项,即实体中的某个属性不能有多个值或者不能有重复的属性。 2NF要求属性完全依赖于主键,不能存在仅依赖主关键字一部分的属性。 3NF要求每一个非主属性既不部分依赖于码也不传递依赖于码。 BCNF消除了主属性对候选码的部分和传递函数依赖。 注:1.相对于BCNF,3NF允许存在主属性对候选码的传递依赖和部分依赖。 2.BCNF比较抽象,略作解释:在学生信息表里,学号是一个候选码,学号可确定学生姓名;(班级,学生姓名)也是一组候选码,有(班级,学生姓名)->学号,因此在主属性间形成了传递依赖。 3.若对概念不清晰,关于码、候选码、主属性、非主属性的解释可参看: https:/

高性能MySQL 第四章

拥有回忆 提交于 2020-02-16 22:03:23
MySQL支持的数据类型非常多,选择正确的数据类型对于获得高性能至关重要。 不管存储哪种类型的数据,下面几个简单的原则都有助于做出更好的选择。 1、尽量避免过度设计,例如会导致极其复杂查询的schema设计,或者有很多列的表设计(很多的意思是介于有点多和非常多之间)。 2、使用小而简单的合适数据类型,除非真实数据模型中有确切的需要,否则应该尽可能地避免使用NULL值。 3、尽量使用相同的数据类型存储相似或相关的值,尤其是要在关联条件中使用的列。注意可变长字符串,其在临时表和排序时可能导致悲观的按最大长度分配内存。 4、尽量使用整型定义标识列。 5、避免使用MySQL已经遗弃的特性,例如指定浮点数的精度,或者整数的显示宽度。 6、小心使用ENUM和SET。虽然它们用起来很方便,但是不要滥用,否则有时候会变成陷阱。最好避免使用BIT。 范式及其优缺点 在范式化的数据库中,每个事实数据会出现并且只出现一次 优点: 范式化的更新操作通常比反范式话要快 当数据较好的范式化时,就只有很少或者没有重复数据,所以只需要修改更少的数据 范式化的表通常更小,可以更好地放在内存里,所以执行操作会更快 很少有多余的数据意味着检索列表数据时更少需要 DISTINCT 或者 GROUP BY 语句 缺点: 表需要关联 反范式及其优缺点 在范式化的数据库中,信息是冗余的,可能会存储在多个地方 优点:

数据库设计的三大范式

只愿长相守 提交于 2020-02-15 17:37:51
转载自: http://www.cnblogs.com/zhhh/archive/2011/04/21/2023355.html 。 三大范式一直没有记住,看了这个有了理解!挺好的记着,以后忘了,可以再看看! 为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。 在实际开发中最为常见的设计范式有三个: 1 .第一范式 第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。 第一范式的合理遵循需要根据系统的实际需求来定。比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成一个数据库表的字段就行。但是如果系统经常会访问“地址”属性中的“城市”部分,那么就非要将“地址”这个属性重新拆分为省份、城市、详细地址等多个部分进行存储,这样在对地址中某一部分操作的时候将非常方便。这样设计才算满足了数据库的第一范式,如下表所示。 用户信息表 编号 姓名 性别 年龄 联系电话 省份 城市 详细地址 1 张红欣 男 26 0378-23459876 河南 开封 朝阳区新华路23号 2 李四平 女 32 0751-65432584 广州 广东 白云区天明路148号 3 刘志国 男 21 0371

数据库 依赖和范式

非 Y 不嫁゛ 提交于 2020-02-11 12:37:32
https://www.cnblogs.com/Stephen-Jixing/p/9888725.html 数据库范式: 第一范式:属性不可分,只要是关系数据库就符合第一范式 第二范式:符合第一范式,非主属性完全依赖于候选码(候选码中选出一个主码) 第三范式:符合第二范式,且不存在传递依赖 BC范式:符合第三范式,主属性不依赖于主属性 BC范式既检查非主属性,又检查主属性。当只检查非主属性时,就成了第三范式。 满足BC范式的关系都必然满足第三范式。 还可以这么说:若一个关系达到了第三范式,并且它只有一个候选码,或者它的每个候选码都是单属性,则该关系自然达到BC范式。 第四范式:要求把同一表内的多对多关系删除。 第五范式:从最终结构重新建立原始结构。 来源: CSDN 作者: 一个程序员的成长之路 链接: https://blog.csdn.net/zhi258wei/article/details/104258946