数据库范式

数据库设计之 ER图、三大范式

拟墨画扇 提交于 2020-03-26 17:00:19
ER图 Entity Relationship,实体关系图。 1、先画出所有实体,矩形圈出来 2、再画出每个实体的属性,椭圆圈出来,实体、属性之前用实线连接。为了方便找出主键,作为主键的属性可以画一条下划线。 3、标注实体之间的关联关系:一对一(1,1)、一对多(1,n),多对多(m,n)。关系用菱形表示,并在菱形2边的线上标上1、m、n这些表示2个实体之间关联关系的字符。 关联关系: 一对一,一个人只对应一张身份证,一张身份证也只对应一个人。(2个一对一) 一对多,一个用户可以拥有多个订单,一个订单只能属于一个用户。(1个一对一、1个一对多) 多对多,一个老师可以教多个学生,一个学生可以有多个老师。(2个一对多) 比如实体A、B,先把A作为1,看B是1还是多;再把B作为1,看A是1还是多。 如果2个都是一对一,那A、B就是一对一; 如果1个一对一、1个一对多,那A、B是一对多; 如果2个都是一对多,那A、B就是多对多。 数据库三大范式 数据库有8种范式(Normal Form),通常只用到前3种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)。 1NF 属性的原子性(不可再分) 数据库中的每一个字段都要是不可再分隔的基本 2NF 属性完全依赖于主键 一张表中的每一条记录都要是可区分的,只通过主键来区分,所以一张表必须要有一个unique字段。

数据库3大范式

让人想犯罪 __ 提交于 2020-03-21 18:15:29
第一范式:每个列不可拆分 第二范式:在第一范式上,非主键列完全依赖主键,而不能依赖主键一部分 第三范式:在第二范式上,非主键列只能依赖主键,不依赖其他非主键 设计数据库结构,尽量遵守3范式。考虑性能等问题,可以不严格遵守。 来源: https://www.cnblogs.com/ivy-xu/p/12540145.html

数据库设计范式

北慕城南 提交于 2020-03-19 14:03:46
1. 数据库设计范式概述   在设计数据库时,要遵循的规范就是设计范式。   设计关系型数据库时,要遵循不同的规范,设计出合理的数据库。   目前设计范式有第一范式(1NF)到第六范式(6NF)六个等级的范式,每个范式都是呈递次规范,要做到下一范式需要先实现上一级范式(就像俄罗斯套娃似的,虽然这么比喻不是很恰当)。   主流的是第一范式、第二范式、第三范式,只要实现了前三个范式,基本上可以称得上是一个合理、高效且安全的数据库。因为后三种范式较为严苛,故暂不讨论。 2. 第一范式   (1) 要求   1) 第一范式是关系型数据库的基础,只要是不符合第一范式,就称不上关系型数据库。   2) 第一范式的要求是,每一列的属性都是不可分割的基本数据项, 表中的属性不能有可以拆分的属性 。如果出现重复的属性,就需要重新定义一个新的实体,新的实体由重复的属性构成。   3) 总而言之,第一范式就是禁止重复的列存在,一个实体的数据在表中只能出现一次。   (2) 缺陷   1) 存在严重的数据冗余(复用性低,不知道比喻的合不合适)。   2) 部分属性要加入新的数据,但又无法构成一个实体时无法增加。   3) 删除一个实体可能导致其他属性的丢失。 3. 第二范式   (1) 要求   1) 第二范式是基于第一范式的规范。   2) 要求数据库表中的每个实例或行必须可以被唯一地区分。要

三大范式

