数据库三范式学习

 参考:数据库的三范式

什么是范式?

范式是数据库设计时遵循的一种规范,不同的规范要求遵循不同的范式。

最常用的三大范式

  • 第一范式(1NF):属性不可以分割,每一个属性都是原子项
  • 第二范式(2NF):满足第一范式;且不存在部分依赖,非主属性必须完全依赖于主属性
  • 第三范式(3NF):满足第二范式;且不存在传递依赖

 举个例子

第一范式1NF

属性不可以再分,即表中的列不可以再次拆分。

例如创建一个Student表,包含id name sex connect

primary key(id)

idnamesexconnect
001张三山东省菏泽市_123xxxx1234
002李四山西省太原市_123xxxx2345
003王五河南省保定市_123xxxx3456

如果我们需要利用电话号码查询对应的Student,需要将connect拆分成phone_number以及address,这样才符合第一范式

修改后满足第一范式

idnamesexphone_numberaddress
001张三123xxxx1234山东省菏泽市
002李四123xxxx2345山西省太原市
003王五123xxxx3456河南省保定市

 判断一个表是否符合第一范式,看列还能不能再分。

第二范式2NF 

在满足1NF的前提下,非主键列要完全依赖主键。

创建一个Student表 包含 stu_id  cla_id  score  cla_name

primary key(stu_id,cla_id)

stu_idcla_idscorecla_name
001111182高数
001112277计算机原理
002111155.9高数

由于主键是stu_id于cla_id的联合主键,满足1NF,但cla_name只依赖于_cla_id,与stu_id没有依赖,所以不符合2NF

将原本Student表拆分为两个表,即可满足2NF

成绩表(Score) primary key(stu_id)

stu_idcla_idscore
001111182
001112277
002111155.9

课程表(class) primary key(cla_id)

cla_idcla_name
1111高数
1122计算机原理

 上面两个表都符合2NF

第三范式3NF

在满足2NF的前提下,不存在传递依赖

如下Student表 primary key(id)

表中sex_desc依赖于sex_code,而sex_code依赖于id,从而知道sex_desc依赖于id,说明此依赖为传递依赖,不符合3NF。

修改之后

Student表

sex表

sex_codesex_desc
0
1

如上两个表都符合3NF

小结

什么是三范式?

第一范式:列不可再分 第二范式:行可以唯一区分,主键约束 第三范式:表的非主属性不能依赖与 其他表的非主属性 外键约束 且三大范式是一级一级依赖的,第二范式建立在第一范式上,第三范式 建立第一第二范式上。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦雨Chili

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值