ToB企服应用市场:ToB评测及商务社交产业平台

标题: 数据库范式详解:从第一范式到第五范式 [打印本页]

作者: 宝塔山    时间: 2025-2-12 14:13
标题: 数据库范式详解:从第一范式到第五范式
title: 数据库范式详解:从第一范式到第五范式
date: 2025/2/7
updated: 2025/2/7
author: cmdragon
excerpt:
在数据库设计中,范式是构建高效和可维护数据库的紧张原则。一个良好的数据库范式不但能够消除数据冗余,还能提高数据的完整性和一致性。
categories:
tags:


扫描二维码关注或者微信搜一搜:编程智域 前端至全栈交换与成长
在数据库设计中,范式是构建高效和可维护数据库的紧张原则。一个良好的数据库范式不但能够消除数据冗余,还能提高数据的完整性和一致性。
一、什么是数据库范式

数据库范式是数据库设计中的一种理论底子,用来减少冗余数据并确保数据的依靠关系。范式通过将数据分解成多个表格,并利用外键建立关系来实现数据库的高效管理。范式有差异的级别,从低级范式到高级范式,需求越高,设计越复杂。根本上,数据越是拟合较高的范式,数据的完整性和一致性就越高。
二、第一范式 (1NF)

界说:第一范式要求表中的每个字段都是原子性的,也就是说,表中的每个列不能包含子表或重复的数据。
示例
考虑一个门生选课表,记录了门生和他们所选课程的信息:
门生ID门生姓名选课1张三数学, 英语, 物理2李四化学3王五数学, 化学上述设计并不符合第一范式,由于“选课”字段包含多个值。不符合第一范式的原因在于,数据难以处理,难以确保数据的一致性。
满足第一范式的设计
将“选课”字段分解:
门生ID门生姓名选课1张三数学1张三英语1张三物理2李四化学3王五数学3王五化学上风
三、第二范式 (2NF)

界说:第二范式要求满足第一范式,同时要求表中的每个非主属性完全依靠于主键。也就是说,表中的非主属性不能依靠于主键的一部分。
示例
考虑以下门生选课及课程分数的表:
门生ID课程ID门生姓名课程名称分数1101张三数学901102张三英语852101李四数学75在这个例子中,"门生姓名"和"课程名称"并不是完全依靠于主键(门生ID和课程ID的组合),而是部分依靠。
满足第二范式的设计
创建两个表,一个是门生信息表,另一个是课程信息表:
门生表
门生ID门生姓名1张三2李四选课表
门生ID课程ID分数110190110285210175课程信息可以单独创建一个表格:
课程表
课程ID课程名称101数学102英语上风
四、第三范式 (3NF)

界说:第三范式要求满足第二范式,而且每个非主属性不能依靠于其他非主属性。即在一个表中,任何非主属性必须直接依靠于主键,而不是间接依靠。
示例
考虑门生的成绩表,包含教师的信息:
门生ID课程ID门生姓名教师姓名教师ID1101张三教师AT11102张三教师BT22101李四教师AT1这里,“教师姓名”依靠于“教师ID”,而不是直接依靠于表的主键。
满足第三范式的设计
创建一个教师表,将教师信息单独提取:
门生表
门生ID门生姓名1张三2李四选课表
门生ID课程ID分数教师ID110190T1110285T2210175T1教师表
教师ID教师姓名T1教师AT2教师B上风
五、BCNF(Boyce-Codd 正规形式)

界说:BCNF 要求数据库满足第三范式,但有一个更严酷的规则:任何决定因素都必须是超键。这消除了在处理复杂函数依靠时可能出现的异常。
示例
考虑一个示例,形貌某些课程及其主讲教师:
课程ID教师ID教师姓名教师办公室101T1教师A办公室1101T2教师B办公室2102T1教师A办公室1这里,“教师姓名”和“教师办公室”都依靠于“教师ID”。然而,课程 ID 也是部分唯一决定的,这导致了冗余。
满足 BCNF 的设计
我们可以将上面的示例进行分解,构建多个表:
课程表
课程ID教师ID101T1101T2102T1教师表
教师ID教师姓名教师办公室T1教师A办公室1T2教师B办公室2上风
六、第四范式 (4NF)

界说:第四范式要求满足 BCNF,同时消除多值依靠。即,表中的每个字段都只能依靠于主键而不是别的数据集合。
示例
考虑一个产品与供应商多重属性的表:
产品ID供应商ID国家颜色1S1中国红色1S2美国红色2S1中国蓝色2S2日本蓝色这个表存在多值依靠,即一个产品可以有多个供应商和国家的组合。
满足第四范式的设计
将其拆分为两个表:
产品供应商表
产品ID供应商ID1S11S22S12S2产品颜色表
产品ID颜色1红色2蓝色上风
七、第五星式 (5NF)

界说:第五范式要求满足第四范式,消除连接依靠。即,一个表只能表达一种逻辑形貌。
示例
考虑某一项目与多种角色的表:
项目ID员工ID角色1E1开发者1E2设计师2E1开发者2E3测试员若某个员工在多个项目中担任多个角色,那么就需要对表进行进一步拆分。
满足第五范式的设计
项目员工角色表
项目ID员工ID1E11E22E12E3员工角色表
员工ID角色E1开发者E2设计师E3测试员上风
八、总结

每一种范式都有其特定的应用场景和上风。遵循这些范式,不但能资助我们设计出更加高效、可维护的数据库,还能在数据的完整性、一致性和查询性能等方面提供紧张保障。
随着业务需求的复杂化,数据库范式的紧张性愈加凸显。在现实的项目中,我们需要根据具体情况灵活应用这些范式,选择适合的设计方案,以确保数据库体系的高效、稳定和安全。
余下文章内容请点击跳转至 个人博客页面 或者 扫码关注或者微信搜一搜:编程智域 前端至全栈交换与成长,阅读完整的文章:数据库范式详解:从第一范式到第五范式 | cmdragon's Blog
往期文章归档:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4