【知识点详解】
1. 关系数据库理论
在关系数据库中,候选键是能唯一标识一个元组的属性集合,不包含任何冗余。题目中给出的关系R(A, B, C, D)有以下函数依赖集FD:{AB → C, B → D, D → A, C → D}。
(a) 计算属性集的闭包并确定候选键:
- 闭包是通过应用函数依赖集得到的所有可能的属性组合。我们可以通过逐步应用依赖来找到所有可能的候选键。
- 由B出发,可以得到B→D,再由D→A,得到BD→AD;由B和C出发,得到BC→ACD。所以,B是候选键。
(b) 写出FD的最小覆盖:
- 最小覆盖是在不改变函数依赖集的决定性的情况下,尽可能减少依赖的数量。我们可以去除冗余的依赖,例如,由于D→A且B→D,所以AB→C是多余的,可被替换为BD→C。最终的最小覆盖是:B→D, D→A, C→D。
(c) 是否满足第三范式(3NF)及BCNF(博科斯范式):
- 3NF要求非主属性对每一个候选键都不部分依赖和传递依赖。在这里,因为D→A,所以R不在3NF中。
- BCNF要求对于每一个X→Y,X都是超键。R中不存在X→Y形式的依赖,其中X不是超键,因此R是处于BCNF的。
2. 线性哈希索引
线性哈希是一种动态数据结构,用于快速查找和插入元素。题目给出了搜索键值的插入过程,要求展示每个插入操作后的线性哈希结构。
(1) 插入21: 初始配置,哈希函数h0=K mod(4),21映射到第一个桶。
(2) 插入6: 6同样映射到第一个桶,与21合并。
(3) 插入30: 30映射到第二个桶。
(4) 插入74: 74映射到第一个桶,已满,溢出到下一个桶,即第三个桶。
(5) 插入67: 67映射到第一个桶,溢出到第三个桶,与74合并。
3. 数据库性能优化
题目中提到了一个销售数据库,包括Customers、Purchases和SalesCalls三个表,并给出了查询工作负载的估计。
- Customers表100,000页,Purchases表2,000,000页,SalesCalls表180,000页。
- 查询分布:CID查询10%,Name查询30%,PID查询35%,SID查询10%,Result查询15%。
在这样的场景下,为了优化性能,可以考虑以下策略:
- 对于频繁查询的CID、Name和PID,创建索引来加速查询。
- 分析查询模式,如果CID和PID的查询主要基于范围,考虑使用B树索引;如果查询主要基于精确匹配,考虑哈希索引。
- 根据数据分布和查询频率,可能需要对数据进行分区或分片,以分散负载和提高查询效率。
- 对于SalesCalls表,由于查询比例相对较低,可以优先优化其他表,但也要考虑Result查询的优化。
以上是根据题目内容解析出的数据库理论知识,包括关系数据库的函数依赖、范式理论、线性哈希索引的构建以及数据库性能优化策略。这些知识是数据库管理与设计的基础,对于理解和处理数据库问题至关重要。