数据库设计三大范式

数据库设计三大范式

三大范式

什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范式。范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法。

  1. 表中的所有字段不可再分
  2. 表中必须存在业务主键,并且非主键依赖于全部业务主键
  3. 表中的非主键列之间不能相互依赖

第一范式

表中的所有字段不可再分

在这里插入图片描述

假设用户表包含上述属性,联系方式这一属性又包含了手机、固话、邮箱 3个属性,那么联系方式就是一个复合属性。
是一个可再分的属性,可分为手机、固画…三个属性,那么就符合第一范式。
我们可以将属性拆分为:
在这里插入图片描述

如果一个数据表满足第一范式那么这个表就是一个标准的二维表!

第二范式

表中必须存在业务主键,并且非主键依赖于全部业务主键

在这里插入图片描述

假设存在一笔记表。为了标记出每一条记录的唯一性,我们必须设置一个主键。
这里我们可以采用用户、章节、标题来做一个组合主键,这样做看似是合理的,其实并不符合第二范式。
就是用户积分这一属性,它不依赖于组合主键,而是依赖于用户(用户 -> 用户积分)而不是(笔记 - > 用户积分)。
那我们就可以把用户属性抽取出来,单独一张用户表。
在这里插入图片描述

第三范式

表中的非主键列之间不能相互依赖

在这里插入图片描述
假设存在一课程表,主标题作为主键。
它是不符合第三范式的,讲师职位依赖于讲师(讲师职位->讲师),这张表可以进一步“窄化”
在这里插入图片描述

后语

三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。
如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库。

如,报表之类的需求,就没必要窄化数据表,可以采用宽表模式,可以加快查询速度,也不用写连接的sql语句。
宽表模式:由于把不同的内容都放在同一张表存储,宽表已经不符合三范式的模型设计规范,随之带来的主要坏处就是数据的大量冗余,与之相对应的好处就是查询性能的提高与便捷。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值