mysql三大范式和反范式_数据库范式:三大范式、BC范式和反范式化

一、什么是数据库范式

无规矩不成方圆,同理范式是数据表设计的一些约束和规范。为了让各个属性间的关系更加合理,减少数据冗余。

一般来说,主要满足 3NF 就可以了,因为范式过高,虽然对数据关系有更好的约束,可也会导致数据表的增加,从而让数据库 IO 更加繁忙,冗余度更低。当然,凡事没绝对,有时为了提高某些查询性能,需要反规范化。

二、三大范式和 BC 范式

一般来说,数据表设计主要遵循三大范式:1NF(第一范式)、2NF(第二范式)和 3NF(第三范式)。越高的范式必须要符合比它低的范式要求,比如 2NF 除了要满足自身的要求,还须满足 1NF 的要求。

1NF(第一范式):是范式中最基本的范式,为了避免重复性,要求每个列的值域由原子值组成和每个字段的值都只能是单一值。

bc55ba10a21c3835dcaa4f05b7014a47.png

2NF(第二范式):要求表数据和表键(主键和候选键)有完全依赖关系。每个非键属性必须独立于任一候选键的一部分属性。

f7104bb2ff28661a96748e9fc18c4731.png

3NF(第三范式):要求非主属性之间应该是独立无关联,只和候选键有关联。不允许非主属性被另一个非主属性决定,但允许主属性被非主属性决定。

6027c43513e32924ebac2058bdc72ddf.png

BCNF(BC 范式,Boyce-Codd normal from):是基于 3NF 的改进范式。与 3NF 主要区别在于任何属性都不能被非主流属性所决定。

5e5beb3ee1ffc3bd37dc66a1ea62c25a.png

三、反范式化

有时为了提高性能和读取效率,允许少量的数据冗余。也就是要反范式化,用空间换时间。

87a604ef69eb9a8584bd6468eefe8621.png

范式化和反范式化的区别:

范式化可以减少数据冗余,但因为查询需要多表关联,很难优化不同表中的索引。

反范式化能减少表的关联,增加读取效率,可以更好地优化索引,但数据会冗余。

四、关系型数据库的键和键属性

超键:能够标识多行的属性集。

候选键:不含有多余属性的超键。

主键:每个数据表只能有一个主键,它不能为空值(NULL)。因为主键是用于唯一定位数据的,确认了不好再修改,所以最好是完全与业务无关的字段。

如果是 INT 自增类型,数据上限是约 21 亿。BIGINT 自增类型上限约有 922 亿。

外键:如果表 A 中某个属性不是本表主键,而是另一个表 B 的主键,即这个属性是表 B 的外键。也可以不设置外键约束,仅靠应用逻辑保证数据操作正确性。

关联关系:一对一、一对多和多对多。

主属性:包含任一候选键中的属性。

非主属性:不包含任一候选键中的属性。

149310b416e1c2a82fd71fa67afc75a5.png

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值