跳到主要内容

设计异常

关系模式设计不当会产生哪些异常?​

异常表现
冗余同一个属性值在多个元组中重复出现
更新异常修改了某一元组的属性, 却没有同步修改其他元组的同一属性
删除异常删除一个值集时会连带丢掉本应保留的其他信息

冗余为什么会引发更新与删除异常?​

  • 多个元组携带同一事实: 事实被存了多份;
  • 更新: 必须改多份, 漏改一处就出现互相矛盾的数据;
  • 删除: 删掉最后一行会连带丢失依附于它的事实;
  • 结论: 冗余是根源, 更新异常与删除异常是后果;

怎样定位并消除这些异常?​

  • 分析: 用函数依赖刻画属性之间的决定关系, 见 函数依赖定义;
  • 判断: 找出非平凡依赖的左边是否为超键;
  • 消除: 按范式逐级分解, 见 分解方法;

(source: 020-关系数据库设计理论.md §关系数据库模式设计/§常见异常)