数据库四大范式

博客介绍了数据库设计的四大范式,包括第一范式要求表为二维表,字段单一不可再分;第二范式要求无部分函数依赖;第三范式要求无传递函数依赖;BC范式在此基础上,复合关键字间也无函数依赖。还指出各范式存在的问题及修改方向,最后列举了常见的DBMS系统,如Oracle、MySQL等。

设计范式(四大范式)

第一范式

  • 定义:数据库表中的所有字段都是单一属性,不可再分的
  • 这个单一属性是由基本的数据类型所构成的
  • 如整数、浮点数、字符串等
  • 换句话说:第一范式要求数据库中的表都是二维表
  • 数据库中的表都是符合第一范式要求的。

第二范式

  • 定义:数据库的表中不存在非关键字段对任一候选关键字段的部分函数依赖。
  • 部分函数依赖是指存在着组合关键字中的某一关键字决定非关键字的情况。
  • 换句话说: 所有单关键字段的表都符合第二范式。
商品名称供应商名称价格重量供应商电话有效期分类
可乐饮料一厂3.00250g888888882018.12饮料
可乐饮料二厂3.00250g666666662018.12饮料
  • 由于供应商和商品之间是多对多的关系
  • 所以只有使用商品名称和供应商名称才可以唯一标识出一件商品。
  • 也就是商品名称和供应商名称是一组组合关键字。
  • 上表中存在以上的部分函数依赖关系
  • (商品名称)->(价格,重量,有效期)
  • (供应商名称)-> (供应商电话)

存在的问题

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

修改

商品ID商品名称价格重量有效期分类
1可乐3.00250g2018.12饮料
供应商ID供应商名称供应商电话
1饮料一厂88888888
2饮料二厂66666666
供应商ID商品ID
11

第三范式

  • 第三范式是在第二范式的基础之上定义的
  • 如果数据表中不存在非关键字段对任意候选关键字的传递函数依赖则符合第三范式
商品名称价格重量有效期分类分类描述
可乐3.00250g2018.12酒水饮料碳酸饮料
苹果8.00500g生鲜食品水果

存在以下转递函数依赖关系

  • (商品名称)->(分类)->(分类描述)
  • 也就是说存在非关键字段“分类描述”对关键字段“商品名称”的传递函数依赖

存在问题
(分类,分类描述)对于每一个商品都会进行记录,所以存在着数据冗余。同时也还存在数据的插入,更新及删除异常。

修改

商品ID商品名称价格重量有效期
1可乐3.00250g2018.12
分类ID分类分类描述
1酒水饮料碳酸饮料
分类ID商品ID
11

BC范式(Boyce.Codd)

定义

  • 在第三范式的基础之上,数据库表中如果不存在任何字段对任一候选关键字段的传递函数依赖则符合BC范式。
  • 也就是说如果是复合关键字,则复合关键字之间也不能存在函数依赖关系。
供应商商品ID供应商联系人商品数量
饮料一厂1张三10
饮料一厂2李四20
饮料二厂1王五20
  • 假定供应商联系人只能受雇于一家供应商,每家供应商可以供应多个商品,
  • 则存在如下决定关系:
  • (供应商,商品ID)->(联系人,商品数量)
  • (联系人,商品ID->(供应商,商品数量)

存在下列关系因此不符合BCNF要求

  • (供应商)->(供应商联系人)
  • (供应商联系人)->(供应商)
  • 并且存在数据操作异常及数据冗余

修改

供应商商品ID商品数量
饮料一厂110
饮料一厂220
饮料二厂120
供应商供应商联系人
饮料一厂张三
饮料一厂李四
饮料二厂王五

常见的DBMS系统

  • 商业数据库
    • Oracle
    • SQLServer
  • 开源数据库
    • MySQL
    • PgSQL
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值