数据库设计思想(三范式)

本文详细解析了数据库设计中的三个核心范式:第一范式强调数据不可再分,确保表为二维形式;第二范式关注唯一性和消除部分依赖,确保非主键字段完全依赖主键;第三范式要求数据独立,消除传递依赖。通过实例分析,解释了如何通过范式理论优化数据库结构,减少冗余和提高数据一致性。

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

第一范式(1Nf):(原性,数据不可再分)

定义:数据库表中所有字段都是单一的属性,不可再分的。换句话说,第一范式要求数据库中的表都是二维表。
这里写图片描述
用户信息出现了复合属性,不具有原性(数据可再分),不符合第一范式。
修正后:
这里写图片描述
此时,每一项信息都是不可再分的了,就符合了原性(数据不可再分)。

第二范式(2NF):唯一性,消除部分依赖。

定义:每一行数据具有唯一性,所有的非主键字段必须完全依赖于主键。消除部分依赖。
第二范式必须满足第一范式。
什么叫做依赖:就是在一个表中,某个字段的值可以由另一个字段的值来“决定”如:学号是主键,姓名,年龄,性别依赖于学号。主键决定了其他字段,其他字段依赖与主键。
**什么叫做部分依赖:**如果某个字段,只依赖与“部分主键”,此时为部分依赖,也就是主键字段有多个。
什么叫做完全依赖:某个字段依赖与主键的所有字段。
这里写图片描述
这个表虽然满足第一范式,因为每个数据都是不可在分的,但其中有冗余性,学生信息和课程信息冗余。使学生姓名和课程名称作为了联合主键(主键的字段有多个),从表中看出学生的性别籍贯只跟姓名有关,学分只跟课程名称有关,跟学生姓名那个主键无关。(所以产生了部分依赖)所以不符合第二范式。
修正后的表:
这里写图片描述

第三范式(3NF):独立性,消除传递依赖

定义:第三范式必须满足第二范式,与主键列没有直接关系的数据必须消除。每个字段都独立依赖于主键。
这里写图片描述

学生ID决定姓名,性别,籍贯,所在系,系办地址,系办电话。但是还有另一个非主键的依赖在里边,所在系决定戏办地址,系办电话。既确定了一个学生所在系后,也就确定了他的系办所,而这里系办地址电话同过系确定了,系同过学生ID确定,这就产生了传递依赖。
也可以说系地址电话依赖了另一个非主键(所在系)违反了第三范式,实际应用中第三范式明显要求是,一个表中记录一种数据,而当前表记录了二种信息,所以要拆解为”学生信息“和”院系信息“。
修正后:
这里写图片描述

总结:

基本只要遵循 ——每个数据使用一个表来储存,就可满足以上三个范式要求。

评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值