为君一笑 提交于 2020-03-19 12:57:43
一: 引言 作为一个数据库的学习者,搞懂关系数据库的三大范式是很有用的。然而教科书上有关数据库范式的介绍都是采用学术性的定义,语法羞涩,让人难懂,故写下自己对数据库范式的理解,给初学者提供帮助,也备日后查看。 本文不介绍规范化程度高于3NF的范式,因为其在实际应用中基本不会用到,原因也是很明显的(查询代价变大),因此,对于很多大型复杂的系统,其数据库设计都没有遵循所谓的范式,这也是为什么会出现所谓的逆规范化,好了,进入正题吧。 二: 范式介绍 a:第零范式 第零范式就是指没有使用任何范式的设计,其添加数据的行为非常诡异,看看下表便知: 假设一个学生学习了三门课程,每门课程都有成绩,那么,采用第零范式的设计将会是如下情况 表a_0 这样的话,会使得往表中添加数据变得非常麻烦,每次添加一个新的数据,都要添加相应的字段,而且,因为表中其他的记录可能不需要这么多字段,因此会浪费 很多空间。如表a_1所示。 表a_1 由此可以看出,不对数据库任用任何范式是非常愚蠢的,因为不仅会产生大量无用的表字段,而且会使得表结构非常难以维护。由此,引出第一范式的介绍 b: 第一范式 第一范式就是在第零范式的基础上进行的改进,网上有很多人认为,所谓第一范式就是指表中的所有字段都是原子的、不可再分的,我个人认为此种理解也是正确的,原因不解释,我对第一范式的理解是,将    第零范式中重复的字段抽取出来

关于MySQL的范式

ⅰ亾dé卋堺 提交于 2020-03-17 07:21:39
1、什么是范式? 范式就是在设计数据库表的时候,可以遵循的规范。范式分为:第一范式、第二范式、第三范式、其他更高级的范式。 2、第一范式(1NF) 是指在关系模式数据中,要求所有的字段都应该具有原子性,不可再分。如下图所示: 每个学生的相关信息都不能再拆分。但是当修改张三到MySQLo2的时候,因为有两个张三,不知道具体该是那个张三。 缺点:不能唯一的标识某一条记录 3、第二范式(2NF) 第二范式要求数据库表中的每一个实例或记录必须可以被唯一的区分,简而言之就是给表一个主键字段。 第二范式是为了解决第一范式的缺点应运而生的。即满足第二范式必须先满足第一范式。 缺点:对重复存储数据不做约束(即班级、班主任) 4、第三范式(3NF) 第三范式要求一个表中不能有关联属性信息,数据与数据的关联性通过主外键相联系。 第三范式是第二范式的一个子集。即满足第三范式必须先满足第二范式。 如下图:以下学生都在同一个班级里,都是同一个班主任。 如下图:通过外键将学生信息和班级信息联系在一起。( 外键的值:是另一个表的主键 ) 练习题: 1、下面创建学生表student的SQL语句,正确的是? A create table student( id int primary key auto_increment,name varchar(10), sex tinyint(1) default 1 ) B

数据库三大范式的理解

