数据库设计范式
第一范式(每个列都不可再分割)
第一范式要求单个表中每个列必须是原子列(每一列都是不可再分的最小数据单元)、列不存在重复属性、每个实体的属性也不存在多个数据项
- 每一列都是不可再分的最小单元:理解:列如家庭住址,省、市、县、乡、。。。必须到最小单位才满足原子列的要求
- 不出现重复属性:
- 不容许出现多个数据项:
第二范式(非主键列完全依赖于主键,而不能依赖于主键的一部分)
第二范式是在第一范式的基础上,要求数据表里的所有数据都要和该数据表的主键有完全依赖关系。如果有那些数据之和主键的一部分有关的话,他就不符合第二范式。也就是说表必须有主键,而且如果一个数据表的主键只有单一一个字段的话,他就一定符合第二范式
- 函数依赖:如果通过A属性(属性组)可以确定唯一的B属性的值,那么B依赖于A,比如在学生表中,学生姓名完全依赖于学号
- 完全函数依赖:如果A是一个属性组,则B属性值的确定需要依赖于A属性组中的所有的属性值。属性组是指多个字段,那么比如我们要想知道一个分数,就必须依赖于学号和课程名称两个属性才能确定一个分数,其他的属性是不能确定某一个分数的
- 部分函数依赖:如果A是一个属性组,则B属性值的确定需要依赖A属性组的某一些字段即可,例如学号和课程名称为一个属性组,那么学生姓名其实就只需要学号就可以确定
- 传递函数组:如果A属性(属性组),可以确定唯一个B属性的值,再通过B属性的值又可以唯一确定C属性的值,例如一个学号确定一个系名,一个系名对应一个系主任
- 主键:在一张表中,一个属性或者属性组,被其他所有属性完全依赖,则称这个属性为该码的表,比如上图的学号和课程名称组成的属性组
第三范式(非主键只依赖于主键,不依赖于其他非主键)
第三范式是在满足第二范式的基础上,每一个非主键列都直接依赖主键列,不依赖其他非主键,即数据库中不能存在传递函数依赖关系
解:
该表只满足第一范式,表中的每一个属性都是不可再分割的最小单元,不满足第二范式,不满足第二范式也就不满足第三范式,因为第三范式依赖于第二范式的成功
不满足第二范式的原因:
-
因为第二范式要求,在第一范式的基础上:非主键列完全依赖于主键列,而不能依赖于主键的一部分,在这个表中使用了联合主键,(学生学号,课程编号)非主键为(学生姓名、课程名称、成绩),在查询的时候,要想知道课程名称,只需要输入课程编号就能知道课程名称这个是不满足的,但是成绩是满足的,因为要想通过联合主键获取到学生成绩,就必须通过学生学号好课程编号才可以获取的相应的成绩如果只告诉学生学号或者课程编号就获取不到确定的学生成绩,
-
学生姓名和课程名称不满足的原因:他们没有完全依赖主键,比如学生姓名:只需要告诉学生学号就可以确定他的值,课程名称只需要告诉课程编号就可以确定课程名称,这叫部分依赖,不满足第二范式,所以他不满足【要求数据表里的所有数据都要和该数据表的主键有完全依赖关系】
-
改造:
-
学生学号 课程编号 成绩 1026 1 45 1027 1 77 课程编号 课程名称 1 数据库设计 学生学号 学生姓名 1026 李四 1027 李逵 改造后,成绩就完全依赖于联合主键(学生学号、课程编号)满足第二范式
-
满足第一范式:
原因:
- 首先满足第一范式的原因:表中数据和属性没有可在拆分的原子,
- 不满足第二范式的原因:(语文、数学、都是完全依赖于主键学号,也就是说要想自动语文、数学、的值通过学号主键就可以知道)但是总成绩是通过语文数学成绩获取到的,他不满足非主键完全依赖于主键列
- 不满足第三范式的原因:不满足第二范式
文档链接:
https://blog.csdn.net/qq_45737068/article/details/106185907?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169176439516800211566519%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=169176439516800211566519&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-2-106185907-null-null.142^v92^insert_down1&utm_term=mysql%E4%B8%89%E5%A4%A7%E8%8C%83%E5%BC%8F&spm=1018.2226.3001.4187
视频链接
https://www.bilibili.com/video/BV1iq4y1u7vj?p=152&spm_id_from=pageDriver&vd_source=429653573b9e3a56b43006ad87b34cfb
vj?p=152&spm_id_from=pageDriver&vd_source=429653573b9e3a56b43006ad87b34cfb