关系模式设计不当会产生哪些异常?
| 异常 | 表现 |
|---|
| 冗余 | 同一个属性值在多个元组中重复出现 |
| 更新异常 | 修改了某一元组的属性, 却没有同步修改其他元组的同一属性 |
| 删除异常 | 删除一个值集时会连带丢掉本应保留的其他信息 |
冗余为什么会引发更新与删除异常?
- 多个元组携带同一事实: 事实被存了多份;
- 更新: 必须改多份, 漏改一处就出现互相矛盾的数据;
- 删除: 删掉最后一行会连带丢失依附于它的事实;
- 结论: 冗余是根源, 更新异常与删除异常是后果;
怎样定位并消除这些异常?
- 分析: 用函数依赖刻画属性之间的决定关系, 见 函数依赖定义;
- 判断: 找出非平凡依赖的左边是否为超键;
- 消除: 按范式逐级分解, 见 分解方法;
(source: 020-关系数据库设计理论.md §关系数据库模式设计/§常见异常)