数据库表设计的三范式及反三范式

三范式?

  • 第一范式:最基本的范式,每列保持原子性,每列不可分
  • 第二范式:要有主键,每列都和主键相关
  • 第三范式:每列都和主键直接相关,不可存在传递依赖
    三个特点:每列只有一个值;每一列都不可分;每张表不包含其他表已包含的非主键的字段。
    比如商品表里面关联商品类别表,那么只需要一个关联字段product_type_id即可,其他字段信息可以通过表关联查询即可。
    得到如果商品表还存在一个商品类别名称字段,如product_type_name,那就属于存在传递依赖的情况,第三范式主要是从空间的角度来考虑,避免产生冗余信息,浪费磁盘空间。

三个范式互为基础,第一范式是第二范式的基础,第二范式是第三范式的基础。

反范式设计:(第三范式) 冗余其他表的非主键字段
为什么会有反范式设计?
原因一:提高查询效率(读多写少)
比如上述的描述中,显示商品信息时,经常需要伴随商品类别信息的展示,所以这个时候,为了提高查询效率,可以通过冗余一个商品名称字段,这个可以将原先的表关联查询转换为单表查询
原因二:保存历史快照信息比如订单表,里面需要包含收货人的各项信息,如姓名,电话,地址等等,这些都属于历史快照,需要冗余保存起来,不能通过保存用户地址ID去关联查询,因为用户的收货人信息可能会在后期发生变更

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值