大数据学习(71)-三范式构成
🍋🍋大数据学习🍋🍋
🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞
一、第一范式(1NF)
简单说:列不能再分,即数据库表中的字段都是单一属性,不可再分的。(也需要根据任务需求)
举例:
假设有一个“员工”表,每个员工都有一个唯一的“员工编号”,同时表中可能还包括其他字段,如姓名、性别、出生日期和住址等。在最初的设计中,住址可能是一个字段,但考虑到住址可能包括家庭住址和现住址等多个部分,这样的设计就不符合第一范式。为了满足第一范式,需要将住址拆分为“家庭住址”和“现住址”两个字段,使得每个字段都是不可分割的原子项。
二、第二范式(2NF)
简单说:建立在第一范式基础上,消除部分依赖,即要求每个非主属性都完全依赖于主属性,而不是仅仅依赖于主键的一部分。
举例:
考虑一个“学生成绩”表,其中包括学号、姓名、性别、课程、课程编号、课程学分和分数等字段。在实际生活中,姓名和性别只依赖于学号(因为一个学生有一个唯一的学号,但可能有重名的情况),而课程编号和课程学分只依赖于课程。此外,分数完全依赖于学号和课程的组合(即主键)。这样的设计就存在部分依赖的问题,因为非主属性(如姓名、性别、课程编号和课程学分)并没有完全依赖于主键。
为了满足第二范式,可以将表拆分为多个表,如“学生”表(包括学号、姓名和性别等字段)和“成绩”表(包括学号、课程、分数等字段),以及“课程信息”表(包括课程编号、课程学分和课程名称等字段)。这样,每个非主属性都完全依赖于其所在表的主键。
三、第三范式(3NF)
简单说:建立在第二范式基础上,消除传递依赖,即要求非主属性之间不存在传递依赖关系,每个非主属性都必须直接依赖于主键。
举例:
假设有一个“学生信息”表,其中包括学号、姓名、性别、电话和住址等字段。主键是学号,其他非主键字段(姓名、性别、电话和住址)都完全依赖于主键。然而,如果进一步分析,可能会发现电话和住址实际上更依赖于姓名(而不是直接依赖于学号),这就构成了传递依赖。
为了满足第三范式,可以将表进一步拆分为“学生”表(包括学号、姓名等字段)和“学生联系信息”表(包括姓名、性别、电话和住址等字段)。这样,每个非主属性都直接依赖于其所在表的主键(或候选键),消除了传递依赖。
四、总结
范式是数据库设计时遵循的一种规范,不同的规范要求遵循不同的范式。
第一范式(1NF):简单说 列不能再分
第二范式(2NF):简单说 建立在第一范式基础上,消除部分依赖
第三范式(3NF):简单说 建立在第二范式基础上,消除传递依赖。