建设网站需要资料,河南国控建设集团网站,智能小程序搭建,做网站公司融资多少钱好的#xff0c;让我们以学校数据库中的一个表为例来说明第一范式#xff08;1NF#xff09;、第二范式#xff08;2NF#xff09;和第三范式#xff08;3NF#xff09;的概念。
什么是数据库三范式
数据库的范式#xff08;Normalization#xff09;是一组关于数据…好的让我们以学校数据库中的一个表为例来说明第一范式1NF、第二范式2NF和第三范式3NF的概念。
什么是数据库三范式
数据库的范式Normalization是一组关于数据库设计的规则目的是减少数据冗余和改善数据完整性。数据库设计通常遵循三个基本的范式它们分别是 第一范式1NF 原子性表的每一列都是不可分割的基本数据项即表中的所有字段值都是不可再分的原子值。唯一性表的每一行都是唯一的可以通过一个主键Primary Key来区分。 第二范式2NF 在1NF的基础上消除非主属性对于码的部分函数依赖。部分函数依赖是指表中的非主属性只依赖于候选键的一部分而不是整个候选键。为了达到2NF通常需要把表分解成两个或多个表以确保每个表中的非主属性只依赖于该表的主键。 第三范式3NF 在2NF的基础上消除非主属性对于码的传递函数依赖。传递函数依赖是指表中的非主属性依赖于另外一个非主属性这个非主属性依赖于候选键。达到3NF需要进一步分解表以确保每个表中的非主属性只依赖于该表的主键并且没有非主属性依赖于其他非主属性。
这些范式的目标是减少数据冗余即重复数据避免更新异常增强数据的一致性。通常在实际应用中设计到第三范式就足够了但有时候也可能会用到更高级的范式如BCNFBoyce-Codd Normal Form。设计数据库时需要在规范化和性能之间做出权衡因为过度规范化可能会导致查询性能下降。
一个例子讲清三范式
从一个未优化的例子逐步拆表
原始表格未规范化
假设我们有一个记录学生信息和他们选修课程成绩的表格如下所示
学生ID学生姓名选修课程成绩导师姓名导师电话001张三数学, 物理85, 90李教授1234567890002李四化学78王教授0987654321
这个表有多个问题选修课程和成绩字段包含了多个值违反了1NF导师姓名和电话是依赖于学生ID的非主属性违反了2NF导师电话依赖于导师姓名而不是学生ID违反了3NF。
第一范式1NF
要满足1NF表中的每个字段都必须只有单一的不可分割的值不可以有重复的列。
学生ID学生姓名选修课程成绩导师姓名导师电话001张三数学85李教授1234567890001张三物理90李教授1234567890002李四化学78王教授0987654321
现在每个字段都只包含单一值满足了1NF。
第二范式2NF
为了达到2NF我们需要确保表中的所有非主属性完全依赖于主键而不是部分依赖于复合主键的一部分。首先我们确定主键是学生ID和选修课程的组合。然后我们将导师信息移到一个单独的表中因为导师信息依赖于学生ID而不是选修课程。
学生课程表
学生ID选修课程成绩001数学85001物理90002化学78
导师信息表
学生ID导师姓名导师电话001李教授1234567890002王教授0987654321
现在学生课程表满足2NF因为所有非主属性成绩都完全依赖于整个主键。
第三范式3NF
为了满足3NF我们需要确保表中的所有非主属性只依赖于主键不存在传递依赖。我们发现导师电话依赖于导师姓名而不是学生ID。为了消除传递依赖我们将导师信息再次分离成独立的表。
学生课程表保持不变
学生ID选修课程成绩001数学85001物理90002化学78
学生导师关系表
学生ID导师姓名001李教授002王教授
导师信息表
导师姓名导师电话李教授1234567890王教授0987654321
现在每个表都满足3NF因为所有的非主属性都直接依赖于主键不存在非主属性对主键之外的其他非主属性的依赖。通过这些步骤我们实现了数据的规范化减少了数据冗余并提高了数据的完整性。