学习指南 →

· Albion Gateway College

数据库专业课练习:重复导师名字,为什么要考虑拆表?

以原创课程登记表识别函数依赖与更新异常,说明规范化依赖业务规则,而不是看到重复就拆分。

先说明每一列依赖谁

假定表的每行是一名学生选一门模块,键为(student_id,module_id)。并假设每门模块本期只有一位协调导师,module_id决定tutor_id,tutor_id决定tutor_name。必须先声明这些业务假设,不能凭几行样本猜永久依赖。

如果同一导师名字重复存在许多行,修改时可能漏一行;没有学生选课时,也可能无法只存模块导师信息。这些是更新或插入异常的示例。

按依赖拆开而不是按外观拆开

可分别保存StudentModule(student_id,module_id)、Module(module_id,tutor_id)、Tutor(tutor_id,tutor_name),用键表达关系。原学生选课信息可以通过明确的连接恢复。

若实际规则是一门模块有多位导师,就需要额外的ModuleTutor关系,而不是继续假定module_id决定一个tutor_id。模型应跟随真实约束变化。

验证约束与信息恢复

自练给出两条同模块不同导师的记录,判断是数据错误还是“一门一导师”假设不成立。再写出每张表的主键、外键及必要唯一约束。

拆表不自动保证所有规则都被数据库执行,也不一定越多越好。课程作答应说明函数依赖、异常与恢复关系;如果之后考虑性能反规范化,要作为另外的设计选择解释。

参考资料

下一步

如需大学专业课程与 Tutorial 学习支持,请填写模块名称、学习目标和已尝试步骤。具体教学安排须确认,计分作业由学生独立完成。

继续阅读

学院在线咨询

欢迎咨询

你好,欢迎咨询!你是学生、招生代理、求职者,还是想申请成为导师?请告诉我你的咨询方向。

[email protected]