MySQL设计三范式

MySQL设计三范式

MySQL设计三范式是关系型数据库设计中的基本规范,旨在减少数据冗余,确保数据的一致性和完整性。‌

三范式包括第一范式(1NF)、第二范式(2NF)和第三范式(3NF),它们之间具有递进关系,每一范式都是在前一范式的基础上进一步规范化的结果。

第一范式(1NF)

第一范式要求表中的每个字段都是原子性的,即字段中的值不可再分。例如,如果一个字段包含了多个值(如电话号码包含多个数字),则需要将这个字段拆分成多个字段。第一范式的目的是消除重复的数据,确保数据的原子性。通过满足第一范式,可以减少数据冗余,提高数据的存储效率‌。

例如:有如下一张学生表

学生id学生姓名电话
1张三

123456,123135

这个设计违背了第一范式,因为电话号码字段存储了多个值。需要将其拆分成多行:

学生id学生姓名电话
1张三

123456

1张三

123135

第二范式(2NF)

第二范式建立在第一范式的基础上,要求表中的非主键字段必须完全依赖于主键,而不是部分依赖。这意味着如果主键是由多个字段组成的复合主键,那么表中的每个非主键字段都必须依赖于这个复合主键的每一个部分。违反第二范式的常见情况是某些字段仅依赖于主键的一部分,这会导致数据冗余和更新异常。通过满足第二范式,可以进一步减少数据冗余,确保数据的完整性‌。

例如:有如下一张成绩表

学生id课程id学生姓名课程名称成绩
1100张三语文90
1101张三数学99

这个设计违背了第二范式,在这个表中,学生姓名依赖于学生ID,课程名称依赖于课程ID。由于学生ID和课程ID组成了复合主键,学生姓名和课程名称是对主键部分依赖的。需要将表拆分为三个表:

学生表

学生id学生姓名
1张三

课程表

课程id课程名称
100语文
101数学

成绩表

学生id课程id成绩
110090
110199

第三范式(3NF)

第三范式建立在第二范式的基础上,要求表中的非主键字段之间不能存在传递依赖关系。即非主键字段不能依赖于另一个非主键字段,而这个非主键字段又依赖于主键。违反第三范式的常见情况是某些字段通过其他字段间接依赖于主键,这会导致数据更新时出现异常。通过满足第三范式,可以进一步减少数据冗余和更新异常,确保数据的准确性‌。

例如:有如下一张员工表

员工id员工姓名部门id部门名称
1张三D1运维部门
1李四C2财务部门

这个设计违背了第三范式,在这个表中,部门名称依赖于部门ID,而部门ID依赖于员工ID(主键)。这种依赖是传递的。需要将表再拆分:

员工表

员工id员工姓名部门id
1张三D1
1李四C2

部门表

部门id部门名称
D1运维部门
C2财务部门
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

韩未零

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

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

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

打赏作者

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

抵扣说明:

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

余额充值