数据库中的范式

数据库范式
实体:类比为类
属性:类比为类中的属性
元组:表中的一行就是一个元祖,(相当于一个对象)
分量:就像一个对象中某个属性的值
数据库范式的作用取出进行数据库设计时字段、表、划分的 依据

1.第一范式(1FN):

**每一列保持原子特性,列是基本数据项。不能再进行拆分,如果不符合原子特性,需将此属性拆分
例:学生表(学生ID、姓名、年龄、地址) 主键(学生id)
—> 此表中地址不满足原子性,仍然可以进行拆分拆分之后:

学生表(学生id,姓名、年龄、地址id) 主键(学生id) 外键(地址iid)
地址表(地址id、国籍、省、市、县区) 主键(地址id)
总结:
关于列不可再分,需根据实际情况来定,利于开发就行。**

2、第二范式(2FN): 消除冗余

非主键属性完全依赖于主键(主要针对联合主键–>消除部分依赖)消除冗余信息。
如果非主属性只依赖部分主键,应该拆分成为新的表,(一对多 )(就是一类数据个表,不能一个表中什么数据都放)

例: 用户表(ID,名字,性别,公司ID, 公司信息) 主键(id,公司ID)
分析: 这张表中包含的信息太多,姓名和性别只是依赖id,公司信息依赖的的是公司id,所以这张表是两类信息放在一张表中,造成信息冗余,
修改:
建一张用户表,储存用户信息 用户表(id,姓名,性别 ) 主键(id)
建一张公司表,存储公司信息 公司表(公司ID,公司信息) 主键(公司id)
建一张关系表,连接用户和公司 用户公司表( ID,公司ID)

3、第三范式(3NF): 消除依赖传递

在2NF的基础之上,属性不依赖与其他非主属性(消除依赖传递)
解决方案,使用外键
例:学生信息表(学生编号,学生姓名,班级编号,班级名称) 主键 (学生编号)
分析;
1、班级名称字段存在冗余,因为班级名称没有依赖主键学生编号
2、存在依赖传递,班级名称依赖班级编号, 而班级编号又依赖于学生编号
解决方案:
建立学生表 (学生编号,学生姓名,班级编号) 主键(学生编号) 外键(班级编号)
建立班级表 (班级编号,班级名称) 主键(班级编号)

注意第二范式和第三范式的区别:
第二范式主要是针对联合主键中的部分依赖
第三范式是针对单个主键中的依赖传递
BCNF/4NF/5NF......

4、应用范式越高,表越多,因此带来的问题如下:
1、 查询时需要连续剧多个表,增加查询复杂性
2.、查询时需要连接多个表,降低查询性能
由此:一般只需要满足三范式即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值