范式和反范式的理解

范式:

符合某一级别的关系模式的集合,范式主要分为六大范式。

下面对其中常用的前三大范式做介绍

  1. 第一范式: 在此规则内,列具有原子性,不可再进行分割,同一列中不能有多个值。第一范式就是无重复的列。
    例: 员工姓名、员工性别、电话
    此例不符合第一范式,因电话可再分为手机电话、家庭电话、办公室电话等。

  2. 第二范式: 在第一范式的规则上,建立第二范式,在此规则中,要求每一行都都必须有唯一的标识,既需要有其中一列是不可重复的,通常是主键,作为唯一标识。第二范式就是非主键的列完全依赖于主键。
    例: 员工编号、员工姓名、员工性别、手机电话
    增加一列员工编号做为主键,作为唯一标识。

  3. 第三范式: 在第一、第二范式的规则上,要求表中非主键的列不依赖于其他非主键的列。
    例: 员工编号、员工姓名、员工性别、手机电话、所在公司、公司地点、公司电话
    公司地点和公司电话都依赖于所在公司,不符合第三范式、
    需分为:
    员工编号、员工姓名、员工性别、手机电话
    所在公司、公司地点、公司电话
    这样才符合第三范式。

反范式:

将有关系的列尽量的放在同一个表,减少表的关联,增加冗余数据。

例:

  • 员工编号、员工姓名、员工性别、手机电话、所在公司、公司地点

  • 所在公司、公司地点、公司电话

    实际上可以通过连表获取所在公司的数据,但是还是将数据放在员工表。

范式的优势:
  1. 范式的更新更多时候比反范式更快,因为数据更少的重复,所以修改比较少的数据就可以。
  2. 没有重复的数据就更少的需要分组和去重,执行效率会更快。
  3. 遵守范式,能消除数据冗余、更新异常、插入异常和删除异常。
范式的劣势:

动不动就要关联,就算找寻很简单的数据可能也要关联多张表,有些可能会引起索引策略失效。

反范式的优势:

避免关联,所以数据都在同一张表,读起来很方便。

反范式的劣势:

数据大量重复、冗余,修改起来很不方便。

设计策略:

混用范式和反范式,使用范式化的schema、缓存表以及其他技巧,使用反范式化的方法是复制或者缓存,在不同的表中存储相同的特定列。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值