顺德手机网站设计咨询网站运营公司哪家效果好
web/
2025/9/27 15:30:43/
文章来源:
顺德手机网站设计咨询,网站运营公司哪家效果好,新乡做企业网站的公司,个人可以做企业网站在数据库设计中#xff0c;范式#xff08;Normal Forms, NF#xff09;是用来规范化数据库表结构#xff0c;以减少冗余数据和提高数据一致性与完整性的重要工具。
函数依赖
完全函数依赖与部分函数依赖
完全函数依赖
定义#xff1a; 完全函数依赖表示的是在一个关系…在数据库设计中范式Normal Forms, NF是用来规范化数据库表结构以减少冗余数据和提高数据一致性与完整性的重要工具。
函数依赖
完全函数依赖与部分函数依赖
完全函数依赖
定义 完全函数依赖表示的是在一个关系中若某个非主属性数据项依赖于全部关键字则称这种依赖为完全函数依赖。换句话说如果非主属性B函数依赖于构成某个候选关键字的一组主属性A而且A的任何一个真子集不能被B函数依赖则称B完全函数依赖于A。
举例 以成绩表为例该表包含 学号课程号成绩 学号课程号成绩 学号课程号成绩三个属性。其中 学号课程号 学号课程号 学号课程号是一个候选键因为它们共同确定了一个唯一的成绩。
完全函数依赖在这个例子中 学号课程号 → 成绩 学号课程号→ 成绩 学号课程号→成绩是一个完全函数依赖。因为成绩完全依赖于学号和课程号的组合单独的学号或课程号都不能确定成绩。
部分函数依赖
定义 部分函数依赖是指在一个关系中如果 X → Y X→Y X→Y并且存在 X X X的一个真子集 X 0 X₀ X0使得 X 0 → Y X₀→Y X0→Y则称 Y Y Y对 X X X部分函数依赖。这意味着 Y Y Y不仅依赖于 X X X的全部还依赖于 X X X的某个真子集。
举例 以成绩表为例假设该模式包含 学号课程号成绩年龄 学号课程号成绩年龄 学号课程号成绩年龄四个属性。
部分函数依赖在这个例子中如果 学号 学号 学号能单独确定 年龄 年龄 年龄而 学号课程号 学号课程号 学号课程号共同确定 成绩 成绩 成绩。那么 学号课程号 → 年龄 学号课程号→ 年龄 学号课程号→年龄就是一个部分函数依赖因为 年龄 年龄 年龄不仅依赖于 学号课程号 学号课程号 学号课程号的组合还依赖于 学号 学号 学号这个真子集。
归纳
完全函数依赖强调的是非主属性对全部关键字的依赖即不存在关键字的真子集能够确定非主属性。部分函数依赖则允许非主属性对关键字的某个真子集也存在依赖关系。
范式
第一范式1NF - First Normal Form
定义 1NF要求数据库表中的每个列或称为属性、字段都包含不可再分的原子数据也就是说每个单元格中只包含一个值。不应该有多值属性或重复组。
要点
每个表中的每一列都必须包含不可再分的原子数据。表中的每一行必须具有唯一的标识符通常是主键。
举例
假设我们有一个表示图书信息的表初始设计如下
图书信息图书号书名作者出版社……………示例123《编程基础》;《数据库原理》李四,王五清华大学出版社;机械工业出版社
这个表不满足1NF因为“书名”和“作者”列包含了多个值由分号分隔它们是可以再分的。为了满足1NF我们需要将这些列拆分为多个列如下
图书号书名1作者1出版社1书名2作者2出版社2123《编程基础》李四清华大学出版社《数据库原理》王五机械工业出版社
但上述设计仍然不是最佳实践因为它引入了不必要的冗余。更常见的方法是将每本书的信息分别存储在不同的行中如下所示
图书号书名作者出版社123《编程基础》李四清华大学出版社456《数据库原理》王五机械工业出版社
第二范式2NF - Second Normal Form
定义 2NF建立在1NF的基础上要求关系模式中的所有非主属性都完全依赖于候选键或称为主键而不是仅依赖于候选键的一部分。
要点
满足1NF。非主属性必须完全依赖于候选键。
举例
假设我们有一个表示学生选课信息的表初始设计如下
学号课程号成绩课程学分…………N01C01903N01C02854N02C01883
在这个例子中学号SNO和课程号CNO的组合是主键候选键。然而“课程学分”这一非主属性仅依赖于课程号CNO而不是完全依赖于主键SNO, CNO。这违反了2NF。
为了满足2NF我们需要将“课程学分”这一属性移到一个新的表中该表以课程号CNO为主键如下所示
表1选课信息
学号课程号成绩N01C0190N01C0285N02C0188
表2课程信息
课程号课程学分C013C024
这样我们就通过分解原始表来满足了2NF减少了数据冗余并提高了数据一致性。
第三范式3NF - Third Normal Form
定义 3NF建立在2NF的基础上要求关系模式中的所有非主属性都不传递依赖于候选键。
换句话说如果非主属性A依赖于另一个非主属性B而B又依赖于候选键C那么A不能直接依赖于B而必须直接依赖于C。
要点
满足2NF。消除传递依赖。
举例
考虑一个表示学生信息的表其中包含了学生、课程、成绩以及课程对应的教师信息。
原始设计可能如下
学生ID学生姓名课程号课程名成绩教师ID教师姓名…………………
在这个例子中学生ID和课程号的组合是主键候选键。
然而“教师姓名”这一非主属性仅依赖于“教师ID”而“教师ID”又依赖于“课程号”。
这构成了一个传递依赖因为“教师姓名”间接地依赖于主键的一部分即“课程号”而不是直接依赖于整个主键学生ID和课程号。
为了满足3NF我们需要将“教师”相关的信息移到一个新的表中如下所示
表1学生选课信息
学生ID学生姓名课程号成绩…………
表2课程信息
课程号课程名教师ID………
表3教师信息
教师ID教师姓名……
Boyce-Codd范式BCNF - Boyce-Codd Normal Form
定义 BCNF是由Boyce和Codd提出的它比3NF更为严格。BCNF要求关系模式中的所有属性包括主属性都不传递依赖于候选键。
要点
所有非主属性对每一个候选键都是完全函数依赖。所有的主属性对每一个不包含它的候选键也是完全函数依赖。没有任何属性完全函数依赖于非候选键的任何一组属性。
解释 BCNF不仅要求非主属性不传递依赖于候选键还要求主属性也不传递依赖于候选键。这意味着在BCNF中任何属性都不能间接地依赖于候选键的任何一部分。这进一步减少了数据冗余和更新异常的可能性。
由于BCNF的定义较为复杂通常在实际应用中数据库设计者会首先尝试满足1NF、2NF和3NF然后在必要时才考虑BCNF。这是因为满足BCNF的数据库模式可能更加复杂不易于理解和维护。然而在某些情况下特别是在需要高度数据一致性和完整性的应用中BCNF可能是一个有用的工具。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/82838.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!