数据库范式的使用

引言:做一个系统往往会用到数据库,数据的设计的好坏直接影响的着执行的效率,所以需要定一个规范,来设计数据库。90%的网站只需要遵循到第三范式或者巴斯范式即可,因为既要考虑到数据设计的简便性(减小冗余),也要考虑到使用性(表连接查询)。

一些基本概念的介绍

举例:球员表有球员编号 |、姓名 、 身份证号 、 年龄 、球队编号

  • 超键:包含候选键的任意组合
  • 候选键:最小的超键,只由一主键构成(主键的集合)
  • 主键:候选键的一个
  • 外键:球队编号
  • 主属性:主键的属性
  • 非主属性:不是主键的属性

第一范式(1NF)

每一个字段都必须是原子性,不可以进一步拆分成更小粒度的字段

第二范式(2NF)

前提:满足第一范式

每一个非主属性都必须完全依赖主属性,如果不行那就将其抽取出来再形成一个表

目的:

数据冗余、插入异常、删除异常、更新异常

第三范式(3NF)

前提:满足第二范式

定义:非主键元素也不能相互影响

反范式化

业务有限的原则,数据中的设计量比较的大,应该添加相应的冗余字段,这样就减少了每一次查询操作没必要的表连接

反范式化新问题

存储空间变大 一个表中的信息修改,相关的表也需要修改 数据量小的情况下,反序列化的优点体现不明显

范式的使用场景

当冗余信息有价值或者能大幅度提高查询效率的时候,才可以考虑增加冗余字段

建议:

不经常修改,不可或缺的字段使用反范式

BCNF(巴斯范式)

名称:是第三范式的优化 || 遵循到第三范式就行

认造成异常的原因:主属性仓库名对于候选键(管理员,物品名)是部分依赖的关系, 这样就有可能导致上面的异常情况。因此引入BCNF,它在 3NF 的基础上消除了主属性对候选键的部分依 赖或者传递依赖关系。

在第三范式上进行优化

1.增加一个仓库,但是还没有存放任何物品。根据数据表实体完整性的要求,主键不能有空值,因 此会出现 插入异常 ;

2. 如果仓库更换了管理员,我们就可能会 修改数据表中的多条记录 ;

3. 如果仓库里的商品都卖空了,那么此时仓库名称和相应的管理员名称也会随之被删除。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值