数据库基础(三)-- 规范化设计

2018-01-23  本文已影响71人  随时学丫

关系模式的设计问题

关系模式的冗余和异常问题

关系模式的范式

平凡的FD集:对于FD X->Y,如果Y ⊆ X,那么称 X -> Y 是平凡的FD,否则是非平凡的FD。

  1. 第一范式:如果关系模式R的每个关系r的属性值都是不可分的原子值,那么称R是第一范式。

  2. 第二范式:如果关系模式R是第一范式,且每个非主属性完全函数依赖于候选键,那么称R是第二范式。(消除部分局部函数依赖)

  3. 第三范式:属性不依赖于其他非主属性(消除传递依赖)

  4. BC范式:设F是关系R的FD集,如果对F中每一个非平凡的FD X->Y,都有X是R的超键,那么称R是BC范式。

    ​ (每个属性不传递依赖于R的候选键,每个表只有一个候选键)

  5. 第四范式:设D是关系模式R上成立的FD 和 MVD 集合,如果D中每个非平凡MVD X—>—>Y的左部都是R的超键,则R是第四范式。(消除多值依赖)

模式设计方法的原则

  1. 消除异常。
  2. 信息的可恢复性。
  3. 保持函数依赖。

数据库管理

事务的ACID性质

  1. 原子性(Atomic):一个事务对数据库的所有操作,是一个不可分割的工作单元。这些操作要么全部执行,要么什么也不做。
  2. 一致性(Consistency):一个事务独立执行的结果,应保持数据库的一致性,即数据不会因事务的执行而遭受破坏。
  3. 隔离性(Isolation):在多个事务并发执行时,系统应保证与这些事务先后单独执行时结果一样。
  4. 持久性(Durability):一个事务一旦完成全部操作以后,它对数据库的所有更新应永远地反映在数据库中,不会丢失。

数据库的并发控制

  1. 丢失更新问题:两次事务先后执行,但是其中一个事务的结果未保存就进行了下一个事务的操作,导致数据丢失。
  2. 读脏数据:事务一读取了事务二的未提交数据。未提交的随后被撤销的数据成为脏数据。
  3. 不一致分析:当某一个事务还未执行完毕,被另一个事务接着执行导致数据不一致。

解决并发控制问题—封锁机制

  1. 排它型封锁(X锁):当事务对某个数据实现 X 锁,那么其他事务必须等该事务处理完毕才可以进行。
  2. 共享型锁(S锁):如果事务对某个数据加上 S 锁,仍允许其他事务再对数据进行加 S 锁,但是对数据的所有 S 锁都解除之前绝不允许任何事务对数据加 X 锁。

活锁,饿死和死锁

  1. 活锁:系统可能使某个事务永远处于等待状态,得不到封锁的机会,这种现象称为活锁。

    解决活锁:先来先服务,如果某个事务因优先级低而得不到执行,那么当事务等待若

    ​ 干时间以后,则对事务的优先级进行升级以达到执行。

  2. 饿死:有可能存在一个事务序列,里面的每一个事务都申请对某数据加 S 锁,且每个事务在授权后的一小段时

    ​ 间内释放封锁,此时若另有一个事务T1欲在该数据项上加 X 锁,即永远轮不上封锁的机会,这种现象

    ​ 称为饿死。

    解决饿死:当事务 T 对数据 Q 加 S 锁的条件是:

    • 不存在数据项 Q 上有其他持有X锁的事务。
    • 不存在等待对数据项 Q 加锁且先于T申请加锁的事务。
  3. 死锁:系统存在两个或者两个以上的事务都处于等待状态,并且每个事务都在等待其中一个事务解除封锁,他

    ​ 才能继续执行下去,如果造成任何一个事务都无法继续执行,这种现象称为死锁。

    ​ 可以使用事务依赖图测试系统中的死锁。

    解决死锁:DBMS有一个测试死锁的程序,每隔一段时间就会检查并发事务之间是否发生死锁,如果发生死锁,那么只能抽取某个事务作为牺牲品,把它撤销,做回退操作,解除它的所有封锁,恢复到该事务的初始状态。释放出来的资源就分配给其他事务,使其他事务有可能继续执行下去,这样就可以消除死锁。

上一篇下一篇

猜你喜欢

热点阅读