数据库建表的3大范式和扩展的6个范式

扩展 6个范式

总共为:

1NF

2NF

3NF 第三范式

BCNF 3.5范式

4NF

1NF

梧桐歌名,有2个歌手,每个歌手有一个经纪公司,所以要占2条数据

  • 表中的所有 字段 都具有 单一属性

2NF

  • 要求表中,只具有 一个业务主键

非主属性,经纪公司,部分依赖于 候选键 {歌曲名称,歌手}

不满足 2NF —> 方法:拆分表

歌曲表:歌名 歌手

专辑表:歌名 所属专辑 专辑发布时间 专辑类别

经纪公司表:歌手 经纪公司

满足:2NF

3NF

在2NF的基础上,消除传递函数依赖。

A—> B —> C 的决定关系。C传递函数 依赖于 A。

歌曲 决定了 所属专辑

所属专辑,决定 专辑发表时间,专辑类别。

放在一起,不满足3NF—> 方法:拆分表

歌曲名称 和 所属专辑 在一个表

所属专辑的: 专辑名称,发表时间,专辑类别 在一个表

BCNF

  • 所有的字段,只能和主键有关系,其他不能有关系

消除 主属性 对 主键 的部分 与 传递依赖

歌曲编号 歌曲名称 歌手

决定属性集,歌曲编号,歌手 是超键,而非候选键

不满足 BCNF

拆表:

歌曲编号 歌曲名称

歌曲名称 歌手 表

4NF

消除表中的 多值依赖

一事一地,一对一关系

专辑发表时间 与 专辑类别,都依赖于所属专辑,但并没有关系。

定位:需要其他各列作为 主键,产生了多值依赖。不满足4NF

专辑名字 专辑发表时间

专辑名称 专辑类别

反范式化

为了性能 和 读取效率 得考虑 而适当得

  • 对 数据库设计 范式得 要求进行违反

允许 存在少量得 冗余

  • 使用空间 来换取时间

总结

1:保证 原子性

  • 梧桐 歌名,有2个歌手,每个歌手有一个经纪公司,所以要占2条数据

2:去除 非主属性 对于 主属性的 部分依赖

  • 歌曲表:歌名 歌手
  • 专辑表:歌名 所属专辑 专辑发布时间 专辑类别
  • 经纪公司表:歌手 经纪公司

3:去除 非主属性 对于 主属性的 传递依赖

  • 歌曲名称 和 所属专辑 在一个表

    所属专辑的: 专辑名称,发表时间,专辑类别 在一个表

3.5:消除 主 属性 对 主属性的部分与传递 依赖。

  • 歌曲编号 歌曲名称 和

    歌曲名称 歌手表

4:消除表中的 多值依赖。

  • 专辑名称 专辑时间 和
  • 专辑名称 专辑类别。

数据库 3大范式

第一大范式

  • 表中的所有 字段 都具有 单一属性
    • 如:name_age 拼接的字段不行
  • 单一属性:都是基本数据构成
  • 都是简单的 二维表

第二大范式

  • 要求表中,只具有 一个业务主键
    • 不能存在 非主键列 只对 部分主键 的依赖关系
      • 如:订单 1 产品1。订单1 产品2 不满足
      • 要:订单1 单独一个表。
      • 订单中间表:
        • ID1,订单1,产品1。
        • ID2,订单1,产品2。

第三大范式

指 每一个 非主属性,

既不 部分依赖 也不传递 依赖于 业务主键,

  • 在二范式 的基础上,相处了 非主键 对 主键的 传递依赖
  • 订单编号 订单时间 客户编号 客户姓名
    • 客户编号 与 客户时间,还有关系,不对。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值