需求分析

分析用户需求 , 将分析结果记录下来现成分析报告 , 避免理解不准确导致后续工作出现问题

  1. 尽可能多的收集数据,理解业务过程和数据处理过程,理解性能需求
  2. 解决冲突,包括命名冲突(同名异议,异名同义) 属性冲突 结构冲突
  3. 为一些数据形成标准,如商品编号一共多少位,每一位的含义是什么,按照什么规则生成,如何避免重复

    三大范式

    第一范式(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

拆分后有效的消除了冗余的部门信息,表格结构更加清晰。

总结

第一范式:表中的每一个字段能不能再细分。(字段原子性)
第二范式:表能不能拆分成互相独立的多个表。(每个表至描述一种东西)
第三范式:已经分成的多个表如果有关联,那么在一张表中只能存在另外一张关联表的主键。(通过外键来查询信息)