数据库三范式

1NF:字段不可分;
2NF:有主键,非主键字段依赖主键;
3NF:非主键字段不能相互依赖;
解释:
1NF:原子性 字段不可再分,否则就不是关系数据库;
2NF:唯一性 一个表只说明一个事物;
3NF:每列都与主键有直接关系,不存在传递依赖;

不符合第一范式的例子(关系数据库中create不出这样的表):
表:字段1, 字段2(字段2.1, 字段2.2), 字段3 ......
存在的问题: 因为设计不出这样的表, 所以没有问题;

不符合第二范式的例子:
表:学号, 姓名, 年龄, 课程名称, 成绩, 学分;
这个表明显说明了两个事务:学生信息, 课程信息;

存在问题:
数据冗余,每条记录都含有相同信息;
删除异常:删除所有学生成绩,就把课程信息全删除了;
插入异常:学生未选课,无法记录进数据库;
更新异常:调整课程学分,所有行都调整。

修正:
学生:Student(学号, 姓名, 年龄);
课程:Course(课程名称, 学分);
选课关系:SelectCourse(学号, 课程名称, 成绩)。
满足第2范式只消除了插入异常。

不符合第三范式的例子:
学号, 姓名, 年龄, 所在学院, 学院联系电话,关键字为单一关键字"学号";
存在依赖传递: (学号) → (所在学院) → (学院地点, 学院电话)

存在问题:
数据冗余:有重复值;
更新异常:有重复的冗余信息,修改时需要同时修改多条记录,否则会出现数据不一致的情况
删除异常

修正:
学生:(学号, 姓名, 年龄, 所在学院);
学院:(学院, 地点, 电话)。

时间: 2024-10-10 07:09:58

数据库三范式的相关文章

戏谈数据库三范式

数据库三范式想必大家并不陌生,官方的解释很抽象,初学者比较难理解.对于这块知识,我是看了会,会了忘,忘了再看.每当别人问我的时候,必须先看看教材,回顾一段时间才能理清. 为什么当别人提问时不能立马把三范式的经典思想说出来呢?通过听米老师的"如何高效学习"这堂课,我发现原因是我自己没有融入到三范式中,三范式没有和自己发生关系.下面,我用三个有趣的小故事帮助大家快速.深刻的理解三范式的含义. 第一范式,官方解释:关系模式R的每个关系r的属性值都是不可分的原子值.这个官方解释还不算太难,比如

数据库三范式是什么?

第一范式(1NF):字段具有原子性,不可再分.所有关系型数据库系统都满足第一范式) 数据库表中的字段都是单一属性的,不可再分.例如,姓名字段,其中的姓和名必须作为一个整体,无法区分哪部分是姓,哪部分是名,如果要区分出姓和名,必须设计成两个独立的字段. 第二范式(2NF): 第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF). 要求数据库表中的每个实例或行必须可以被惟一地区分.通常需要为表加上一个列,以存储各个实例的惟一标识.这个惟一属

秒懂数据库三范式

懂得数据库范式,对于设计出一个合理的数据库有很大的帮助.本文根据自己对数据库范式的理解,结合具体的例子,尝试着用通俗易懂的语言讲明白数据库三范式. 第一范式(列不可拆分) 如果数据库中所有的字段值都是不可拆分的原子值,那么就满足第一范式了.简单点说就是不能有表中表,所以关系数据库都满足第一范式.例子略. 第二范式(完全依赖) 第二范式是在第一范式的基础上,保证所有非主键都依赖于主键,对于联合主键,非主键得完全依赖(也就是说不能依赖于联合主键的一部分). 比如要设计一个订单信息表,因为订单中可能会

数据库三范式 无重复列 完全依赖主键 属性不依赖非主属性

细说数据库三范式 2.1 第一范式(1NF)无重复的列 第一范式(1NF)中数据库表的每一列都是不可分割的基本数据项       同一列中不能有多个值       即实体中的某个属性不能有多个值或者不能有重复的属性.       简而言之,第一范式就是无重复的列. 在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库. 2.2 第二范式(2NF)属性完全依赖于主键[消除部分子函数依赖] 满足第二范式(2NF)必须先满足第一范式(1NF

数据库三范式的理解

画好e-r图,简单的设计好表结构以后,就需要进行三范式检验. 第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解: 即表中所有字段仅包含单值.(反例,用户表中一个人可能有多个银行账户,多个值存储同一单元,违反1NF).第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性: 要求数据表中每个记录或实例需要唯一区分(引入id),要求实体属性完全由主键决定,而且是完全依赖,即如果主键有2个字段,仅由其中一个主键决定的就违反2NF.第三范式:3NF是对字段冗余性的约

数据库 三范式

说到软件开发 就不能不说数据库 说到数据库 就不能不说三范式 其实数据库范式一共有六个 除了第一 二 三范式以 外还有第四 第五范式和一个BC范式  在此我们只讨论三范式 有兴趣的朋友可以自己找一些专业的书籍进一步学习 第一范式(1NF) 第一范式是指数据库表的每一列都是不可分割的基本数据项 同一列中不能有多个值 即实体中的某个属性不能有多个 值或者不能有重复的属性  这就是第一范式的基本概念 什么意思呢 举个例子吧 在一个表里有一个"电话"字段 其值既有手机号 又有座机号 那么 这样

数据库三范式的简单理解

数据库范式 范式的级别 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小. 目前关系数据库有六种范式:第一范式(1NF).第二范式(2NF).第三范式(3NF).巴斯-科德范式(BCNF).第四范式(4NF)和第五范式(5NF,又称完美范式). 范式越高,冗余最低,一般到三范式,再往上,表越多,可能导致查询效率下降.所以有时为了提高运行效率,可以让数据冗余(反三范式,一般某个数据经常被访问时,比如数据

数据库三范式、事务

三范式 第一范式(1NF) 在一张表中,组成表的每一个属性都是不能再分的属性,如果满足这一规则,则该表符合第一范式.                  表1(不符合)                                                    表2(符合) 表1的Info字段可以再拆分,故不符合1NF:表2所有属性不可再分,符合. 第二范式(2NF) 首先要满足1NF,表中的每一个非主属性必须完全依赖于本表的主键(候选键),而不能是部分依赖.              

数据库---视图,触发器,事务,存储过程 ,函数,流程控制, 索引与慢查询优化,测试索引,数据库三范式(简介)

视图 1.什么是视图 ? 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可 2.为什么要用视图 ? 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何用视图 create view teacher2course as select * from teacher inner join course on teacher.tid = course.teacher_id; 强调 1.在硬盘中,视图只有表结构文件,没有表数据文件 2.视图通常是用于查询,尽量不要修改视图中的数据 drop

数据库三范式详解

范式的概念 为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式.范式是符合某一种设计要求的总结.要想设计一个结构合理的关系型数据库,必须满足一定的范式. 在实际开发中最为常见的设计范式有三个: 1.第一范式(确保每列保持原子性) 第一范式是最基本的范式.如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式. 第一范式的合理遵循需要根据系统的实际需求来定.比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属