数据库之六大范式详解

数据库之六大范式详解数据库六大范式详解关系数据库中的关系满足一定要求的 满足不同程度要求的为不同的范式 满足最低要求的叫第一范式 简称 1NF 在第一范式的基础上满足进一步要求的称为第二范式 简称 2NF 其余范式以此类推 对于各种范式之间有如下关系 如下图所示 1 第一范式 1NF 定义 属于第一范式关系的所有属性都不可再分 即数据项不可分 理解 第一范式强调数据表的原子性 是其他范式的

数据库之六大范式详解

关系数据库中的关系满足一定要求的,满足不同程度要求的为不同的范式。满足最低要求的叫第一范式,简称1NF;在第一范式的基础上满足进一步要求的称为第二范式,简称2NF,其余范式以此类推。对于各种范式之间有如下关系:关系
如下图所示:
图
1. 第一范式 1NF


定义: 属于第一范式关系的所有属性都不可再分,即数据项不可分。

理解: 第一范式强调数据表的原子性,是其他范式的基础。如下图所示数据库就不符合第一范式:
错误
上表将商品这一数据项又划分为名称和数量两个数据项,故不符合第一范式关系。改正之后如下图所示:
正确
上表就符合第一范式关系。



但日常生活中仅用第一范式来规范表格是远远不够的,依然会存在数据冗余过大、删除异常、插入异常、修改异常的问题,此时就需要引入规范化概念,将其转化为更标准化的表格,减少数据依赖。

规范化: 一个低一级的关系模式通过模式分解可以转化为若干个高一级范式的关系模式的集合,这个过程叫做规范化。

2. 第二范式 2NF

定义: 若某关系R属于第一范式,且每一个非主属性完全函数依赖于任何一个候选码,则关系R属于第二范式。

此处我们需要理解非主属性、候选码和完全函数依赖的概念。

候选码: 若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码。若一个关系中有多个候选码,则选定其中一个为主码。

以下所有内容中,主码或候选码都简称为码。

例如下图所示的学生表中,学号和姓名都可以唯一标识一个元组,故该表的候选码为学号和姓名,主码我们可以随便选定其中一个,则选学号为主码。

学号 姓名 年龄 性别
101 刘晨 19
102 王琪 21
103 张宇 20
104 李琛 19
105 欧阳慧 20

主属性: 所有候选码的属性称为主属性。不包含在任何候选码中的属性称为非主属性或非码属性。

在上面的学生表中,学号和姓名就是该关系的主属性,年龄和性别就是非主属性。

函数依赖: 设R(U)是属性集U上的关系模式,X、Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称Y函数依赖于X或X函数确定Y。

完全函数依赖: 设R(U)是属性集U上的关系模式,X、Y是U的子集。如果Y函数依赖于X,且对于X的任何一个真子集X’,都有Y不函数依赖于X’,则称Y对X完全函数依赖。记作:如果Y函数依赖于X,但Y不完全函数依赖于X,则称Y对X部分函数依赖。
记号

理解: 第二范式是指每个表必须有一个(有且仅有一个)数据项作为关键字或主键(primary key),其他数据项与关键字或者主键一一对应,即其他数据项完全依赖于关键字或主键。由此可知单主属性的关系均属于第二范式。

判断一个关系是否属于第二范式:

  1. 找出数据表中的所有码;
  2. 找出所有主属性和非主属性;
  3. 判断所有的非主属性对码的部分函数依赖。

以上面的学生表为例,表中的码为学号(码可以为学号或者姓名,此处假定码为学号),非主属性为性别、年龄(其余都为主属性),当学号确定时,性别、年龄也都惟一的被确定为,故学生表的设计满足第二范式(学生表为单主属性的关系)。

3. 第三范式 3NF

定义: 非主属性既不传递依赖于码,也不部分依赖于码。

定义: 关系模式R

中,若每一个决定因素都包含码,则R

属于BCFN。

理解: 根据定义我们可以得到结论,一个满足BC范式的关系模式有:

  1. 所有非主属性对每一个码都是完全函数依赖;
  2. 所有主属性对每一个不包含它的码也是完全函数依赖;
  3. 没有任何属性完全函数依赖于非码的任何一组属性。

例如有关系模式C(Cno, Cname, Pcno),Cno, Cname, Pcno依次表示课程号、课程名、先修课。可知关系C只有一个码Cno,且没有任何属性对Cno部分函数依赖或传递函数依赖,所以关系C属于第三范式,同时Cno是C中的唯一决定因素,所以C也属于BC范式。

5. 第四范式 4NF

定义: 限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。

理解: 显然一个关系模式是4NF,则必为BCNF。也就是说,当一个表中的非主属性互相独立时(3NF),这些非主属性不应该有多值,若有多值就违反了4NF。

6. 第五范式 5NF

第五范式是在第四范式的基础上做的进一步规范化。第四范式处理的是相互独立的多值情况,而第五范式则处理相互依赖的多值情况。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/209117.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午9:59
下一篇 2026年3月19日 上午9:59


相关推荐

  • eclipse导入maven工程

    eclipse导入maven工程eclipse导入maven工程

    2022年5月31日
    37
  • APK签名流程详解

    APK签名流程详解本文最好对照我的APK签名解析示例进行阅读.示例中的关键文件说明:keys-存放签名公私钥的目录signed_logcat.apk-已经使用keys目录中的密钥签名后的apksigned_logcat-signed_logcat.apk解压出来的内容sign.cmd-对apk签名的批处理命令signapk.jar-java版本的apk签名工具

    2022年5月11日
    36
  • 如何查询Claude Code 这样的工具实际发送给模型的提示词

    如何查询Claude Code 这样的工具实际发送给模型的提示词

    2026年3月15日
    3
  • 134. 加油站(前缀和+单调队列|贪心)「建议收藏」

    134. 加油站(前缀和+单调队列|贪心)「建议收藏」在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。说明:如果题目有解,该答案即为唯一答案。输入数组均为非空数组,且长度相同。输入数组中的元素均为非负数。示例 1:输入: gas = [1,2,3,4,5]cost = [3,4,5,1,2]输

    2022年8月8日
    9
  • ServletContextListener 详解

    ServletContextListener 详解1 首先来看一看源码该类的源码 publicinterf Receivesnoti processissta

    2026年3月19日
    3
  • Ubuntu关机重启命令简介

    Ubuntu关机重启命令简介整理了 Ubuntu 的关机重启命令知识 以作备忘 重启命令 1 reboot2 shutdown rnow 立刻重启 root 用户使用 3 shutdown r10 过 10 分钟自动重启 root 用户使用 4 shutdown r20 35 在时间为 20 35 时候重启 root 用户使用 如果是通过 shutdown 命令设置重启的话 可以用 shutdown c 命令

    2026年2月16日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号