我正在寻找一些学习函数依赖和规范化的好资源。
有没有人知道应该去哪里找?我很难区分一个FD是否在1NF、2NF或3NF中。
我一直在阅读维基百科并使用谷歌搜索好的研究资料,但是找不到任何用简单术语解释的资料。
也许你们可以分享一下在生活中如何学习FD和规范化。
我正在寻找一些学习函数依赖和规范化的好资源。
有没有人知道应该去哪里找?我很难区分一个FD是否在1NF、2NF或3NF中。
我一直在阅读维基百科并使用谷歌搜索好的研究资料,但是找不到任何用简单术语解释的资料。
也许你们可以分享一下在生活中如何学习FD和规范化。
一个函数依赖定义了属性之间的函数关系。例如:PersonId
决定了 BirthDate
(通常写作 PersonId -> BirthDate
)。换句话说:对于任何给定的人,只有一个出生日期。请注意,反过来可能成立也可能不成立。许多人可能在同一天出生。给定一个 BirthDate
,我们可以找到许多共享该日期的 PersonId
。
函数依赖的集合可用于合成关系(表)。前三个范式的定义,包括 Boyce Codd 范式(BCNF),都是根据给定关系表示函数依赖来说明的。第四和第五范式涉及多值依赖(另一个问题)。
以下是有关函数依赖、规范化和数据库设计的一些免费资源。在学习这些材料时,请准备好运用您的大脑和数学技能。
以下是各种学术网站上的“幻灯片展示”...
以下是学术论文。阅读较为繁重,但非常值得努力。
如果您真的对这个主题感兴趣,我建议您花钱购买一本好的关于关系数据库设计的书籍,例如:C.J. Date的《数据库系统简介》
SSN | Name | Date of birth | Address | Phone number ------------------------------------------------------------------------ 123-98-1234 | Cindy Cry | 15-05-1983 | Los Angeles | 123-456-7891 121-45-6145 | John O'Neill | 30-01-1980 | Paris | 568-974-2562 658-78-2369 | John Lannoy | 30-01-1980 | Dallas | 963-258-7413在这里,列SSN(社会安全号码)中的值决定了列名、出生日期、地址和电话号码中的值。这意味着如果我们有“两行具有相同的SSN列值”,那么列名、出生日期、地址和电话号码中的值“将是相等的”。拥有SSN 123-98-1234的人总是被称为Cindy Cry,出生于15-05-1983年,等等。这种情况被称为“功能依赖”。
要了解有关函数依赖和规范化的更多信息,您可以阅读像C.J. Date的《数据库系统概念》等知名学术书籍,或者是H. Garcia-Molina、J.Ullman、J.Widom三位作者所写的任何图书。
如果您想要一种较不正式的方法,我们在公司博客上开始发布有关数据规范化的系列文章。
函数依赖
函数依赖可以被定义为关系中属性之间存在的关系。函数依赖用于创建 Boyce Codd 正规化(BCNF)中的关系。如果属性 C 函数确定属性 D,则 R 关系中的属性 C 和 D 之间的函数依赖可以表示为 C -> D。
例如:以下是 person 模式:
person(national_id, name, address);
在这里,national_id 函数决定了 person_name。因此,函数依赖是 national_id -> name;
在关系数据库设计中,函数依赖对于消除冗余非常重要。