【问题标题】:Functional dependency and normalization功能依赖和规范化
【发布时间】:2010-11-16 21:57:24
【问题描述】:

我正在努力寻找一个很好的资源来研究功能依赖性和规范化。

有人知道我应该去哪里吗?我很难区分 FD 是 1NF、2NF 还是 3NF?

我一直在阅读 Wikipedia 并使用 Google 搜索来找到很好的研究,但找不到任何简单的解释。

也许你们都可以分享一下你在生活中是如何学习 FD 和正常化的。

【问题讨论】:

    标签: database database-normalization functional-dependencies


    【解决方案1】:

    函数依赖定义了属性之间的函数关系。例如:PersonId 在功能上确定BirthDate(通常写为PersonId -> BirthDate)。另一种说法是:任何给定的人实例都有一个出生日期。请注意,反过来可能是正确的,也可能不是。许多人可能在同一天出生。给定一个BirthDate,我们可能会发现许多PersonId 共享该日期。

    函数依赖集可用于合成关系(表)。的定义 前 3 个范式,包括 Boyce Codd 范式 (BCNF) 一组给定的关系如何表示功能依赖关系。第四和第五范式涉及多值依赖(又一锅鱼)。

    这里有一些关于功能依赖、规范化和数据库设计的免费资源。 准备好在学习本材料时锻炼您的大脑和数学技能。

    以下是来自各个学术网站的“幻灯片”...

    以下是学术论文。阅读量较大,但值得努力。

    如果你对这个主题非常感兴趣,我建议你花钱买一本好书 关于关系数据库设计的主题。例如:An Introduction to Database Systems by C.J. Date

    【讨论】:

    • 感谢您的所有解释,我只是想在考试中全面了解这一点
    • 4NF 涉及多值依赖 (MVD),而 5NF 涉及连接依赖 (JD)。但是二进制 JD 对应于一对 MVD(无论如何都是成对出现的)。所以“第 4 和第 5 个 NF 涉及”JD(不是 MVD)。
    【解决方案2】:

    函数依赖是表列之间的约束。例如表中的人:

    社会保障号 |姓名 |出生日期 |地址 |电话号码 -------------------------------------------------- ---------------------- 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)。

    要阅读有关函数依赖和规范化的更多信息,您可以阅读当时著名的学术书籍,例如 C.J. Date 的 Introduction to Databases 或任何books by the H. Garcia-Molina, J.Ullman, J.Widom trio

    如果您想要一种不太正式的方法,我们是starting a series of posts on data normalization on our company blog

    【讨论】:

    • 您的意思是,列集之间或列集与列之间的约束。 (无论“之间”应该是什么意思。)但是:FD 是通过给出 2 个列集或一个列集和一个列来表示的,但这不是它们“之间”的约束,而是对整个表的约束(值或变量)也涉及它们。
    【解决方案3】:

    我们可以通过假设我们有两个属性和一个属性完全依赖另一个属性的方式来理解函数依赖,这称为函数依赖。

    举一个现实生活中的例子。我们知道,每个人都有一个社会安全号码,而不是个人姓名。假设弗兰克是一个人,我们想知道这个人的社会安全号码,但数据库将无法提供这些信息,因为可能有很多人名叫弗兰克,但我们可以根据社会安全号码确定人名,所以该人完全依赖社会安全号码。

    【讨论】:

      【解决方案4】:

      什么是函数依赖?

      功能依赖是规范化过程的基础功能依赖描述了表中属性(列)之间的关系。 换句话说,依赖 FD: X → Y 意味着 Y 的值由 X 的值决定。共享相同 X 值的两个元组必然具有相同的 Y 值。

      什么是数据库规范化?

      数据库规范化是一个循序渐进的正式过程,它允许我们以最小化数据冗余和更新异常(有关更新异常的更多信息,请参见上文)的方式分解数据库表。

      Courtesy

      【讨论】:

      • NF 的条件越来越强。但是我们不是通过通过较低的 NF 进行归一化来归一化到给定的 NF,我们使用目标 NF 的算法。这并不矛盾,但文本和/或第二张图可能会采用这种方式,因为该图是在谈到标准化作为一个过程之后立即给出的。
      【解决方案5】:

      函数依赖不是任何正常的形式。范式是满足某些给定 FD 集的关系的属性。

      不要依赖维基百科或谷歌。来自在线资源的错误信息和垃圾太多。试试:

      Introduction to Database Systems by Chris Date

      Practical Issues in Database Management by Fabian Pascal

      【讨论】:

        【解决方案6】:

        函数依赖

        功能依赖可以定义为关系中的属性之间存在的关系。函数依赖用于在 Boyce Codd 范式中创建关系,缩写为 BCNF。如果 C 和 D 是关系 R 的属性,并且属性 C 在功能上决定属性 D,则两个属性之间的功能依赖关系可以表示为 C->D。

        示例:在人员架构下方

        人(国民身份证、姓名、地址);

        这里的national_id 在功能上确定了person_name。所以功能依赖是national_id -> name;

        为了消除冗余,函数依赖在关系数据库设计中很重要。

        【讨论】:

          猜你喜欢
          • 2015-04-08
          • 2015-06-28
          • 1970-01-01
          • 2016-03-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-06-25
          • 1970-01-01
          相关资源
          最近更新 更多