需求分析
分析用户需求 , 将分析结果记录下来现成分析报告 , 避免理解不准确导致后续工作出现问题
- 尽可能多的收集数据,理解业务过程和数据处理过程,理解性能需求
- 解决冲突,包括命名冲突(同名异议,异名同义) 属性冲突 结构冲突
- 为一些数据形成标准,如商品编号一共多少位,每一位的含义是什么,按照什么规则生成,如何避免重复
三大范式
第一范式(1NF)
数据表中的每一个字段都必须是不可拆分的最小单元,确保每一个字段的原子性。
比如下面的表格:
| 工号 | 姓名 | 年龄 | 地址 |
|---|---|---|---|
| z00001 | 张三 | 25 | 广东省佛山市大沥镇永平村三组4号 |
| l00002 | 李四 | 33 | 陕西省西安市南二环中段长安大学 |
| w00003 | 王麻子 | 34 | 四川省成都市武侯区浆洗街6号 |
上面表格不满足1NF,因为其地址字段还能拆分为省,市,区,街道,所以满足1NF的表格应该为:
| 工号 | 姓名 | 年龄 | 省 | 市 | 区 | 街道 |
|---|---|---|---|---|---|---|
| z00001 | 张三 | 25 | 广东省 | 佛山市 | 海珠区 | 大沥镇永平村三组4号 |
| l00002 | 李四 | 33 | 陕西省 | 西安市 | 新城区 | 南二环中段长安大学 |
| w00003 | 王麻子 | 34 | 四川省 | 成都市 | 武侯区 | 浆洗街6号 |
第二范式(2NF)
首先必须满足1NF,然后表中的所有字段,都必须完全依赖于主键,而不能有任何一列与主键没有关系,确保一张表只描述一件事情。
举例说明:
| 工号 | 姓名 | 年龄 | 客户编号 | 客户名称 |
|---|---|---|---|---|
| z00001 | 张三 | 25 | C0001 | 华为 |
| l00002 | 李四 | 33 | C0002 | 腾讯 |
| w00003 | 王麻子 | 34 | C0003 | 阿里巴巴 |
上面表格满足1NF但是不满足2NF,因为客户编号和客户名称并不依赖于工号这个主键,所以表格需要分别拆分为
员工表:
| 工号 | 姓名 | 年龄 |
|---|---|---|
| z00001 | 张三 | 25 |
| l00002 | 李四 | 33 |
| w00003 | 王麻子 | 34 |
客户表:
| 客户编号 | 客户名称 |
|---|---|
| C0001 | 华为 |
| C0002 | 腾讯 |
| C0003 | 阿里巴巴 |
第三范式(3NF)
在满足2NF的基础上,表中的每一个字段只与主键直接相关而不是间接相关,即表中的每一个字段只能直接依赖于主键。
举例说明:
| 工号 | 姓名 | 年龄 | 部门电话 | 所在部门 |
|---|---|---|---|---|
| z00001 | 张三 | 25 | 010-2123123 | 人事部 |
| l00002 | 李四 | 33 | 010-2009889 | 公共关系部 |
| w00003 | 王麻子 | 34 | 010-2009889 | 公共关系部 |
上面表格满足2NF但是不满足3NF,因为存在 “部门电话” 依赖于 “所在部门”, 而 “所在部门” 依赖于 “工号” 这种传递依赖关系, “部门电话” 字段并不直接依赖于工号这个主键,所以需要把这张表拆分成两张表,并用外键(部门编号)来描述这种多对一的关系,分别拆分为
员工表:
| 工号 | 姓名 | 年龄 | 所在部门 |
|---|---|---|---|
| z00001 | 张三 | 25 | B01 |
| l00002 | 李四 | 33 | B02 |
| w00003 | 王麻子 | 34 | B02 |
部门表:
| 部门编号 | 部门名称 | 部门电话 |
|---|---|---|
| B01 | 人事部 | 010-2123123 |
| B02 | 公共关系部 | 010-2009889 |
总结
第一范式:表中的每一个字段能不能再细分。(字段原子性)
第二范式:表能不能拆分成互相独立的多个表。(每个表至描述一种东西)
第三范式:已经分成的多个表如果有关联,那么在一张表中只能存在另外一张关联表的主键。(通过外键来查询信息)
