• 软件设计师_数据库系统_学习笔记


    3.1 数据库模式

    3.1.1 三级模式 两级映射

    1. 内模式直接与物理数据库相关联的 定义了数据存放的格式及方式
    2. 概念模式即模式,类似于数据库的表
    3. 外模式对应的是数据库的视图

    在这里插入图片描述

    3.1.2 数据库设计过程

    在这里插入图片描述

    3.2 ER模型

    在这里插入图片描述

    方框:实体;椭圆:属性;菱形:联系

    在这里插入图片描述
    在这里插入图片描述

    每个实体可转1个关系模式,多对多的时候,每个联系也可转成一个单独关系模式

    3.3 关系代数与元组演算

    3.3.1 关系代数

    并、交、差
    在这里插入图片描述
    笛卡尔积、投影、选择在这里插入图片描述

    笛卡尔积将两个表的行分别组合,会存在相同的字段。
    投影是按列选出,选择是按行选出。

    联接
    在这里插入图片描述

    联接不会存在相同字段

    3.3.2 函数依赖

    学号可以唯一确定姓名,但姓名不能确定学号,可能会存在同名,我们把学号->姓名这个过程称为函数依赖

    在这里插入图片描述
    在这里插入图片描述

    部分函数依赖:学号和课程号共同可以确定姓名,且其中之一学号也可以确定姓名。
    传递函数依赖:A可以唯一确定B,B可以唯一确定C,则A可以确定C。但是要注意的是B不能确定A,否则A与B就是等值关系。

    3.4 规范化理论

    3.4.1 价值和用途

    在这里插入图片描述

    数据冗余:如上图DNO可以唯一确定DNAME,但是仍存储了大量的DNAME。
    更新异常:在不更改DNO的情况下更新DNAME时,如果没有全部更新,就会存在更新异常

    3.4.2 求候选关键字

    在这里插入图片描述

    如上图,学号和姓名的组合键可以称之为超键,但其组合键不能称之为候选键,因为姓名是冗余的,学号可以单独成为候选键。

    在这里插入图片描述
    在这里插入图片描述

    求候选键的步骤:

    • 将函数依赖转为有向图。
    • 找入度为0的节点,能遍历所有节点的就是候选键。
    • 若没有入度为0的节点,寻找既有入度也有出度的节点,能遍历所有节点即为候选键。

    3.4.3 范式

    主属性:属于候选键的一部分的是主属性
    在这里插入图片描述

    转:范式越来越高,则表拆分越细,实现越难、性能越慢、越没体现数据解耦。一般拆分到第三范式就差不多了。
    原子值:一个属性不能拆分成多个属性。

    第一范式
    每个分量都是不可再分的数据项
    在这里插入图片描述

    该表不满足第一范式,高级职称人数可以继续拆分成教授与副教授。

    第二范式
    非主属性不存在部分依赖于主属性
    在这里插入图片描述

    上表不满足第二范式,其CNO可以确定CREDIT,但是CNO只是主键的一部分,存在部分依赖。解决办法就是继续拆分。

    第三范式
    非主属性不存在传递依赖于主属性
    在这里插入图片描述
    BC范式

    通俗的来说就是函数依赖的左边必须是候选键

    在这里插入图片描述
    练习
    在这里插入图片描述

    第二题中部门和职工之间并未存在关系,且遵循多对一原则,在职工表添加部门号即可。

    3.4.4 模式分解

    在这里插入图片描述
    案例分析
    判断以下是否为无损分解
    方式一
    在这里插入图片描述
    方式二
    在这里插入图片描述

    列表,横属性为被拆分的表的属性,纵属性为拆分的表

    • 如上,成绩中包含了学号,课程,分数,则将其标位a
    • 其余的标为b
    • 将有两个相邻的a的整列都标为a
    • 如果有一行全为a,则为无损分解

    在这里插入图片描述
    方式三
    局限于分解为两个
    在这里插入图片描述

    3.5 并发控制

    3.5.1 基本概念

    在这里插入图片描述

    事务的四大特性(ACID):原子性、一致性、隔离性、持久性

    3.5.2 并发产生的问题

    在这里插入图片描述

    如上图,T1、T2两个事务

    • 丢失更新:两个事务先后对A进行减5和减8的操作,但是实际上减8的结果会将减5的结果覆盖。
    • 不可重复读:在进行求和之后可能会对其进行验算,但此时T2对A进行更新了,验算结果不对,造成不可重复读。
    • 读“脏”数据:T1对A进行更新,但进行了回滚,在此途中,T2读取的是回滚前的数据,这就是脏读。

    3.5.3 解决对策

    在这里插入图片描述

    S锁是读锁(共享锁),X锁是写锁(排它锁)。加了s锁后还可以继续加s锁,但是不能加x锁

    • 一级封锁协议:对于丢失更新,加一级封锁协议,即在事务修改数据前对其加X锁,直到事务结束才释放。
    • 二级封锁协议:在一级之上先对其加s锁,读完后释放s锁。可防止丢失更新、脏读。
    • 三级封锁协议:在一级之上先对其加s锁,事务结束后才释放s锁。可防止丢失更新、脏读、重复读。
    • 两段锁协议:可串行,可能会发生死锁(解除或预防)。

    3.5.4 共享锁(S锁)和排它锁(X锁)

    排他锁(Exclusive Locks,简称X锁)

    • 排他锁又称为写锁,用于对数据进行写操作时进行锁定。如果事务T对数据A加上X锁后,就只允许事务T读取和修改数据A,其他事务对数据A不能再加任何锁,从而也不能读取和修改数据A,直到事务T释放A上的锁。

    共享锁(Share Locks,简称S锁)

    • 共享锁又称为读锁,用于对数据进行读操作时进行锁定。如果事务T对数据A加上了S锁后,事务T就只能读数据A但不可以修改,其他事务可以再对数据A加S锁 来读取,只要数据A上有S锁,任何事务都只能再对其加S锁(读取)而不能加X锁 (修改)。

    3.6 数据库完整性约束

    在这里插入图片描述

    数据完整性:存储在数据库中的所有数据值均正确的状态。它是应防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的
    数据完整性分为四类:

    1. 实体完整性(实体完整性是对关系中的记录唯一性,也就是主键的约束。准确地说,实体完整性是指关系中的主属性值不能为Null且不能有相同值。定义表中的所有行能唯一的标识,一般用主键,唯一索引 unique关键字,及identity属性比如说我们的身份证号码,可以唯一标识一个人.。)
    2. 域完整性(域完整性是对数据表中字段属性的约束,通常指数据的有效性,它包括字段的值域、字段的类型及字段的有效规则等约束,它是由确定关系结构时所定义的字段的属性决定的。限制数据类型,缺省值,规则,约束,是否可以为空,域完整性可以确保不会输入无效的值.。)
    3. 参照完整性(参照完整性是对关系数据库中建立关联关系的数据表间数据参照引用的约束,也就是对外键的约束。准确地说,参照完整性是指关系中的外键必须是另一个关系的主键有效值,或者是NULL。参考完整性维护表间数据的有效性,完整性,通常通过建立外部键联系另一表的主键实现,还可以用触发器来维护参考完整性)
    4. 用户定义的完整性。
      约束是表级的强制规定,有以下五中:not null,unique,primary key,foreign key,check
      原文链接:https://blog.csdn.net/u013634252/article/details/80696882
      更加复杂的会采用触发器完成。

    3.7 数据库安全

    在这里插入图片描述

    3.7 数据库备份

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    3.8 数据仓库与数据挖掘

    在这里插入图片描述
    在这里插入图片描述

    3.8 反规范化

    在这里插入图片描述

    规范化以时间换空间,反规范化以空间换时间

    3.9 大数据

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    scala基础入门
    Python爬虫动态ip代理防止被封的方法
    linux下的c/c++动静态库
    未来装备探索:数字孪生装备
    Android 转场动画源码剖析
    基于NodeJs+Express+MySQL 实现的个人博客完整项目
    国庆共68条评论《乡村振兴战略下传统村落文化旅游旅游设计》许少辉八一新书
    通达信指标编写,16进制颜色对照表,妈妈再也不用担心颜色不够用了!!
    前端面试准备
    java计算机毕业设计web开发数码产品推荐平台系统设计与实现源码+数据库+系统+lw文档
  • 原文地址:https://blog.csdn.net/m0_63962653/article/details/133472264