转 举例说明数据库设计中的三个范式

RocketMQ 为什么要自己做一个 NameServer ?RocketMQ 5.x 版本中的 proxy、controller 和 container 分别有什么用 ? 1.独立运行的分散结构 2.简化实现,容忍部分数据不一致 Proxy:多语言支持、简化开发 Controller: 提高 Broker 的性能 Container:提高资源利用率,平衡负载 阅读详情

 转自: http://blog.chinaunix.net/space.php?uid=7934175&do=blog&id=3048770

一.范式概述(NF:NormalForm)

数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。

  目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。

 

二.第一范式(1NF)无重复的列

  所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。

说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。

 

三.第二范式(2NF)属性

完全依赖于主键[消除非主属性对主码的部分函数依赖]

 

  第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。例如员工信息表中加上了员工编号(emp_id)列,因为每个员工的员工编号是唯一的,因此每个员工可以被唯一区分。这个唯一属性列被称为主关键字或主键、主码。

第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是属性完全依赖于主键。

 

四.第三范式(3NF)属性

  不依赖于其它非主属性[消除传递依赖]

 

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

 

五.范式应用实例剖析

下面以一个学校的学生系统为例分析说明,这几个范式的应用。首先第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。在当前的任何关系数据库管理系统(DBMS)中,傻瓜也不可能做出不符合第一范式的数据库,因为这些DBMS不允许你把数据库表的一列再分成二列或多列。因此,你想在现有的DBMS中设计出不符合第一范式的数据库都是不可能的。

 

  首先我们确定一下要设计的内容包括那些。学号、学生姓名、年龄、性别、课程、课程学分、系别、学科成绩,系办地址、系办电话等信息。为了简单我们暂时只考虑这些字段信息。我们对于这些信息,说关心的问题有如下几个方面。

  学生有那些基本信息

  学生选了那些课,成绩是什么

  每个课的学分是多少

学生属于那个系,系的基本信息是什么。

 

5.1 第二范式(2NF)实例分析

  首先我们考虑,把所有这些信息放到一个表中(学号,学生姓名、年龄、性别、课程、课程学分、系别、学科成绩,系办地址、系办电话)下面存在如下的依赖关系。

  (学号)→ (姓名, 年龄,性别,系别,系办地址、系办电话)

  (课程名称) → (学分)

(学号,课程)→ (学科成绩)

 

5.1.1 问题分析

因此不满足第二范式的要求,会产生如下问题:

 

数据冗余: 

同一门课程由n个学生选修,"学分"就重复n-1次;同一个学生选修了m门课程,姓名和年龄就重复了m-1次。

 

更新异常:

  1) 若调整了某门课程的学分,数据表中所有行的"学分"值都要更新,否则会出现同一门课程学分不同的情况。

2) 假设要开设一门新的课程,暂时还没有人选修。这样,由于还没有"学号"关键字,课程名称和学分也无法记录入数据库。

 

删除异常 :

假设一批学生已经完成课程的选修,这些选修记录就应该从数据库表中删除。但是,与此同时,课程名称和学分信息也被删除了。很显然,这也会导致插入异常。

 

5.1.2 解决方案

把选课关系表SelectCourse改为如下三个表:

  学生:Student(学号,姓名, 年龄,性别,系别,系办地址、系办电话);

  课程:Course(课程名称, 学分);

选课关系:SelectCourse(学号, 课程名称, 成绩)。

 

5.2 第三范式(3NF)实例分析

接着看上面的学生表Student(学号,姓名, 年龄,性别,系别,系办地址、系办电话),关键字为单一关键字"学号",因为存在如下决定关系:

  (学号)→ (姓名, 年龄,性别,系别,系办地址、系办电话)

  但是还存在下面的决定关系

  (学号) → (所在学院)→(学院地点, 学院电话)

  即存在非关键字段"学院地点"、"学院电话"对关键字段"学号"的传递函数依赖。

  它也会存在数据冗余、更新异常、插入异常和删除异常的情况。


根据第三范式把学生关系表分为如下两个表就可以满足第三范式了:

  学生:(学号, 姓名, 年龄, 性别,系别);

系别:(系别, 系办地址、系办电话)。

 

5.3 总结

  上面的数据库表就是符合I,II,III范式的,消除了数据冗余、更新异常、插入异常和删除异常。

满足范式要求的数据库设计是结构清晰的,同时可避免数据冗余和操作异常。这并意味着不符合范式要求的设计一定是错误的,在数据库表中存在1:1或1:N关系这种较特殊的情况下,合并导致的不符合范式要求反而是合理的。

RC滤波电路实战解析:无源与有源设计的性能对比与应用选择 本文深入解析了RC滤波电路的核心原理,重点对比了无源滤波电路与有源滤波电路的性能差异。文章通过实测波形与仿真数据,详细阐述了两者在带载能力、频率响应精度、噪声特性等方面的优劣,并提供了清晰的应用选择指南,帮助工程师根据信号属性、负载条件和性能要求做出最优设计决策。 阅读详情

相关推荐

