第四周数据库研讨 第8组 数据库研讨全文共7页,当前为第1页。 1. 如下关系模式R表示某学校学生及宿舍的情况 R(学号,姓名,系,宿舍楼,宿舍房号,协会) 满足的函数依赖集合为 F={学号 姓名,学号 系,宿舍楼 系,学号 宿舍房号,宿舍房号 宿舍楼} 试将R规范化为满足BCNF的关系模式。 1)学号,协会是候选键,所以 F 肯定不是 BCNF 。 2)分解为: {(学号,姓名,宿舍房号,协会)(宿舍房号,宿舍楼)(宿舍楼,系)} 数据库研讨全文共7页,当前为第2页。 R(学号A,姓名B,系C,宿舍楼D,宿舍房号E,协会F) F={A->B, A->C, D->C, A->E, E->D} 分解的结果:( CD, DE, ABEF) ABCDEF key:AF CD D->C ABDEF A->B, A->C A->E, E->D key:AF DE E->D ABEF A->B, A->C A->E 数据库研讨全文共7页,当前为第3页。 2. 假设某旅馆业务规定,每个账单对应一个顾客,账单的发票号是惟一的,账单中包含一个顾客姓名、到达日期和顾客每日的消费明细,账单的格式如图 发票号
数据库研讨的主题围绕着关系数据库的设计和规范化,主要讨论了如何将关系模式规范化以满足不同的范式,特别是BCNF(Boyce-Codd范式)。
在第一个案例中,我们有一个关系模式R(学号,姓名,系,宿舍楼,宿舍房号,协会),其函数依赖集合为F={学号→姓名,学号→系,宿舍楼→系,学号→宿舍房号,宿舍房号→宿舍楼}。这里提到学号和协会是候选键,这意味着它们能唯一标识关系中的每一行。由于F中的依赖并不满足BCNF,因为存在非平凡的多值依赖(即通过非候选键传递的依赖),需要进行分解。分解后的结果是三个关系模式:(学号,姓名,宿舍房号,协会),(宿舍房号,宿舍楼),(宿舍楼,系)。这样的分解消除了传递依赖,使每个模式都满足BCNF。
第二个案例涉及旅馆业务中的账单管理。关系模式R(发票号,到达日期,顾客姓名,消费日期,项目,金额)。据描述,发票号是唯一的,所以它是候选键。分析函数依赖,有发票号→顾客姓名,顾客姓名→到达日期,消费日期项目→金额。候选键包括发票号、消费日期和项目。由于到达日期对候选键的局部依赖,说明R最多只达到了1NF,因为它不符合2NF(即不存在部分依赖)。为了达到3NF,可以将R分解为多个关系,例如,一个关系存储发票号与顾客信息,另一个存储消费日期、项目和金额。为了满足BCNF,需要进一步分解,确保每个依赖的左部都是超键。
第三个案例考察了多值依赖的概念。关系模式R(A,B,C)有三个元组,通过MVD(多值依赖)A→→B、B→→C、C→→B,我们需要补全所有可能的元组以满足这些依赖。根据多值依赖的定义,当元组(xy1z1)和(xy2z2)存在时,必须有(xy1z2)和(xy2z1)。根据A→→B,(a1,b,c1)和(a1,b,c2)表明(a1,b,c2)和(a1,b,c1)应同时存在,这已经满足。根据B→→C,(a1,b,c1)和(a3,b,c2)要求增加(a3,b,c1)。C→→B的条件已经满足,因为(a1,b,c2)和(a3,b,c2)都有。通过这些依赖,我们可以看到数据的完整性和一致性如何受到多值依赖的影响。
总结起来,本研讨涵盖了数据库规范化的核心概念,包括BCNF、候选键、函数依赖和多值依赖。这些概念对于构建高效、无冗余、易于维护的关系数据库至关重要。理解并应用这些原则有助于避免数据异常和提高数据一致性。