Oracle三范式简单介绍(oracle三范式简介)
Oracle三范式:简单介绍
作为关系型数据库管理系统的代表,Oracle数据库一直是企业级应用的首选,其规模和性能可扩展性受到业内广泛认可。在数据库设计的过程中,遵循数据库三范式是Oracle DBA必须掌握的知识之一。
一、什么是数据库三范式?
数据库三范式(Database Normalization)是指对关系型数据库中的表进行规范化设计,避免数据冗余,解决数据一致性问题,提高数据存取的效率。三范式理论上有三条规则:第一范式(1NF),第二范式(2NF),第三范式(3NF)。
二、第一范式(1NF)
第一范式要求每个字段都是不可分割的基本数据单元,即“原子性”。每个字段只能有一个值或者一个取值范围,且所有的数据项都在某个字段中出现。在设计一个表时,应把它的各个属性分解成不可再分的基本属性,以避免数据冗余和数据更新的异常情况。
如下表就违反了第一范式:
| 编号 | 姓名 | 联系方式 |
| —- | —— | ———————- |
| 1 | 张三 | 13811111111、13911111111 |
| 2 | 李四 | 13511111111,13611111111 |
| 3 | 王五 | 15011111111 |
解决方法:把“联系方式”字段拆分成“手机号码”和“座机号码”两个字段:
| 编号 | 姓名 | 手机号码 | 座机号码 |
| —- | —— | ————- | ———- |
| 1 | 张三 | 13811111111 | 1391111111 |
| 2 | 李四 | 13511111111 | 13611111111|
| 3 | 王五 | 15011111111 | |
三、第二范式(2NF)
第二范式要求每个表必须有唯一标识符(Primary Key),即每个记录都能被唯一地识别。它还要求对于存在非主关键字依赖的表,必须把表进行分解。
下表存在非主关键字依赖(即“课程名称”和“学分”只依赖于“课程编号”,而不依赖于“学号”):
| 学号 | 姓名 | 课程编号 | 课程名称 | 学分 |
| —- | —- | ——– | ——– | —- |
| 001 | 张三 | 101 | 数学 | 3 |
| 001 | 张三 | 102 | 英语 | 2 |
| 002 | 李四 | 101 | 数学 | 3 |
解决方法:把“课程名称”和“学分”拆分成一个新表“课程信息”:
| 课程编号| 课程名称 | 学分 |
| —— | ——– | —- |
| 101 | 数学 | 3 |
| 102 | 英语 | 2 |
| 学号 | 姓名 | 课程编号 |
| —- | —- | ——– |
| 001 | 张三 | 101 |
| 001 | 张三 | 102 |
| 002 | 李四 | 101 |
四、第三范式(3NF)
第三范式要求在满足第二范式的基础上,对于存在传递依赖的表,必须把表进行分解。即如果存在A-B-C三个字段,但B-C之间有依赖,那么就应该把B-C从A中分离出来,以避免数据冗余和数据更新异常情况。
以下表存在传递依赖(即“教师名称”依赖“教师编号”而“课程名称”并不依赖于“教师编号”):
| 教师编号 | 教师名称 | 课程编号 | 课程名称 | 学分 |
| ——– | ——– | ——– | ——– | —- |
| 001 | 张三 | 101 | 数学 | 3 |
| 002 | 李四 | 102 | 英语 | 2 |
| 001 | 张三 | 103 | 物理 | 3 |
| 002 | 李四 | 104 | 生物 | 2 |
解决方法:把“教师名称”从表中拆分出来形成一个新表“教师信息”:
| 教师编号 | 教师名称 |
| ——– | ——– |
| 001 | 张三 |
| 002 | 李四 |
| 课程编号 | 学分 |
| ——– | —- |
| 101 | 3 |
| 102 | 2 |
| 103 | 3 |
| 104 | 2 |
| 教师编号 | 课程编号 |
| ——– | ——– |
| 001 | 101 |
| 002 | 102 |
| 001 | 103 |
| 002 | 104 |
总结:
– 第一范式确保数据库表中的每个数据都是原子性的,不可再分
– 第二范式确保数据库表中的每个记录都可以被唯一地标识
– 第三范式确保数据库表中的每个字段都不会冗余,避免数据更新异常情况和数据冗余的扩散
在设计Oracle数据库的时候,遵循三范式能够提高数据存储效率,减少数据冗余,同时也更易于查询和维护,因此掌握三范式是Oracle DBA必备的技能之一。