什么是第一,第二,第三范式

什么是第一,第二,第三范式我们在数据库表设计时,经常说,某某表要遵循第三范式。下面通过实例介绍第一,第二,第三范式第一范式所谓第一范式,就是数据表的列不可再分。看下面数据表,对于选课列明显是可以再分的,所以它是违反第一范式的。学号姓名选课10001张三数学,语文,英语10002

大家好,又见面了,我是你们的朋友全栈君。

我们在数据库表设计时,经常说,某某表要遵循第三范式。下面通过实例介绍第一,第二,第三范式

第一范式

所谓第一范式,就是数据表的列不可再分。

看下面数据表,对于选课列明显是可以再分的,所以它是违反第一范式的。

学号 姓名 选课
10001 张三 数学,语文,英语
10002 李四 语文,英语
10003 王五 语文,英语,历史

第二范式

第二范式是指,首先满足第一范式,并且表中非主键列不存在对主键的部分依赖。

看下面的学生选课表:

学号 课程 成绩 课程学分
10001 数学 100 6
10001 语文 90 2
10001 英语 85 3
10002 数学 90 6
10003 数学 99 6
10004 语文 89 2

表中主键为 (学号,课程),我们可以表示为 (学号,课程) -> (成绩,课程学分), 表示所有非主键列 (成绩,课程学分)都依赖于主键 (学号,课程)。 但是,表中还存在另外一个依赖:(课程)->(课程学分)。这样非主键列 ‘课程学分‘ 依赖于部分主键列 ’课程‘, 所以上表是不满足第二范式的。

我们把它拆成如下2张表:

学生选课表:

学号 课程 成绩
10001 数学 100
10001 语文 90
10001 英语 85
10002 数学 90
10003 数学 99
10004 语文 89

 课程信息表:

课程 课程学分
数学 6
语文 3
英语 2

 那么上面2个表,学生选课表主键为(学号,课程),课程信息表主键为(课程),表中所有非主键列都完全依赖主键。不仅符合第二范式,还符合第三范式。 

再看这样一个学生信息表:

学号 姓名 性别 班级 班主任
10001 张三 一班 小王
10002 李四 一班 小王
10003 王五 二班 小李
10004 张小三 二班 小李

上表中,主键为:(学号),所有字段 (姓名,性别,班级,班主任)都依赖与主键(学号),不存在对主键的部分依赖。所以是满足第二范式。

第三范式

第三范式定义是,满足第二范式,并且表中的列不存在对非主键列的传递依赖。

对于上面的学生信息表,虽然满足第二范式,所有字段都依赖主键(学号),但是,表中存在一个传力依赖,(学号)->(班级)->(班主任)。也就是说,(班主任)这个非主键列依赖与另外一个非主键列 (班级)。所以不符号第三范式。

把这个表拆分成如下2个表,

学生信息表:

学号 姓名 性别 班级
10001 张三 一班
10002 李四 一班
10003 王五 二班
10004 张小三 二班

班级信息表:

班级 班主任
一班 小王
二班 小李

这样,对主键的传递依赖就消失了。上面的2个表都符合第3范式。

更高级别的范式

对应上面的班级信息表,完全可以设计成这样:

班级 班主任 班级人数
一班 小王 40
二班 小李 45

这显然是符合第三范式的,所有列都依赖主键(班级),也不存在传递依赖。但是列(班级人数) 显然可以通过统计方法获得,出现在这张表,会造成维护困难或者不一致的情况。这就需要更高级别范式的约束。

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • moebius for sql server下载_大数据集群规模选择

    moebius for sql server下载_大数据集群规模选择一、Moebius集群的架构及原理1、无共享磁盘架构Moebius集群采用无共享磁盘架构设计,各个机器可以不连接一个共享的设备,数据可以存储在每个机器自己的存储介质中。这样每个机器就不需要硬件上的

    2022年8月6日
    23
  • mysql8修改root的密码(如何查看自家wifi密码)

    部署环境:安装版本redhatCent7.0MYSQL版本8.0.2.0成功部署完毕后出现故障情况:1.正常启动MYSQL服务后,敲Linux中root账户和密码进入不去。2.从/etc/my.cnf配置文件中加入skip-grant-table后正常登陆,但是不能创建用户等多操作总结来说:想进去mysql后不能操作多指令,操作多指令又不能进去mysql,死…

    2022年4月13日
    130
  • 多值依赖的简单理解_第四范式智能客服官网

    多值依赖的简单理解_第四范式智能客服官网1.多值依赖1.1多值依赖:多值依赖属4nf的定义范围,比函数依赖要复杂得多。在关系模式中,函数依赖不能表示属性值之间的一对多联系,这些属性之间有些虽然没有直接关系,但存在间接的关系,把没有直接联系、但有间接的联系称为多值依赖的数据依赖。在函数依赖中,X与Y是否存在函数依赖关系,只需考察X,Y的两组属性,与别的属性无关。而在多值依赖中,X与Y是否存在多值依赖还需看属性Z。1.2数…

    2025年6月20日
    5
  • 修改浏览器设置为cookie怎么弄_删除浏览器cookie

    修改浏览器设置为cookie怎么弄_删除浏览器cookie怎么设置cookie,怎么设置cookie以及删除cookie和cookie详解注意:expires使用GMT或UTC格式的时间,我这里没有指定路径(path)和域(domain),当没有指定路

    2022年8月4日
    4
  • matlab画图线型、符号、颜色

    matlab画图线型、符号、颜色Matlab画图线形、颜色、数据点形状的选择1,线形-Solidline(default)–Dashedline:Dottedline-.Dash-dotline2,颜色rRedgGreenbBluecCyanmMagentayYellowkBlackwWhite3,数据点的形状+PlussignoCir…

    2022年5月31日
    30
  • 发电机机房设计规范_柴油发电机房设计规范.docx[通俗易懂]

    发电机机房设计规范_柴油发电机房设计规范.docx[通俗易懂]柴油发电机房设计规范柴油发电机房设计规范篇一:柴油发电机组设置原则与机房设计  柴油发电机组设置原则与机房设计1引言  新型建筑人流密集,出于防火、消防安全的需要,对供电可靠性提出了严格的要求。目前我们一般采用柴油发电机组作为应急电源,因为柴油发电机的容量较大,持续供电时间长,可独立运行,不受电网故障的影响,可靠性较高。尤其是某些地区常用市电不是很可靠的情况下,把柴油发电机作为备用电源…

    2022年10月2日
    2

发表回复

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

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