不羁的心 提交于 2020-03-15 10:18:49
转自( http://www.cnblogs.com/ulli/archive/2012/02/26/2367910.html ) 一: 引言 作为一个数据库的学习者,搞懂关系数据库的三大范式是很有用的。然而教科书上有关数据库范式的介绍都是采用学术性的定义,语法羞涩,让人难懂,故写下自己对数据库范式的理解,给初学者提供帮助,也备日后查看。 本文不介绍规范化程度高于3NF的范式,因为其在实际应用中基本不会用到,原因也是很明显的(查询代价变大),因此,对于很多大型复杂的系统,其数据库设计都没有遵循所谓的范式,这也是为什么会出现所谓的逆规范化,好了,进入正题吧。 二: 范式介绍 a:第零范式 第零范式就是指没有使用任何范式的设计,其添加数据的行为非常诡异,看看下表便知: 假设一个学生学习了三门课程,每门课程都有成绩,那么,采用第零范式的设计将会是如下情况 表a_0 这样的话,会使得往表中添加数据变得非常麻烦,每次添加一个新的数据,都要添加相应的字段,而且,因为表中其他的记录可能不需要这么多字段,因此会浪费 很多空间。如表a_1所示。 表a_1 由此可以看出,不对数据库任用任何范式是非常愚蠢的,因为不仅会产生大量无用的表字段,而且会使得表结构非常难以维护。由此,引出第一范式的介绍 b: 第一范式 第一范式就是在第零范式的基础上进行的改进,网上有很多人认为

数据库表结构设计方法及原则

偶尔善良 提交于 2020-03-12 15:27:33
http://www.cnblogs.com/RunForLove/p/5693986.html 数据库设计的三大范式:为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。   在实际开发中最为常见的设计范式有三个:第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式;第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中;第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。总结一下,就是: 第一范式(确保每列保持原子性); 第二范式(确保表中的每列都和主键相关); 第三范式(确保每列都和主键列直接相关,而不是间接相关)。   在目前的企业信息系统中,数据库还是最佳的数据存储方式,虽然已经有很多的书籍在指导我们进行数据库设计,但应该那种方式是设计数据库的表结构的最好方法、设计时应遵从什么样的原则、四个范式如何能够用一种方式达到顺畅的应用等是我一直在思考和总结的问题

项目小结之数据库设计

為{幸葍}努か 提交于 2020-03-11 21:40:48
最近做了一个小项目完整的数据库设计,想总结一些设计上的所得,希望大家多多指教。 有时一个项目,普通程序员一般不会去接触数据库设计,一般都有专业的DBA或是老程序员去设计,下面是我推测的几点可能原因: 1:新手对项目了解不深,正好这是老鸟的长处。 2:新手对局部的关注往往大于整体,很难考虑的特别周全。 3:数据库设计的好坏在某种程度上直接影响项目的复杂度以及性能。 第一:我们要知道什么是范式 ,为什么说到数据库设计总要提到一个名词:范式。范式:符合某一种级别的关系模式的集合。设计数据库必须遵循一定的规则,在关系数据库中,这种规则就是范式。 第二:范式的分类。 关系数据库中的关系必须满足一定的要求,目前关系数据库有六种范式:第一范式、第二范式、第三范式、第四范式、第五范式和第六范式。满足最低要求的是第一范式,其余范式以次类推。这么多的分类并不一定要求全部满足,平时我们通常是达到第三范式就行。 第三:范式的作用? 1:优点:是将其转化为一些表的过程,这种方法可以使从数据库得到的结果更加明确。 2:缺点:可能使数据库产生重复数据,从而导致创建多余的表。 3:是在识别数据库中的数据元素、关系,以及定义所需的表和各表中的项目这些初始工作之后的一个细化的过程。 4:设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,也不会发生插入、删除和更新操作异常

MySQL——三范式示例

六眼飞鱼酱① 提交于 2020-03-10 16:38:02
数据库范例 创建一个小型数据库存放关于书的信息:书名、出版商、作者、出版日期 一范式 内容相似的数据列必须消除(消除的方式是再创建一个数据表来存放他们) 必须为每一组相关数据分别创建一个数据表 每条数据记录必须用一个主键来标识 应用第1条和第3条,可得到如下数据表 问题:一本图书每增加一位作者,title、pubName、year就必须重复一次 三、二范式 数据表里的内容重复出现,就意味着必须将表拆分成多个子表 拆分形成的数据表必须用外键关联起来 问题:authName字段数据还有重复 解决方案:对author表进行拆分,把titleID列拆分出去,创建第3个数据库表存放那些图书有哪些作者的信息 四、三范式 与主键没有关系的数据列都必须消除 本示例中的title表中的pubName列与图书的名字并没有必然的联系 来源: oschina 链接: https://my.oschina.net/u/2679804/blog/669332

数据库的三范式

与世无争的帅哥 提交于 2020-03-10 15:08:18
范式:符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度。 简单来说可以把它粗略的理解为一张数据表的表结构所符合的某种设计标准的级别。就像英语46级,相对代表了英语水平的高低。 满足这些规范的数据库是简洁的,结构明晰的,同时,不会发生增删改操作异常。 数据库范式分为 1NF 2NF 3NF BCNF 4NF 5NF一般我们在设计数据库结构的时候最多只要满足到BCNF就可以了,符合高一级的范式必须符合第一级的范式。 一般设计数据库表的时候符合第三范式就很不错了。 1NF的定义:符合1NF的关系中的每个属性都不可以再分。 在使用数据库管理系统的时候比如mysql,SqlServer等创建的数据表都满足1NF,如果不满足这个范式,是不能创建成功数据表的。属性不可再分割的意思是每一个字段都是最小的,不包含其他字段。不重复,原子性。 例如:字段:姓名 不包含其他字段:年龄。 注意:这里说的是字段而不是字段的值! 下面是一个 学生表! 这种就是错误的,性别不能包含班级,科目,老师 下面这种才是正确的1NF 1NF存在的问题: 数据冗余,插入异常,删除异常,修改异常的问题。 数据冗余:张三的很多信息都要重复很多次 插入异常:如果要新建一个班级,并且有班级主任。但是因为还没有学生开始学习,所以主键(id就是学号)是空的,肯定是不能插入的。 删除异常