数据库关系规范化:原理与实践
1. 冗余与异常
为了说明基本原理,我们来看一个具体的关系示例。该关系的键由“Employee”和“Project”属性组成,且满足以下特性:
- 每个员工的薪水是唯一的,仅取决于员工本身,与员工参与的项目无关。
- 每个项目的预算是唯一的,仅取决于项目本身,与参与项目的员工无关。
下面我们着重分析第一个特性所带来的影响:
- 冗余问题 :每个员工的薪水值会在所有与之相关的元组中重复出现。比如,若一名员工参与了 20 个项目,其薪水就会重复 20 次。
- 更新异常 :当员工的薪水发生变化时,需要修改所有相关元组中的薪水值。这一过程很不方便,需要同时进行大量修改。
- 删除异常 :若员工停止参与所有项目但未离开公司,所有相关元组会被删除,导致与项目无关的基本信息(如姓名和薪水)丢失。由于“Project”是键的一部分,不能保留一个“Project”属性为 null 的元组。
- 插入异常 :若有新员工的信息,在该员工被分配到项目之前,无法将其信息插入到关系中。
一般来说,当一个关系的元组包含多个代表独立现实概念的信息项时,会出现以下缺陷:
- 信息项常需重复出现在不同元组中。
- 若信息冗余重复,每次更新重复数据时都要进行多次操作。虽然关系语言(如 SQL)允许使用单个命令进行多次更新,但从系统角度看问题并未解决,因为所有涉及更新的元组都必须被物理修改。
- 删除元组时,若其中某一项信息不再有效,可能会导致所有相
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



