数据库三范式
表设计规范化是通过应用范式规则实现的。最常用的范式有第一范式(1NF)、第二范式(2NF)、第三范式(3NF)
1.第一范式
表中的列只能含有原子性(不可再分)的值。
上例中张三有两个手机号存储在mobile列中,违反了1NF规则。为了使表满足1NF,数据应该修改为如表所示。
2. 第二范式(2NF)
第二范式要同时满足下面两个条件:
- 满足第一范式。
- 没有部分依赖。
例如,员工表的一个候选键是{id,mobile,deptNo},而deptName依赖于{deptNo},同样name仅依赖于{id},因此不是2NF的。为了满足第二范式的条件,需要将这个表拆分成employee、dept、employee_dept、employee_mobile四个表,如表所示。
3. 第三范式
第三范式要同时满足下面两个条件:
- 满足第二范式。
- 没有传递依赖。
例如,员工表的province、city、district依赖于zip,而zip依赖于{id},换句话说,province、city、district传递依赖于{id},违反了3NF规则。为了满足第三范式的条件,可以将这个表拆分成employee和zip两个表,如表所示。
在关系数据模型设计中,一般需要满足第三范式的要求。如果一个表有良好的主外键设计,就应该是满足3NF的表。规范化带来的好处是通过减少数据冗余提高更新数据的效率,同时保证数据完整性。然而,我们在实际应用中也要防止过度规范化的问题。规范化程度越高,划分的表就越多,在查询数据时越有可能使用表连接操作。
而如果连接的表过多,会影响查询的性能。关键的问题是要依据业务需求,仔细权衡数据查询和数据更新的关系,制定最适合的规范化程度。还有一点需要注意的是,不要为了遵循严格的规范化规则而修改业务需求。