功能依赖和规范化

时间:2010-11-16 21:57:25

标签: database database-normalization functional-dependencies

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

任何人都知道我应该在哪里看?我难以区分FD是1NF,2NF还是3NF?

我一直在阅读维基百科,并使用谷歌搜索找到了很好的研究,但找不到任何简单的解释。

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

6 个答案:

答案 0 :(得分:33)

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

可以使用函数依赖集来合成关系(表)。的定义 前三种常规形式,包括Boyce Codd Normal Form(BCNF),用以下方式表示 一组给定的关系如何表示功能依赖性。第四和第五范式涉及多值依赖(另一个鱼群)。

以下是一些有关功能依赖性,规范化和数据库设计的免费资源。 在学习这些材料时,要准备好运用你的大脑和数学技能。

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

以下是学术论文。阅读较重但值得付出努力。

如果你对这个主题感兴趣,我建议你把现金拿出来换一本好书 关于关系数据库设计的主题。例如:An Introduction to Database Systems by C.J. Date

答案 1 :(得分:7)

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

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,依此类推。这种情况称为功能依赖

功能依赖的概念用于定义第二和第三范式,以及Boyce-Codd普通形式(BCNF)。

要阅读有关功能依赖性和规范化的更多信息,您可以访问当时着名的学术着作,如C.J.Date的数据库简介,或任何books by the H. Garcia-Molina, J.Ullman, J.Widom trio

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

答案 2 :(得分:4)

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

说一个现实生活中的例子。我们知道每个人都有一个针对该人姓名的社会安全号码。说弗兰克是一个人,我们想知道这个人的社会安全号码,但数据库将无法帮助这些信息,因为可能有许多名为坦率的人,但我们可以确定人的姓名反对社会安全号码所以该人完全依赖社会安全号码。

答案 3 :(得分:3)

功能依赖不是任何正常形式。正规形式是满足某些给定FD的关系的属性。

不要依赖维基百科或谷歌。来自网上消息来源的错误信息和垃圾太多了。尝试:

Introduction to Database Systems by Chris Date

Practical Issues in Database Management by Fabian Pascal

答案 4 :(得分:2)

  

什么是功能依赖?

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

  

什么是数据库规范化?

数据库规范化是一个逐步正式的过程,它允许我们以这样的方式分解数据库表:数据冗余和更新异常(参见上面有关更新异常的更多信息)被最小化。

enter image description here Courtesy

答案 5 :(得分:0)

功能依赖

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

示例:人员架构

下方

person(national_id,name,address);

这里national_id在功能上决定了person_name。功能依赖是national_id - >名;

功能依赖在关系数据库设计中非常重要,目的是消除冗余。