净水 技术支持 东莞网站建设,广州网站建设工作室招聘,中信建设有限责任公司校招,山西网站建设适合v加xtdseo在数据库设计中#xff0c;范式#xff08;Normal Form#xff09;用于消除冗余和异常#xff0c;确保数据一致性。以下是第一范式、第二范式、第三范式和BCNF#xff08;Boyce-Codd Normal Form#xff0c;即第四范式#xff09;的示例说明#xff1a;
1. 第一范式范式Normal Form用于消除冗余和异常确保数据一致性。以下是第一范式、第二范式、第三范式和BCNFBoyce-Codd Normal Form即第四范式的示例说明
1. 第一范式1NF—— 消除重复数据
要求所有字段都是原子性值即每个字段中只能包含单一值不能包含重复或多重数据。
不符合1NF的示例
学生表
---------------------------------------
| 学生编号 | 姓名 | 课程 |
---------------------------------------
| 001 | 张三 | 数学, 语文 |
| 002 | 李四 | 英语 |
| 003 | 王五 | 化学, 物理 |
---------------------------------------这里的 课程 列包含了多个值数学和语文在同一个单元格中这不符合1NF。
符合1NF的示例
学生表
-----------------------------
| 学生编号 | 姓名 | 课程 |
-----------------------------
| 001 | 张三 | 数学 |
| 001 | 张三 | 语文 |
| 002 | 李四 | 英语 |
| 003 | 王五 | 化学 |
| 003 | 王五 | 物理 |
-----------------------------这里每个字段的值都是原子性的。 2. 第二范式2NF—— 消除部分依赖
要求在符合1NF的基础上表中的所有非主属性必须完全依赖于主键不能有部分依赖。
不符合2NF的示例
选课表
--------------------------------------
| 学生编号 | 课程 | 成绩 | 学生电话 |
--------------------------------------
| 001 | 数学 | 90 | 123456 |
| 001 | 语文 | 85 | 123456 |
| 002 | 英语 | 88 | 987654 |
--------------------------------------这里主键是 学生编号 课程 的组合但 学生电话 只依赖于 学生编号而与 课程 无关这就是部分依赖。
符合2NF的示例 将数据分解成两个表
学生表学生编号, 姓名, 学生电话
-----------------------------
| 学生编号 | 姓名 | 学生电话 |
-----------------------------
| 001 | 张三 | 123456 |
| 002 | 李四 | 987654 |
-----------------------------成绩表学生编号, 课程, 成绩
-----------------------------
| 学生编号 | 课程 | 成绩 |
-----------------------------
| 001 | 数学 | 90 |
| 001 | 语文 | 85 |
| 002 | 英语 | 88 |
-----------------------------现在每个非主属性如学生电话都完全依赖于主键。 3. 第三范式3NF—— 消除传递依赖
要求在符合2NF的基础上所有非主属性必须直接依赖于主键而不能通过其他非主属性间接依赖主键。
不符合3NF的示例
学生表
------------------------------------------
| 学生编号 | 姓名 | 班级 | 班主任 |
------------------------------------------
| 001 | 张三 | 101 | 王老师 |
| 002 | 李四 | 102 | 李老师 |
------------------------------------------这里 班主任 是通过 班级 依赖于 学生编号而不是直接依赖主键学生编号这是传递依赖。
符合3NF的示例 将数据分解成两个表
学生表学生编号, 姓名, 班级
---------------------------------
| 学生编号 | 姓名 | 班级 |
---------------------------------
| 001 | 张三 | 101 |
| 002 | 李四 | 102 |
---------------------------------班级表班级, 班主任
----------------------
| 班级 | 班主任 |
----------------------
| 101 | 王老师 |
| 102 | 李老师 |
----------------------现在班主任直接依赖于班级不再有传递依赖。 4. BCNFBoyce-Codd范式第四范式—— 处理多值依赖和候选键
要求在符合3NF的基础上每个非主属性必须依赖于候选键的超集即任何候选键都能唯一确定表中的所有属性。
不符合BCNF的示例
教师课程表
-----------------------------
| 教师编号 | 课程 | 教室 |
-----------------------------
| T001 | 数学 | A101 |
| T001 | 语文 | A102 |
| T002 | 英语 | A101 |
-----------------------------在这个表中主键是 教师编号 课程但是 教室 可以由 课程 唯一确定每门课程都在同一个教室上课这破坏了 BCNF 规范。
符合BCNF的示例 分解成两个表
教师课程表教师编号, 课程
--------------------
| 教师编号 | 课程 |
--------------------
| T001 | 数学 |
| T001 | 语文 |
| T002 | 英语 |
--------------------课程教室表课程, 教室
------------------
| 课程 | 教室 |
------------------
| 数学 | A101 |
| 语文 | A102 |
| 英语 | A101 |
------------------现在每个非主属性都依赖于候选键没有多值依赖或不合理的键依赖。 总结
1NF确保每个字段都是原子性值。2NF消除部分依赖所有非主属性都完全依赖于主键。3NF消除传递依赖所有非主属性直接依赖于主键。BCNF确保每个非主属性依赖于候选键的超集解决候选键的多值依赖问题。