数据库设计的范式是一组规则,用于指导如何组织数据库中的数据,以提高数据的逻辑一致性、减少数据冗余和提高数据操作的效率。下面我将通过几个范式的定义和示例来进行讲解。
定义: 数据库表中的所有字段值都是不可分割的原子值。换句话说,表的每列都是不可再分的数据项,每个字段中存储的是基本的数据项,不能再包含多个值,即实现字段的原子性。
示例:
不符合1NF的表:
学号 | 姓名 | 课程 |
---|---|---|
001 | 张三 | 数学, 英语 |
002 | 李四 | 物理, 化学, 生物 |
转换为符合1NF的表:
学号 | 姓名 | 课程 |
---|---|---|
001 | 张三 | 数学 |
001 | 张三 | 英语 |
002 | 李四 | 物理 |
002 | 李四 | 化学 |
002 | 李四 | 生物 |
定义: 在第一范式的基础上,非主属性完全依赖于主键。即表中的非主键字段必须完全依赖于主键,不能只依赖于主键的一部分(针对于组合主键)。
示例:
不符合2NF的表(已符合1NF):
学号 | 课程代码 | 分数 | 课程名称 |
---|---|---|---|
001 | MATH101 | 85 | 数学 |
001 | ENG102 | 90 | 英语 |
这里“课程名称”依赖于“课程代码”,而不是完全依赖于主键(学号+课程代码)。
转换为符合2NF的表:
学生表:
学号 | 课程代码 | 分数 |
---|---|---|
001 | MATH101 | 85 |
001 | ENG102 | 90 |
课程表:
课程代码 | 课程名称 |
---|---|
MATH101 | 数学 |
ENG102 | 英语 |
定义: 在第二范式的基础上,非主属性不依赖于其他非主属性,即除了主键之外的字段必须相互独立。
示例:
不符合3NF的表(已符合2NF):
学号 | 课程代码 | 分数 | 教师姓名 | 教师电话 |
---|---|---|---|---|
001 | MATH101 | 85 | 王老师 | 123456 |
002 | ENG102 | 90 | 李老师 | 654321 |
这里“教师电话”依赖于“教师姓名”,而不是依赖于主键。
转换为符合3NF的表:
学生课程表:
学号 | 课程代码 | 分数 |
---|---|---|
001 | MATH101 | 85 |
002 | ENG102 | 90 |
教师表:
教师姓名 | 教师电话 |
---|---|
王老师 | 123456 |
李老师 | 654321 |
以上就是数据库设计中的三个基本范式,通过这些范式的应用,可以有效地规范数据库设计,减少数据冗余,提高数据的一致性和可维护性。接下来,我会出几道相关的选择题。
答案: