数据库“三范式“简析

本文详细介绍了数据库设计中的第一、第二和第三范式,包括每个范式的概念、举例说明了不符合范式的问题以及相应的解决策略。同时,文章指出在数仓构建中,出于性能考虑,通常会采用‘反范式’设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.第一范式:列不可分->表的每一列都是最小的原子,不可以被再分;
例:

该表中,系这个属性就可以被分割,并不符合原子性的特征,因此不符合"第一范式".
注意:标准的数据库建模必须在符合第一范式的前提下,符合第二范式,再符合第三范式.
解决方法:

对"系"列进行改造,将"系名"和"系主任"拆分成两列.

2.第二范式:消除部分依赖->非主键字段完全依赖于主键,而不是主键的一部分.
例:

表中主键为"学号+课程号",但是"姓名","系名","系主任"只依赖于"学号",不依赖于"课程名",因此表中字段存在部分依赖,不符合第二范式.

解决方法:


将原表拆分成"学生表"和"选课表"两张表.学生表记录"系名","系主任"和学生的对照信息,"选课表"记录"课程","分数"和学生的对照信息.

3.第三范式:消除传递依赖->非主键字段完全依赖于主键,而不依赖于非主键.

例:

在上述的"学生表"中,主键为"学号",而表中"系主任"却依赖于"系名"字段,"系名"字段依赖于主键"学号".因此在该表中存在传递依赖,不符合第三范式.

解决方法:

 

 

将"学生表"拆分成"学生表"和"系表"两张表,通过外键"系名"关联.

补充:在数仓的构建和建模中,由于指标分析的需要和对查询性能的要求,较多应用场景下会采取星型模型,减少事实表和维表的关联次数以保证查询效率.因此数仓的构建往往遵循"反范式"原则.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值