从功能依赖关系中确定候选键:我们不使用最小超级键的例外情况?
Determining candidate keys from functional dependencies: Exceptions where we don't use the minimal super key?
我目前正在尝试了解函数依赖关系以及如何从中派生候选键。在作业中,我得到了以下关系 R
讲座
房间
日期
N学生
讲师
工具
图形DP
209
周三。 1
53
0210
Overhead-Pr.
图形DP
209
神父。 3
53
0210
Overhead-Pr.
C
413
周二。 1
86
0111
电脑
C
413
周二。 1
86
0111
Overhead-Pr.
C
413
周三。 3
86
0111
电脑
C
413
周三。 3
86
0111
Overhead-Pr.
数学
418
莫。 1
76
0342
董事会
数学
318
星期四2
76
0342
董事会
数据结构
310
神父。 2
32
0550
董事会
数据结构
310
神父。 2
32
0550
Overhead-Pr.
第一个任务是找到关系 R 中所有有意义的 函数依赖。
函数依赖在我们的讲座中定义为
For a relation R with arbitrary attribute sets X and Y, Y is functionally dependent on X (we also say X determines Y) if for all (x1,y1) and all (x2,y2) with x1,x2∈X and y1,y2∈Y holds: x1=x2 ⇒ y1=y2, i.e., any same combination of values in X must condition the same combination of values in Y.
使用这个定义,我确定了以下一组函数依赖性
FD = {讲座 -> (NStudents, Lecturer), (Room, Date) -> (Lecture, Lecturer), (Lecture, Date) -> (Room, Lecturer), (Date, Lecturer) ->讲座,(日期,工具)-> 讲座}
但是,我不知道它们是否有意义,因为没有具体说明有意义的确切含义。
下一个任务是识别候选键。
在我们的讲座中,一个超级键被定义为
Let A be the set of all attributes of a relation R and let K be an
arbitrary attribute set of R.
K is called a superkey if K->A
全功能依赖在我们的讲座中定义为
A functional dependency X -> Y is a full functional dependency if there is no Z⊂X for which Z->Y holds, otherwise X->Y is a partial functional dependency.
因此,候选键定义为
If K->A is a full functional dependency, then K is called a candidate key of R
接下来,我构建了属性闭包集来找到一组满足候选键定义的属性
- (讲座)+ = {N学生,讲师}
- (房间,日期)+ = {房间,日期,讲座,讲师}
由于 NStudents 可以从 Lecture 派生,我将属性添加到闭包集 (Room, Date)+ 因此
- (房间,日期)+ = {房间,日期,讲座,NStudents,讲师}
- (讲座,日期)+ = {讲座,日期,房间,讲师}
由于 NStudents 可以从 Lecture 派生,我再次将 NStudents 添加到属性闭包集
- (讲座,日期)+ = {讲座,日期,房间,讲师,NStudents}
- (日期、讲师)+ = {日期、讲师、讲座}
因为 NStudents 可以从 Lecture 和 Room 派生自 Lecture 和 Date,所以我将这些属性添加到闭包集
- (日期,讲师)+ = {日期,讲师,讲座,NStudents,房间}
- (日期、工具) + = {日期、工具、讲座}
NStudents 和 Lecturer 可以派生自 Lecture,Room 可以派生自 Date 和 Lecturer 或 Date 和 Lecture,所以我将这些属性添加到闭包集
- (日期、工具)+ = {日期、工具、讲座、NStudents、讲师、房间}
如果我没有遗漏任何东西,属性集 {Date, Tool} 是一个功能齐全的依赖项,因为没有 Z->Y 对应的 Z⊂X。
不过,练习的答案是以下属性集:
- {讲座、工具、日期}
- {房间、工具、日期}
- {讲师、工具、日期}
我想知道为什么要添加另一个属性?这一步不会使属性集只是部分功能依赖吗?
通过关系给定一个特定的现实模型,其中包含的功能依赖性来自所表示数据的意义。样本数据集,如你的例子,只能给出模糊的暗示,不能完整表达。
例如,从您的示例中可以得出 Lecturer -> Lecture(反之亦然)的结论,但仅从数据来看,我们无法确定同一 Lecturer 会在特定时间(或反之亦然)进行两个不同的 Lecture。推断依赖关系的另一个示例可能是房间 -> 讲座,因为每个房间都有一个独特的、不同的讲座。
所以,给出一组函数依赖关系的正确方法是知道数据的含义,并用这种表示法表达它们之间的依赖关系。
此外,请注意,不同的函数依赖集可以是等价的(从技术上讲,它们被称为关系中依赖关系的“覆盖”),以不同的方式描述相同的含义。
因此,当需要在特定情况下给出一组 FD 持有时,我们尝试给出最小的依赖集,因为有一些方法可以让我们从中找到所有派生的依赖项,因为通过所谓的阿姆斯特朗公理举例。
当提出一个练习时,就像你的情况一样,我们应该在其中找到“有意义的 函数依赖关系”,我们唯一能做的就是部分地看看数据并部分尝试理解数据的含义,找到一组不太冗余但尽可能多地捕获数据含义的FD。一般来说,最小值主要意味着两件事:a) 具有尽可能小的属性集,以及 b) 具有无法从其他项派生的依赖项。
例如,根据您的数据,可以生成一组这样的数据:
Lecture -> Lecturer
Lecturer -> Lecture
Room -> Lecture
Lecture -> NStudents
NStudents -> Lecture
Tool, Date -> Room
几乎不可能知道集合是否完整并且在一般情况下是真实的(例如,可能有相同数量的学生的讲座,但有不同的学生,而且学生人数只是偶然是相等的),尽管我们可以认为根据显示的数据这是“合理的”。
在这种情况下,假设上面的FD是关系依赖的覆盖(所有其他FD都可以从上面的集合中导出),你认为唯一的候选键是(工具, 日期).
但也许在你的老师的脑海中有其他不存在的数据(或关于模型的其他信息)与这组 FD 相矛盾,因此练习的答案与我们可以从数据中进行的推论不同.
我目前正在尝试了解函数依赖关系以及如何从中派生候选键。在作业中,我得到了以下关系 R
讲座 | 房间 | 日期 | N学生 | 讲师 | 工具 |
---|---|---|---|---|---|
图形DP | 209 | 周三。 1 | 53 | 0210 | Overhead-Pr. |
图形DP | 209 | 神父。 3 | 53 | 0210 | Overhead-Pr. |
C | 413 | 周二。 1 | 86 | 0111 | 电脑 |
C | 413 | 周二。 1 | 86 | 0111 | Overhead-Pr. |
C | 413 | 周三。 3 | 86 | 0111 | 电脑 |
C | 413 | 周三。 3 | 86 | 0111 | Overhead-Pr. |
数学 | 418 | 莫。 1 | 76 | 0342 | 董事会 |
数学 | 318 | 星期四2 | 76 | 0342 | 董事会 |
数据结构 | 310 | 神父。 2 | 32 | 0550 | 董事会 |
数据结构 | 310 | 神父。 2 | 32 | 0550 | Overhead-Pr. |
第一个任务是找到关系 R 中所有有意义的 函数依赖。
函数依赖在我们的讲座中定义为
For a relation R with arbitrary attribute sets X and Y, Y is functionally dependent on X (we also say X determines Y) if for all (x1,y1) and all (x2,y2) with x1,x2∈X and y1,y2∈Y holds: x1=x2 ⇒ y1=y2, i.e., any same combination of values in X must condition the same combination of values in Y.
使用这个定义,我确定了以下一组函数依赖性
FD = {讲座 -> (NStudents, Lecturer), (Room, Date) -> (Lecture, Lecturer), (Lecture, Date) -> (Room, Lecturer), (Date, Lecturer) ->讲座,(日期,工具)-> 讲座}
但是,我不知道它们是否有意义,因为没有具体说明有意义的确切含义。
下一个任务是识别候选键。
在我们的讲座中,一个超级键被定义为
Let A be the set of all attributes of a relation R and let K be an arbitrary attribute set of R.
K is called a superkey if K->A
全功能依赖在我们的讲座中定义为
A functional dependency X -> Y is a full functional dependency if there is no Z⊂X for which Z->Y holds, otherwise X->Y is a partial functional dependency.
因此,候选键定义为
If K->A is a full functional dependency, then K is called a candidate key of R
接下来,我构建了属性闭包集来找到一组满足候选键定义的属性
- (讲座)+ = {N学生,讲师}
- (房间,日期)+ = {房间,日期,讲座,讲师}
由于 NStudents 可以从 Lecture 派生,我将属性添加到闭包集 (Room, Date)+ 因此
- (房间,日期)+ = {房间,日期,讲座,NStudents,讲师}
- (讲座,日期)+ = {讲座,日期,房间,讲师}
由于 NStudents 可以从 Lecture 派生,我再次将 NStudents 添加到属性闭包集
- (讲座,日期)+ = {讲座,日期,房间,讲师,NStudents}
- (日期、讲师)+ = {日期、讲师、讲座}
因为 NStudents 可以从 Lecture 和 Room 派生自 Lecture 和 Date,所以我将这些属性添加到闭包集
- (日期,讲师)+ = {日期,讲师,讲座,NStudents,房间}
- (日期、工具) + = {日期、工具、讲座}
NStudents 和 Lecturer 可以派生自 Lecture,Room 可以派生自 Date 和 Lecturer 或 Date 和 Lecture,所以我将这些属性添加到闭包集
- (日期、工具)+ = {日期、工具、讲座、NStudents、讲师、房间}
如果我没有遗漏任何东西,属性集 {Date, Tool} 是一个功能齐全的依赖项,因为没有 Z->Y 对应的 Z⊂X。
不过,练习的答案是以下属性集:
- {讲座、工具、日期}
- {房间、工具、日期}
- {讲师、工具、日期}
我想知道为什么要添加另一个属性?这一步不会使属性集只是部分功能依赖吗?
通过关系给定一个特定的现实模型,其中包含的功能依赖性来自所表示数据的意义。样本数据集,如你的例子,只能给出模糊的暗示,不能完整表达。
例如,从您的示例中可以得出 Lecturer -> Lecture(反之亦然)的结论,但仅从数据来看,我们无法确定同一 Lecturer 会在特定时间(或反之亦然)进行两个不同的 Lecture。推断依赖关系的另一个示例可能是房间 -> 讲座,因为每个房间都有一个独特的、不同的讲座。
所以,给出一组函数依赖关系的正确方法是知道数据的含义,并用这种表示法表达它们之间的依赖关系。
此外,请注意,不同的函数依赖集可以是等价的(从技术上讲,它们被称为关系中依赖关系的“覆盖”),以不同的方式描述相同的含义。
因此,当需要在特定情况下给出一组 FD 持有时,我们尝试给出最小的依赖集,因为有一些方法可以让我们从中找到所有派生的依赖项,因为通过所谓的阿姆斯特朗公理举例。
当提出一个练习时,就像你的情况一样,我们应该在其中找到“有意义的 函数依赖关系”,我们唯一能做的就是部分地看看数据并部分尝试理解数据的含义,找到一组不太冗余但尽可能多地捕获数据含义的FD。一般来说,最小值主要意味着两件事:a) 具有尽可能小的属性集,以及 b) 具有无法从其他项派生的依赖项。
例如,根据您的数据,可以生成一组这样的数据:
Lecture -> Lecturer
Lecturer -> Lecture
Room -> Lecture
Lecture -> NStudents
NStudents -> Lecture
Tool, Date -> Room
几乎不可能知道集合是否完整并且在一般情况下是真实的(例如,可能有相同数量的学生的讲座,但有不同的学生,而且学生人数只是偶然是相等的),尽管我们可以认为根据显示的数据这是“合理的”。
在这种情况下,假设上面的FD是关系依赖的覆盖(所有其他FD都可以从上面的集合中导出),你认为唯一的候选键是(工具, 日期).
但也许在你的老师的脑海中有其他不存在的数据(或关于模型的其他信息)与这组 FD 相矛盾,因此练习的答案与我们可以从数据中进行的推论不同.