我正在尝试寻找一个很好的资源来研究功能依赖性和规范化。
有人知道我应该去哪里看吗?我很难区分 FD 是 1NF、2NF 还是 3NF?
我一直在阅读维基百科并使用谷歌搜索来找到很好的研究,但找不到任何简单的解释。
也许你们都可以分享你在生活中是如何学习 FD 和正常化的。
我正在尝试寻找一个很好的资源来研究功能依赖性和规范化。
有人知道我应该去哪里看吗?我很难区分 FD 是 1NF、2NF 还是 3NF?
我一直在阅读维基百科并使用谷歌搜索来找到很好的研究,但找不到任何简单的解释。
也许你们都可以分享你在生活中是如何学习 FD 和正常化的。
功能依赖定义了属性之间的功能关系。例如:PersonId
功能确定BirthDate
(通常写为PersonId -> BirthDate
)。另一种说法是:任何给定的人实例都有一个出生日期。请注意,反过来可能是正确的,也可能不是。许多人可能在同一天出生。给定一个BirthDate
我们可能会发现许多PersonId
共享该日期。
函数依赖集可用于合成关系(表)。前 3 个范式的定义,包括 Boyce Codd 范式 (BCNF),是根据给定的一组关系如何表示函数依赖关系来说明的。第四和第五范式涉及多值依赖(另一锅鱼)。
这里有一些关于功能依赖、规范化和数据库设计的免费资源。准备好在学习本材料时锻炼您的大脑和数学技能。
以下是来自各个学术网站的“幻灯片”...
以下为学术论文。阅读量大,但值得努力。
如果你对这个主题非常感兴趣,我建议你花钱买一本关于关系数据库设计主题的好书。例如:CJ Date 的数据库系统简介
函数依赖是表列之间的约束。例如在表中的人:
社会保障号 | 姓名 | 出生日期 | 地址 | 电话号码 -------------------------------------------------- ---------------------- 123-98-1234 | 辛迪哭 | 15-05-1983 | 洛杉矶 | 123-456-7891 121-45-6145 | 约翰奥尼尔 | 30-01-1980 | 巴黎 | 568-974-2562 658-78-2369 | 约翰兰诺 | 30-01-1980 | 达拉斯 | 963-258-7413
在这里,SSN(社会安全号码)列中的值决定了名称、出生日期、地址和电话号码列中的值。这意味着如果我们在 SSN 列中有两行具有相同的值,那么列名称、出生日期、地址和电话号码中的值将相等。SSN 为 123-98-1234 的人总是被称为 Cindy Cry,出生于 1983 年 5 月 15 日,依此类推。这种情况称为功能依赖。
函数依赖的概念用于定义第二和第三范式,以及 Boyce-Codd 范式 (BCNF)。
要阅读有关函数依赖和规范化的更多信息,您可以阅读著名的学术书籍,例如 CJ Date 的数据库简介,或H. Garcia-Molina、J.Ullman、J.Widom 三人组的任何书籍。
如果您想要一种不太正式的方法,我们将在公司博客上发布一系列关于数据规范化的帖子。
我们可以通过假设我们有两个属性并且一个属性完全依赖于另一个属性的方式来理解功能依赖,这称为功能依赖。
说一个现实生活中的例子。我们知道,每个人都有一个社会安全号码,而不是个人姓名。假设弗兰克是一个人,我们想知道这个人的社会安全号码,但数据库将无法提供这些信息,因为可能有很多人名叫弗兰克,但我们可以根据社会安全号码确定人名,所以该人完全依赖社会安全号码。
函数依赖不是任何正常的形式。范式是满足某些给定 FD 集的关系的属性。
不要依赖维基百科或谷歌。来自在线资源的错误信息和垃圾太多。尝试:
功能依赖
功能依赖可以定义为关系中的属性之间存在的关系。函数依赖用于在 Boyce Codd 范式中创建关系,缩写为 BCNF。如果 C 和 D 是关系 R 的属性,并且属性 C 在功能上确定属性 D,则两个属性之间的功能依赖关系可以表示为 C->D。
示例:在人员架构下方
人(国民身份证,姓名,地址);
这里national_id 在功能上确定了person_name。所以功能依赖是national_id -> name;
为了消除冗余,功能依赖在关系数据库设计中很重要。