浅聊数据库设计的三大范式

写在最前

为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中,这种规则就是范式。范式是符合某一种级别的关系模式的集合。关系型数据库中的关系必须满足一定的要求,即满足不同的范式。

目前关系型数据库有六种范式,分别为:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。要求最低的范式是第一范式。第二范式在第一范式的基础上又进一步的添加了要求,其余范式依次类推。

一般说来,数据库只需满足第三范式就行了,而通常我们用的最多的就是第一范式第二范式第三范式,也就是接下来要讲的“三大范式”。

第一范式

第一范式(1NF)用来确保每列的原子性,要求每列(或者每个属性值)都是不可再分的最小数据单元(也称为最小的原子单元)。

下表为“不满足第一范式”设计的表:

员工编号姓名性别学历信息
101张德华本科,南京大学
102李星驰专科,北京大学
103马润发硕士,香港大学

在上面的表中,“学历信息”列不满足原子性的要求,即可再分,故不满足第一范式,调整如下:

员工编号姓名性别学历毕业院校
101张德华本科南京大学
102李星驰专科北京大学
103马润发硕士香港大学

第二范式

第二范式(2NF)在 1NF 的基础上,要求表中的每列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。如果一个表满足第一范式,并且除了主键以外的其他列全部都依赖于该主键,那么该表满足第二范式。

下表为 “不满足第二范式” 设计的表:

员工编号姓名性别技能掌握程度
101张德华Java90%
101张德华Oracle80%
102李星驰Java85%
103马润发Java75%
103马润发Mysql95%

在上图所示的情况中,同一个员工可能掌握不同技能,因此主键必须是“员工编号”和“技能”联合组成。

这样在该表中掌握程度字段不与该表的主键相关,而仅仅是与技能相关。故不满足第二范式,调整如下:

员工编号姓名性别
101张德华
102李星驰
103马润发
员工编号技能掌握程度
101Java90%
101Oracle80%
102Java85%
103Java75%
103Mysql95%

第三范式

第三范式(3NF)在 2NF 的基础上,确保每列都和主键列直接相关,而不是间接相关,即限制列的冗余性。如果一个关系满足第二范式,并且除了主键以外的其他列都依赖于主键列,列和列之间不存在相互依赖关系,则满足第三范式。

下表为 “不满足第三范式” 设计的表:

员工编号姓名性别学历毕业院校部门编号部门名称部门人数
101张德华本科南京大学d_1研发一部10
102李星驰专科北京大学d_2研发二部15
103马润发硕士香港大学d_2研发二部15

上表中,“部门名称”和“部门人数”是间接相关主键“员工编号”,故不满足第三范式,调整如下:

员工编号姓名性别学历毕业院校部门编号
101张德华本科南京大学d_1
102李星驰专科北京大学d_2
103马润发硕士香港大学d_2
部门编号部门名称部门人数
d_1研发一部10
d_2研发二部15

范式化反范式化

在实际的数据库设计中,既要考虑三大范式,避免数据的冗余和各种数据操作异常,又要考虑数据访问性能。为了减少表连接,提高数据库的访问性能,也可以允许适当的数据冗余列,这也许就是最合适的数据库设计方案。

范式化

满足范式的数据库设计,就是范式化。

  • 优点:
    • 减少数据冗余;
    • 范式化后的表中只有很少的重复数据,更新时只需要更新较少的数据,所以范式化的更新操作比反范式化更快;
    • 范式化的表通常比反范式化更小;
  • 缺点:
    • 范式化的表在查询时经常需要很多的关联,这回导致性能降低;
    • 增加了索引优化的难度;

反范式化

不满足范式的数据库设计,就是反范式化。

  • 优点:
    • 可以减少表的关联;
    • 可以更好的进行索引优化;
  • 缺点:
    • 数据表存在数据冗余及数据维护异常;
    • 对数据的修改需要更多的成本;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Strive_MY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值