21、数据库关系规范化:原理与实践

数据库关系规范化:原理与实践

1. 冗余与异常

为了说明基本原理,我们来看一个具体的关系示例。该关系的键由“Employee”和“Project”属性组成,且满足以下特性:
- 每个员工的薪水是唯一的,仅取决于员工本身,与员工参与的项目无关。
- 每个项目的预算是唯一的,仅取决于项目本身,与参与项目的员工无关。

下面我们着重分析第一个特性所带来的影响:
- 冗余问题 :每个员工的薪水值会在所有与之相关的元组中重复出现。比如,若一名员工参与了 20 个项目,其薪水就会重复 20 次。
- 更新异常 :当员工的薪水发生变化时,需要修改所有相关元组中的薪水值。这一过程很不方便,需要同时进行大量修改。
- 删除异常 :若员工停止参与所有项目但未离开公司,所有相关元组会被删除,导致与项目无关的基本信息(如姓名和薪水)丢失。由于“Project”是键的一部分,不能保留一个“Project”属性为 null 的元组。
- 插入异常 :若有新员工的信息,在该员工被分配到项目之前,无法将其信息插入到关系中。

一般来说,当一个关系的元组包含多个代表独立现实概念的信息项时,会出现以下缺陷:
- 信息项常需重复出现在不同元组中。
- 若信息冗余重复,每次更新重复数据时都要进行多次操作。虽然关系语言(如 SQL)允许使用单个命令进行多次更新,但从系统角度看问题并未解决,因为所有涉及更新的元组都必须被物理修改。
- 删除元组时,若其中某一项信息不再有效,可能会导致所有相

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值