美文网首页
数据库基础(三)-- 规范化设计

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

作者: 随时学丫 | 来源:发表于2018-01-23 11:41 被阅读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有一个测试死锁的程序,每隔一段时间就会检查并发事务之间是否发生死锁,如果发生死锁,那么只能抽取某个事务作为牺牲品,把它撤销,做回退操作,解除它的所有封锁,恢复到该事务的初始状态。释放出来的资源就分配给其他事务,使其他事务有可能继续执行下去,这样就可以消除死锁。

相关文章

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

    关系模式的设计问题 关系模式的冗余和异常问题 数据冗余:同一个数据在系统中多次出现。 操作异常:由于数据冗余,在堆...

  • 规范化数据库设计

    规范化数据库设计 为什么需要数据库设计 当数据库比较复杂时我们需要设计数据库 糟糕的数据库设计 : 数据冗余,存储...

  • MySQL 入门(四)

    九、规范化数据库设计 1. 为什么需要数据库设计 当数据库比较复杂时,需要设计数据库; 糟糕的数据库设计:数据冗余...

  • 数据库相关操作

    数据库 数据库规范 规范化是数据库设计的核心思想,规范化涉及在数据库的表格中建立关系,对有关系但是存在于不同表中的...

  • 01 数据库技术学习准备

    1.1数据库的基本概念1.2 数据库系统结构1.3 数据库的规范化1.4数据库设计

  • 数据库的设计

    为什么需要规范的数据库设计? 通过进行规范化的数据库设计可以消除不必要的数据冗余,获得合理数据库设计,提高项目的应...

  • 【数据库】数据库入门(八): 数据库规范化(Normalisat

    前言 数据库规范化的产生主要是由模式设计(Schema Design)而推动的。模式设计的目标是为特定的数据库应用...

  • 数据库1NF-3NF范式深入理解

    关系型数据库设计时为确保数据存储规范化,通常需要按照范式设计数据,接下来主要介绍下1NF-3NF递进式数据库设计,...

  • System Design NoSQL - 学习笔记

    引用:系统设计入门 NoSQL 是键-值数据库、文档型数据库、列型数据库或图数据库的统称。数据库是非规范化的,表联...

  • 数据库范式 1NF, 2NF, 3NF的问题与细解

    一. 关于数据冗余与异常 数据库的规范化数据库规范化是一种在数据库中组织数据的技术。 规范化是消除冗余(重复)和不...

网友评论

      本文标题:数据库基础(三)-- 规范化设计

      本文链接:https://www.haomeiwen.com/subject/ntcsaxtx.html