三级模式两级映射:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cZugcjpk-1679404045183)(/assets/三级模式两级映射.png)]
三级模式:
两级映射:
用于概念结构设计
方框:实体
椭圆:属性
菱形:联系
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ub5iHxeh-1679404045185)(/assets/ER模型.png)]
关系模式的格式类似于:
教师(性别,职工号,手机号,年龄,姓名)
班级(班级名称,班级号)
负责(职工号,班级号)
原则:
实体
转成一个关系模式联系
,既可以将它单独作为一个关系模式,也可以将它合并到任意一个实体中联系
,既可以将它单独作为一个关系模式,也可以将它合并到 n 那边的实体中(如 部门-员工
,在 员工
那边加一个 部门名称
字段)联系
,必须将它单独作为一个关系模式关系代数的基本运算:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1olUiwND-1679404045185)(/assets/并交.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cxfBs8lV-1679404045185)(/assets/差.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YBcEy0Jr-1679404045186)(/assets/笛卡尔积.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-svcTspKZ-1679404045186)(/assets/联接.png)]
在联接之后选择只显示第 1,2,4 列:Π1,2,4(S1⋈S2)\Pi_{1,2,4}(S1⋈S2)Π1,2,4(S1⋈S2)
X→YX\rightarrow YX→Y(X 函数决定
Y / Y 函数依赖
于 X):X 和 Y 的关系像函数一样,知道 X 可以确定 Y
如学号→姓名学号\rightarrow 姓名学号→姓名
部分函数依赖
:
如(学号,课程号)→姓名(学号,课程号)\rightarrow 姓名(学号,课程号)→姓名,但是也有学号→姓名学号\rightarrow 姓名学号→姓名,所以称姓名姓名姓名部分依赖于(学号,课程号)(学号,课程号)(学号,课程号)
传递函数依赖
:知道 A 可以确定 B,知道 B 可以确定 C,则知道 A 可以确定 C
解决以下问题:
入度为 0 的属性集合
为起点,遍历有向图 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4pB2mQY8-1679404045186)(/assets/规范化理论.png)]
A ABCD B
要达到第二范式,必先达到第一范式,以此类推
非主属性
对候选键的 部分依赖
非主属性
对候选键的 传递依赖
主属性
对候选键的 传递依赖
目的:解决
如一张表:课程号,学号,成绩,学分,主键是(课程号,学号)
但是学分是可以由课程号单独决定的,部分依赖于主键,不满足 2NF
带来的问题:
解决方案:
将课程号和学分独立出来作为一个新的关系模式
主键为单属性一定满足 2NF
如一张表:学号,姓名,系号,系名,主键是学号
系名是由系号决定的,系号是由学号决定的,所以是传递关系依赖
解决方案:
将系号和系名独立出来作为一个新的关系模式
判断是否符合 BCNF:每个依赖关系,被依赖的决定因素必定包含候选码
如一张表:学生,老师,课程,候选键有(学生,老师)、(学生,课程),所以这三个属性都是主属性,没有非主属性
依赖关系如下:
(学生,课程)->老师
老师->课程
其中老师不是候选码,所以不符合 BCNF
在分解后可以保持原先的函数依赖
如R(A,B,C),A→B,B→CR(A,B,C),A\rightarrow B,B\rightarrow CR(A,B,C),A→B,B→C
拆成R1(A,B)、R2(B,C)R1(A,B)、R2(B,C)R1(A,B)、R2(B,C)
在 R1 里仍然有A→BA\rightarrow BA→B,R2 里仍然有B→CB\rightarrow CB→C,原先的函数依赖被保留了
分解后可以还原
可以通过自然联接和投影运算还原到原来的关系模式
假如有 T1、T2 同时更新一个值 x,顺序是(T1 取数、T2 取数、T1 更新、T2 更新) T2 拿到的初始值不是被 T1 更新后的,而是原始的 x,那 T1 对其更新就被覆盖了
T1 有计算和验算两个步骤,若 T2 在计算与验算之间修改了值,那计算和验算的结果就不同了,发生错误
脏数据指计算过程中的临时值,不是真正应该被读的数据
S 本意是共享锁,本意 X 是排他锁
加了 S 锁之后还能继续加 S 锁,但是不能加 X 锁
加了 X 锁之后什么锁都不能加
事务 T 在 修改
数据 R 之前必须先对其加 X 锁
,直到事务结束才释放
在一级封锁协议的基础上,在 读取
数据 R 之前先对其加 S 锁
,读完
才释放
在一级封锁协议的基础上,在 读取
数据 R 之前先对其加 S 锁
,事务结束
才释放
可串行化,可能发生死锁
两段锁协议可能产生死锁问题
解决方法:
目的:提升数据的可靠性
数据表主键不能为空,不能重复
外界对数据库表的完整性约束,外键的值必须属于对应的表主键的内容(也可以为空,但是不能填错误的值)
用户可以自定义某个属性的值的要求
写脚本来定义对于某属性的要求
对不同用户进行不同授权
不同权限的用户可以使用不同的视图
将用户对数据库的所有操作记录下来,对这些操作进行分析
停止状态
下,将数据库的文件全部备份(复制)下来 运行状态
下,将数据库的数据文件备份出来 备份
后变化的数据完全备份
后变化的数据静态
:在系统中无运行事务时进行
动态
:转储期间允许对熟即可进行存取
海量
:转储全部数据库
增量
:只转储上一次转储后更新的数据
转储
:备份
记录针对数据库的任何操作
故障 | 恢复 |
---|---|
事务本身可预期的故障(本身逻辑) | 在程序中预先设置 Rollback 语句 |
事务本身不可预期的故障(溢出、违反存储保护) | 通过日志回滚到事务初始状态 |
系统故障(系统停止运转) | 检查点法 |
介质故障(外存被破坏) | 使用日志重做业务 |
数据库是按业务组织数据,数据仓库是按主题组织数据
例:数据库主要负责“购买商品”、“进货”这方面的逻辑,数据仓库则是把所有商品的信息进行汇总
数据挖掘是挖掘出数据之间的潜在联系
数据挖掘方法分类
方法:
分类:
为何出现反规范化:
规范化会使得表不断拆分,增加查询的工作量(系统需要多次连接才能查询),系统效率下降
目的:提高查询效率
数量
、单价
列的情况下,仍然加上 总销售额
这一列对海量数据处理相关的技术
海量数据的特点:
比较维度 | 传统数据 | 大数据 |
---|---|---|
数据量 | GB/TB | PB |
数据分析需求 | 现有数据的分析与预测 | 深度分析 |
硬件平台 | 高端服务器 | 集群平台 |