作用:减少数据库数据的冗余,和提高数据的一致性。
-
第一范式(1NF):
-
每一列的数据都必须是单一值,不能包含,数组、集合或其他复杂的数据结构。
-
每一列中的数据类型应该是相同的。
-
-
第二范式(2NF):表中的非主键列必须完全依赖表的主键。
例子:
假设有一个课程注册表,其中主键是 (学生ID, 课程ID),表中还有一列 "学生姓名":
学生ID 课程ID 学生姓名 课程名 1 101 张三 数学 1 102 张三 英语 这里 "学生姓名" 仅依赖于 "学生ID"(主键的一部分),而不是整个主键 (学生ID, 课程ID),这违反了第二范式。为了符合第二范式,应将学生信息拆分到一个单独的表中:
学生信息表:
学生ID 学生姓名 1 张三 课程注册表:
学生ID 课程ID 课程名 1 101 语文 1 102 数学 1 103 英语 -
第三范式(3NF):表中的所有非主键列必须直接依赖于主键,而不能依赖于其他非主键列。这意味着表中不存在传递依赖。
例子:
假设在课程注册表中,添加了一列 "教师姓名",并且教师姓名依赖于 "课程ID":
学生ID 课程ID 课程名 教师姓名 1 101 数学 李老师 1 102 英语 王老师 这里,"教师姓名" 依赖于 "课程ID",而 "课程ID" 又依赖于 "学生ID"(主键),这是一个传递依赖,违反了第三范式。为了解决这个问题,我们可以将教师信息单独拆分成一个表:
课程信息表:
课程ID 课程名称 教室姓名 101 数学 李老师 102 英语 王老师 课程注册表(中间表):
学生ID 课程ID 1 101 1 102
总结:
第一范式(1NF):确保表中的每一列都是原子值,没有重复的列或嵌套数据结构。
第二范式(2NF):消除部分依赖,确保所有非主键列都完全依赖于整个主键。
第三范式(3NF):消除传递依赖,确保所有非主键列直接依赖于主键。