跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
第四范式(4NF)
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
{{DISPLAYTITLE:第四范式(4NF)}} '''第四范式(Fourth Normal Form, 4NF)'''是关系数据库规范化理论中的一种高级范式,用于消除[[多值依赖]](Multivalued Dependency, MVD)导致的数据冗余。它是[[第三范式(3NF)]]的进一步扩展,适用于处理更复杂的数据关系。 == 简介 == 第四范式要求一个关系模式(表)必须满足以下条件: 1. 该表已满足[[第三范式(3NF)]]。 2. 表中不存在非平凡的多值依赖(Non-trivial Multivalued Dependency)。 多值依赖是指,对于表中的属性集合X、Y和Z,如果对于X的每一个值,Y的取值与Z的取值无关(即Y和Z相互独立),则称Y多值依赖于X(记作X →→ Y)。如果Z不为空(即Y和Z的取值不完全由X决定),则该多值依赖是非平凡的。 数学表达式为: <math>X \rightarrow\rightarrow Y \mid Z</math> == 多值依赖的判定 == 多值依赖的判定可以通过以下规则: * 若X →→ Y,则X →→ Z(其中Z = R - X - Y)。 * 若X → Y,则X →→ Y(即函数依赖是多值依赖的特例)。 == 4NF的规范化步骤 == 要将一个表规范化为4NF,需执行以下步骤: 1. 确保表已满足3NF。 2. 检查是否存在非平凡的多值依赖。 3. 若存在,则将表分解为多个表,每个表仅包含一个多值依赖。 === 示例 === 假设有一个表存储学生选修课程和兴趣爱好的信息: {{!}}- {{!}} 学生ID {{!}}{{!}} 课程 {{!}}{{!}} 兴趣爱好 {{!}}- {{!}} S1 {{!}}{{!}} 数学 {{!}}{{!}} 足球 {{!}}- {{!}} S1 {{!}}{{!}} 数学 {{!}}{{!}} 音乐 {{!}}- {{!}} S1 {{!}}{{!}} 物理 {{!}}{{!}} 足球 {{!}}- {{!}} S1 {{!}}{{!}} 物理 {{!}}{{!}} 音乐 {{!}}- {{!}} S2 {{!}}{{!}} 化学 {{!}}{{!}} 绘画 {{!}}- 该表存在多值依赖: * 学生ID →→ 课程 * 学生ID →→ 兴趣爱好 为了消除冗余,将其分解为两个表: '''表1:学生-课程关系''' {{!}}- {{!}} 学生ID {{!}}{{!}} 课程 {{!}}- {{!}} S1 {{!}}{{!}} 数学 {{!}}- {{!}} S1 {{!}}{{!}} 物理 {{!}}- {{!}} S2 {{!}}{{!}} 化学 {{!}}- '''表2:学生-兴趣爱好关系''' {{!}}- {{!}} 学生ID {{!}}{{!}} 兴趣爱好 {{!}}- {{!}} S1 {{!}}{{!}} 足球 {{!}}- {{!}} S1 {{!}}{{!}} 音乐 {{!}}- {{!}} S2 {{!}}{{!}} 绘画 {{!}}- == 实际应用场景 == 4NF常用于以下场景: 1. '''学生选课系统''':学生与课程、兴趣爱好之间存在多值依赖。 2. '''产品属性管理''':产品与颜色、尺寸等多值属性。 3. '''医疗记录''':患者与诊断、药物等多值信息。 === 代码示例 === 以下是一个SQL示例,展示如何创建符合4NF的表: <syntaxhighlight lang="sql"> -- 原始表(未规范化) CREATE TABLE StudentInfo ( StudentID INT, Course VARCHAR(50), Hobby VARCHAR(50), PRIMARY KEY (StudentID, Course, Hobby) ); -- 规范化后的表(4NF) CREATE TABLE StudentCourses ( StudentID INT, Course VARCHAR(50), PRIMARY KEY (StudentID, Course) ); CREATE TABLE StudentHobbies ( StudentID INT, Hobby VARCHAR(50), PRIMARY KEY (StudentID, Hobby) ); </syntaxhighlight> == 4NF与更高范式的区别 == * '''4NF''':消除非平凡多值依赖。 * '''第五范式(5NF)''':进一步消除连接依赖(Join Dependency)。 == 总结 == 第四范式是数据库设计中的重要概念,适用于处理多值依赖导致的数据冗余问题。通过分解表结构,可以提升数据的一致性和查询效率。对于初学者,建议先掌握1NF至3NF,再逐步学习4NF及更高范式。 == 参见 == * [[第一范式(1NF)]] * [[第二范式(2NF)]] * [[第三范式(3NF)]] * [[多值依赖]] [[Category:计算机科学]] [[Category:数据库与信息系统]] [[Category:关系数据库理论]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)