手把手教你用TUSB2E22中继器实现eUSB2与USB 2.0互(附实测数据对比)

本文详细介绍了如何利用TUSB2E22中继器实现eUSB2与USB 2.0的高效互,包括技术背景、硬件设计要点、信号完整性测试方法及故障排查策略。通过实测数据对比,展示了TUSB2E22在信号延迟、功耗和眼图性能上的显著优势,为工程师提供了实用的工程方案。

weixin_29199873的博客 247

数据库中各种NF(范式的含义)

定义 1NF(第一范式):每个属性都是原子的,即不可再分解。也就是说,每个属性中都不能包含多个值或重复的组合值。 2NF(第二范式):在满足1NF的基础上,非主属性必须完全依赖于候选码,而不是仅依赖于部分候选码。也就是说,关系模式中每个非主属性都必须与候选码有直接关系,不能通过其他非主属性派生出来。 3NF(第三范式):在满足2NF的基础上,任何非主属性都不能依赖于其他非主属性。也就是说,每个非主属性都应该直接依赖于候选码,而不是依赖于其他非主属性。 BCNF(巴斯-科德范式):在满足

g030603的博客 5372

sec_uid

webcast_uidsec_uid,webcast_uiduid,webcast_uiddy号

m0_56967679的博客 4351

数据库范式详细介绍(1NF,2NF,3NF,BCNF,4NF)

一、基本介绍 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。 目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。 范式

qq_34246965的博客 3万+

[ 数据库原理 ] 数据库范式概念:1NF、2NF、3NF、BCNF详解及其应用总结

1NF:满足原子性,字段不可再分割字段都是单一属性2NF:满足完全依赖,消除部分子函数依赖(列不能混着用)要求我们使用唯一主键3NF:消除非主属性传递依赖非主属性之间不能存在函数依赖BCNF:消除主属性传递依赖主码(主键)之间不存在依赖只要是关系型数据库的表,都满足第一范式。第一范式本质更多的是对关系型数据库的一个限定。第二、第三范式更多的是对数据库表合理设计的一个要求,理解第二、第三范式能够更好的帮助我们设计数据库表。[ 本文作者 ] bluetata。

我在山城重庆,我希望能为这片软件沙漠地带贡献自己的一滴水,Stay tuned! 1万+

关系数据库 范式(NF: Normal Form) 说明

一.范式概述(NF:NormalForm) 数据库设计范式数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。 目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。满足最低要求的范式是第一范...

数据库天地 538

数据库范式讲解(1NF、2NF、3NF、4NF、BCNF)

一、概念     R-关系模式     r-关系     U-属性集     FD-函数依赖     X→Y:"X函数决定Y","Y函数依赖于X"。     A⊆B   A包含于B,A小,B大,B→A      元组:二维表中的行     属性:二维表中的列      超键:能唯一标识元祖的属性集     候选键:不含多余属性的超建     主键:用户选作元组标识的候选键     外键:对于当前模...

0729Liang 7221

【DataBase】数据库范式【看了就有收获,最简单的例子解释】

第二范式(2NF):消除了非主属性对于码【主属性的集合】的部分函数依赖(简单来说:表中的非主属性【姓名】必须完全依赖于主属性【学号】) 名词解释; 码(候选码):就是主属性的集合。 有了码就可以获取到码对应的其他属性【id【主属性】确定--就可以确定 姓名 系名和系主任 (非主属性)。课名【主属性】可以获取分数【非主属性】】 主属性:码里面的属性就是主属性,包括id,课名。 非主属性:不是主属性的就是非主属性,包括姓名和系名和系班主任,分数。 函数依赖:函数y=f(x)代表给定一个x值,y的值也是确

m0_64210833的博客 1万+

mysql之数据库设计三大范式

mysql数据库设计基础之三大范式理解

jia.huang的博客 4498

数据库设计范式举例说明

  前言        数据库课本上都把范式写到五范式了,但是实际应用中,满足三范式已经足够了,五范式太多余了。 三种范式是条件递增的联系(即后一个范式是在前一个条件满足的情况下引入新的条件)。   例如  范式 满足条件 一范式(1NF) 条件a 二范式(2NF) 条件a...

zhen921的博客 1万+

数据库三大范式详解

数据库设计范式数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了大量不需要的冗余信息。   范式说明   1.1 第一范式(1NF)无重复的列       所谓第一范式(1NF)是指数据库表的每一列都是

w__yi的专栏 4万+

数据库范式3NF指什么?

范式面试的时候问的比较多,概念需要了解下: 第一范式(1NF):要求数据库表的每一列都是不可分割的原子数据项。 举例说明: 在上面的表中,“家庭信息”和“学校信息”列均不满足原子性的要求,故不满足第一范式,调整如下: 可见,调整后的每一列都是不可再分的,因此满足第一范式(1NF); 第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数...

记录日常开发过程中遇到的一些问题 4万+

数据库三大范式(图文详解)

范式数据库设计时遵循的一种规范,不同的规范要求遵循不同的范式

爱吃鸡腿的明仔 1万+

