数据库设计范式及数据冗余存储

本文探讨了数据库设计的三大范式,旨在消除数据冗余以提高性能。同时,讨论了数据冗余在高可用存储系统中的作用,平衡冗余与性能之间的关系。结论指出,理论应结合实践,在设计时灵活考虑冗余存储的必要性。
摘要由CSDN通过智能技术生成

数据库设计范式及数据冗余存储

数据库三大范式

  • 第一范式:数据库表中的每一字段都是不可再分的原子值
  • 第二范式:数据库表中的非主键字段必须唯一依赖全部的主键而不是部分的主键
  • 第三范式:数据库表中的非主键必须直接依赖于主键而不是间接依赖于主键

举例来说,比如订单与商品与消费者三者关系建表。订单与商品之间是多对多的关系,一个订单对应多个商品,一个商品对应多个订单。

第一范式,记录信息必须拆分到最细。比如订单信息包含订单id、订单送货地址等,如果两个信息并在一起存,则会出现多个不同id带有同一个订单送货地址。拆开之后,在同一个表格仍然会有,这个情况,于是需要将订单地址再单独建表,组织成多对一的关系进行存储。

第二范式,是基于一个表格中的主键不是单列而是多列的情况。比如订单和商品同时存储在同一张表,订单id和商品id作为共同的主键,则此时,商品名称会只依赖与商品id而不是两个id的组合。结果就是,不同的订单id如果带有相同的商品,其订单id和商品id共同组成了唯一性,但是商品名称则会出现大量冗余的情况。所以应该将订单和商品拆表进行存储。

第三范式,是指非主键列不能依赖于另一个非主键列,而应该直接依赖于主键列。比如订单和消费者信息,订单id为主键,消费者id与订单id直接相关,消费者信息如姓名等,如果同存一张表,则关联于非主键信息消费者id,再关联主键订单id。这样会造成,一张表存储大量冗余消费者信息。所以应该对消费者独立建表。

以上的例子并不是非常的准确贴切,不过基本也可以看出核心的矛盾。即

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值