在数据库系统中,函数依赖(FD)是关系模式中描述属性间依赖关系的重要概念。这里我们分析提供的练习题目,它们涉及函数依赖、超键和关键属性的理解。
在Exercise 3.1.1中,讨论了可能的函数依赖和候选键。函数依赖表示一个属性(或属性集)可以唯一确定另一个属性。例如:
1. 社会保障号 → 姓名:这表明社会保障号可以唯一确定一个人的姓名。
2. 区号 → 州:区号能确定电话所在州。
3. 街道地址,城市,州 → 邮政编码:这些信息组合起来可以确定一个地址的邮政编码。
可能的候选键包括:
{社会保障号,街道地址,城市,州,区号,电话号码}:这些属性的任何组合都能唯一标识一个记录,因为一个人可能有多个地址或电话,但这个集合确保了唯一性。
Exercise 3.1.2中探讨的是分子的位置和速度。函数依赖可能包括:
1. ID → x位置,y位置,z位置:分子的ID可以决定其三维空间位置。
2. ID → x速度,y速度,z速度:同样,ID也决定了分子的速度。
3. x位置,y位置,z位置 → ID:因为没有两个分子可以占据相同的位置,所以位置信息可作为键。
候选键为:
{ID} 和 {x位置,y位置,z位置}:由于位置信息的唯一性,它们都可以作为候选键。
Exercise 3.1.3探讨了如何找出不同条件下的超键。超键是能够包含键的属性集。题目分为四部分,分别考虑不同的情况:
a) 当包含属性A1时,超键是所有包含A1的子集,总数为2^(n-1),其中n为属性总数。
b) 考虑A1和A2,超键包括包含A1的2^(n-1)个子集,以及包含A2的2^(n-2)个子集(不包括A1,因为它已经在前一组中计算过)。总超键数量为2^(n-1) + 2^(n-2)。
c) 包含{A1,A2}或{A3,A4}时,超键有包含{A1,A2}的2^(n-2)个子集,以及包含{A3,A4}的2^(n-2) - 2^(n-4)个子集(减去包含{A1,A2}的子集以避免重复计数)。总超键数量为2^(n-2) + 2^(n-2) - 2^(n-4)。
d) 包含{A1,A2}或{A1,A3}时,超键有包含{A1,A2}的2^(n-2)个子集,以及包含{A1,A3}的2^(n-2)个子集。总超键数量为2^(n-2) + 2^(n-2)。
理解这些基本概念对于设计高效、无冗余的数据库至关重要。函数依赖帮助识别数据中的规则,而超键则有助于确定最小的键,这些键可以保证数据的完整性。在实际数据库设计中,通过正确理解和应用这些概念,可以创建更优化的数据模型,从而提高查询性能和存储效率。