数据库设计之三大范式举例说明

范式是一种重要的数据设计原则,通过避免数据冗余、减少更新异常,确保数据的规范化、一致性和效率。通过将非主键字段与主键字段关联,可以避免数据冗余和更新异常。但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。数据库的三范式(3NF)是一种数据设计原则,旨在减少数据冗余和更新异常,提高数据存储的规范性、一致性和效率。通过将重复的数据拆分成独立的表,从而避免了数据冗余和复杂的更新操作。通过拆分成独立的表,可以消除冗余的字段,并确保数据的一致性和更新的合理性。

weixin_53390884的博客 2275

MySQL性能优化-范式设计和反范式设计

我们今天讲解了数据表设计的三种范式。关系型数据库设计都是基于关系模型的,在关系模型中存在着 4 种键,这些键的核心作用就是标识。在这些概念的基础上,我又讲了 1NF,2NF 和 3NF。我们经常会与这三种范式打交道,利用它们建立冗余度小、结构合理的数据库。有一点需要注意的是,这些范式只是提出了设计的标准,实际上设计数据表时,未必要符合这些原则。一方面是因为这些范式本身存在一些问题,可能会带来插入,更新,删除等的异常情况(这些会在下一讲举例说明),另一方面,它们也可能降低会查询的效率。这是为什么呢?

系统看你学习很认真,随机送了一个月会员! 2362

举例说明数据库一、二、三及BCNF范式

范式数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了大量不需要的冗余信息。 设计范式是不是很难懂呢?非也,大学教材上给我们一堆数学公式我们当然看不懂,也记不住。所以我们很多人就根本不按照范式设计数据库。 实质上,设计范式用很形象、很简洁的话语就能说清楚,道明白。 ...

今天会营业的博客 2647

MySQL 关系型数据库设计范式(NF)

摘要1:https://www.cnblogs.com/xietianjiao/p/10972285.html 摘要2:https://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html 数据库设计三大范式 目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。 注意:符合高一级范式设计,必定符合低一级范式,例如符合2.

weixin_40123451的博客 1965

数据库NF

数据库范式范式第一范式(1NF)第二范式(2NF)巴斯-科德范式(BCNF)第四范式第五范式反三范式 范式 目前关系数据库有六种范式:   第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。 1NF:字段不可分; 原子性 字段不可再分,否则就不

qq_45264366的博客 1523

数据库范式(NF)

目录   基础知识 函数依赖 1NF 第一范式 2NF 第二范式 3NF 第三范式 BCNF 鲍依斯-科得范式 四种范氏之间的关系 基础知识 实体:现实世界中客观存在并可以被区别的事物。比如“一个学生”、“一本书”、“一门课”等等。值得强调的是这里所说的“事物”不仅仅是看得见摸得着的“东西”,它也可以是虚拟的,比如说“老师与学校的关系”。 属性:教科书上解释为:“实体所具有的...

Andy_shenzl的博客 3041

数据库范式NF总结

数据库范式NF学习!

crabyanyan的博客 1304

数据库范式与表关系

本文介绍了数据库设计中的范式理论和表关系。主要内容包括: 数据库范式概念:从第一范式到第五范式的逐级递进关系,重点讲解了1NF、2NF和3NF的定义及设计原则。 表关系类型:详细说明了一对一、一对多和多对多三种关系的特征及实现方式,强调外键约束的使用要点。 实际应用指导:指出范式设计虽能减少冗余但可能影响性能,建议在特定情况下可适当违反第三范式以提高效率。同时提供了不同表关系的数据操作顺序建议。 本文为数据库设计提供了系统化的理论指导和实践参考。

qq_40589140的博客 432

数据库】详细讲解三大范式1NF、2NF、3NF

(在数据库设计中,只能有一个主键,但可以由多个列组成(复合主键)。唯一标识数据库表中每个记录的一列或一组列。在表中必须是唯一的,每个记录都应该有一个不同的主键值。列不允许包含空值(NULL),因为它们用于唯一标识记录。用于建立表之间的关系,例如,用于创建外键关联。表中具有唯一性要求的列或列组合。值也必须是唯一的,就像主键一样。不同于主键,候选键可以包含空值,但其中至少有一个候选键值不能为 NULL。在一个表中,可以有多个候选键,从多个候选键中选择一个作为主键。

码农研究僧的博客 1万+

VW80808-1 中文,2020 .rar

VW80808-1 中文,2020 .rar

58同城全平台信息采集与反爬对抗系统_从网页抓取到Android接口再到IOS接口最后覆盖微信小程序58综合及二手房的多渠道数据采集项目_通过requests库结合header代理.zip

58同城全平台信息采集与反爬对抗系统_从网页抓取到Android接口再到IOS接口最后覆盖微信小程序58综合及二手房的多渠道数据采集项目_通过requests库结合header代理.zip

上一篇: 转 为程序员量身定制的12个目标
下一篇: MS_SqlServer08报 filestream 功能被禁用的解决
tryfinally
博客等级 码龄20年 8粉丝 39原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值