首先我们给出 键码的定义 如下
定义:已知
R
是属性集 U 的关系模式,F是属性集 U 上的一组函数依赖,设 K 为R
中的属性或属性组合,若K ⇒ U - K 且 K 的任何真子集都不能决定 U,则 K 为R的键码
然后大家还要记住的一个东西就是【超键码】,它是 “键码的超集” 的简称。
当一个属性集中出现多个键码的时候,就选定其中的一个作为 主键码
例1:考虑关系模式:人(身份证号,姓名,性别,住址,出身年月),且有函数依赖集:
F = {
身份证号 ⇒ (姓名,性别,住址,出身年月),
(姓名,住址)⇒ (身份证号,住址,出身年月)
}
下面我们再来看一个 全码 的例子
例2:考虑关系模式R(演奏者,作品,听众)
有了【键码】的一些知识后,我们就可以来学习一下 闭包 这个东西了
首先我们来讲讲闭包的基本概念:
假设 A = {A1, A2, A3,…, An}是属性集,F是函数依赖集。属性集A在函数依赖集F下的闭包是这样的属性集X,那么A1A2An ⇒ X是蕴含于F中的函数依赖。此时我们就可以用{A1, A2, An}+ 来表示属性集A1A2…An的闭包
然后我们来看闭包的计算规则:
B1B2...Bm
⇒ C,使得所有B1B2...Bm
都在属性集X中,但是C不在其中,于是将C加到属性集X中l看完了闭包的计算规则,我们马上来实战演练一下吧
例3:让我们来考虑一个关系R(A, B, C, D, E, F),其函数依赖集为F = {AB ⇒ C,BC ⇒ AD,D ⇒ E,CF ⇒ B},试计算 {A, B} 的闭包{A, B}+
例4:已知关系模式R(A, B, C, D),其函数依赖集为F = {AB ⇒ C,C ⇒ D,D ⇒ A},求蕴含于给定函数依赖的所有非平凡函数依赖和键码
例5:若R(A, B, C, D, E),其函数依赖集为F = {AB ⇒ C, B ⇒ D, D ⇒ E, C ⇒ B},试求关系模式R的键码
那么通过这三道例题的讲解相信读者一定了解了闭包是如何地去进行计算的
最后我们来总结一下本文所学习的内容