Mysql学习记录(二)三大范式

三大范式

第一范式(1NF)

每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。

举例:

学号姓名课程名称分数
系名系主任
1001张无忌经济系张三丰高等数学95
1001张无忌经济系张三丰大学英语33
1002杨过法学系郭靖大学英语50

注意此时系的下面还可以分为系名和系主任,所以不符合第一范式。
修改后

表一 第一范式修改后
学号姓名系名系主任课程名称分数
1001张无忌经济系张三丰高等数学95
1001张无忌经济系张三丰大学英语33
1002杨过法学系郭靖大学英语50

此时仍旧存在的问题
1、存在非常严重的数据冗余(学号,姓名,系名,系主任)
2、数据添加存在问题,添加新开设的系和系主任时,数据不合法

学号姓名系名系主任课程名称分数
1001张无忌经济系张三丰高等数学95
1002杨过法学系郭靖大学英语50
计算机系殷天正

3、数据删除存在问题,当某人毕业,删除数据,会将系名系主任一并删除

学号姓名系名系主任课程名称分数
1002杨过法学系郭靖大学英语50

第二范式(2NF)

在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖)

函数依赖:A–> B ,如果通过A属性(属性组)的值,可以确定唯一B属性的值,则称B依赖于A
例如:学号–> 姓名 (学号,课程名称) --> 分数
完全函数依赖 : A --> B ,如果A是一个属性组,则B属性值的确定要依赖于A属性组中所有的属性值。
例如:(学号,课程名称)–> 分数
部分函数依赖: A --> B ,如果A是一个属性组,则B属性值的确定只依赖于A属性组中部分的属性值。
例如:(学号,课程名称)–> 姓名 只需学号即可确认姓名
传递函数依赖:A --> B , B --> C 如果通过A属性(属性组)的值,可以确定唯一B属性的值,再通过B属性(属性组)的值,可以确定唯一C属性的值,则称C传递函数依赖于A
例如:学号 --> 系名 系名 --> 系主任
:如果在一张表中,一个属性或者属性组,被其他所有属性所完全依赖,则称这个属性值(属性组)为该表的码
例如:该表中的码为:(学号,课程名称)通过这个属性组可以确定其他所有属性

  • 主属性:码属性(组)中的所有属性
  • 非主属性:除了码以外的属性

在上面表一的基础上修改
要去除冗余,需要分成两张表

表二 第二范式修改后的学生表
学号姓名系名系主任
1001张无忌经济系张三丰
1002杨过法学系郭靖
表三 第二范式修改后的课程表
学号课程名称分数
1001高等数学95
1001大学英语33
1002大学英语50

目前存在的问题:
1、数据添加存在问题,添加新开设的系和系主任时,数据不合法
2、数据删除存在问题,当某人毕业,删除数据,会将系名系主任一并删除

第三范式(3NF)

在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)

在表二、表三的基础上,目前仍旧存在传递依赖

学号 --> 系名 系名 --> 系主任

修改后

表四 第三范式修改后的学生表
学号姓名系名
1001张无忌经济系
1002杨过法学系
表三 第二范式修改后的课程表
学号课程名称分数
1001高等数学95
1001大学英语33
1002大学英语50
表五 第三范式修改后的系表
系名系主任
经济系张三丰
法学系郭靖

目前删除和添加系名系主任可行,比如

表六 添加和删除操作的系表
系名系主任
经济系张三丰
法学系郭靖
计算机系殷天正
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值