数据库三大范式

数据库三大范式

什么是范式:数据库设计对数据的存储性能、开发人员对数据的操作都有很大的关系。所以建立科学的,规范的的数据库是需要满足一些规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范式。
  • 第一范式: 当关系模式R的所有属性都不能在分解为更基本的数据单位时,称R是满足第一范式的,简称列不可再分

  • 第二范式: 如果关系模式R满足第一范式,并且R得所有非主属性都完全依赖于R的每一个候选关键属性,称R满足第二范式,简记为2NF。简称完全依赖

  • 第三范式: 数据不能存在传递关系,即没个属性都跟主键有直接关系而不是间接关系。像:a–>b–>c 属性之间含有这样的关系,是不符合第三范式的。简称没有传递依赖

第一范式(1NF)
列不可再分

例如(学生信息表):

学生编号姓名性别联系方式
20080901张三email:zs@126.com,phone:88886666
20080902小红email:zs@163.com,phone:88889999

以上的表就不符合,第一范式:联系方式字段可以再分,所以变更为正确的是:

学生编号姓名性别Email电话
20080901张三email:zs@126.com010-88886666
20080902小红email:zs@163.com010-88886666

第二范式(2NF)
完全依赖

每一行的数据只能与其中一列相关,即一行数据只做一件事。只要数据列中出现数据重复,就要把表拆分开来。
例如(美团订房订单表):

订单号房间号姓名性别电话
200809018002张三010-88886666
200809028003小红010-88886666
200810138004小红010-88886666

一个人同时订几个房间,就会出来一个订单号多条数据,这样子联系人都是重复的,就会造成数据冗余。我们应该把他拆开来。
如下表

订单号房间号用户编号
200809018002001
200809028003002
200810138004002
用户编号姓名性别电话
001张三010-88886666
002小红010-88886666

所以,第二范式可以说是消除部分依赖。第二范式可以减少插入异常,删除异常和修改异常。

第三范式(3NF)
没有传递依赖
数据不能存在传递关系,即没个属性都跟主键有直接关系而不是间接关系。像:a–>b–>c 属性之间含有这样的关系,是不符合第三范式的。

比如Student表

学生编号姓名性别所在院校院校地址院校电话
001张三湖南大学长沙市0731-34253333
002李四湖南师大长沙市0731-23442222

这样一个表结构,就存在上述关系。 学号–> 所在院校 --> (院校地址,院校电话)

这样的表结构,我们应该拆开来,如下。

学生编号姓名性别所在院校编码
001张三HNDX
002李四HNSD
院校编码院校名称院校地址院校电话
HNDX湖南大学长沙市0731-34253333
HNSD湖南师大长沙市0731-23442222
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值