导图社区 数据库
我呕心沥血整理的,还没整理好,已经很好了,不接受批评。感兴趣的小伙伴可以参考使用!
编辑于2024-03-18 22:52:28数据库
概念
数据库 长期存储在计算机内、有组织的、可共享大量数据的集合
DBS包括DBMS(系统软件)、DB
数据模型:层次、关系、网状、面向对象 (要素-数据结构、数据操作、完整性约束) 关系模型 建立严格数学概念基础、概念单一、存取路径透明 查询效率不高
外模式/模式 模式(不变)/内模式-物理 (二级映像)
并发控制 并发执行是否可串行化 丢失修改-别人修改了 我照样读原来的 不可重复读-别人修改了 我读了变得 脏数据 -撤销 数不对
事务ACID 原子性:dbms 基本工作单位 事务操作要么去全部执行,不执行 一致性 隔离性 持久性
建立冗余数据--数据转储、登录日志文件 故障--事务内部故障、系统故障、介质故障、计算机病毒 故障恢复步骤: 1. 反向扫描文件日志,查找该事务的更新操作。 2. 对该事务的更新操作执行逆操作。即将日志记录中“更新前的值” 写入数据库。 3. 继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理。 4. 如此处理下去,直至读到此事务的开始标记,事务故障恢复就完成了。
封锁-排它锁X 共享锁S 事务串行 初始值Slock 写Xlock 读赋值slock
数据库设计 1需求分析:用户需求 数据流程图DFD 数据字典DD 2概念结构设计:对现实世界抽象方法(分类、聚集、概括)概念模型 e-r实体联系图(属性、命名、结构冲突 独立于硬件和DBMS) 3逻辑结构设计:逻辑模型适应DBMS关系模型R(,,)- 4物理设计 5系统实施 6系统运行和维护
一张表 一个 主键 联合表 多个字段组合 组成主键
关系 e.f.codd
关系演练
一个笛卡尔D():排列组合=分量 =D(1,2,3)3 基数 列:属性-值:域 行:元组t 象集:后宫
p.打印/_例子/连接 u.修改 I. D.所有表都删
基本类型 基本表 查询表 视图
关系代数
传统 并 交 差- not exists笛卡尔积x 符号 t A列 横杠A~概率 选择[] 弧形tt~笛卡尔积 象集ZX={ } X对应哪几个Z 专门 project()投影 Πsno,sname()列(表) 完全重复省 select()选择 σsno=' '()条件:A名/列序 运算符 B数/‘字符’(表名) join() 连接 (s)⋈sc 笛卡尔运算筛选①等价/自然连接-名字一样 ②一般连接< 不同表名.相同属性③外/左/右连接:连接悬浮元组(剩的)--没匹配NULL 除 R(A,B,C)÷S(B,C,D)=R(A) A象集 是否能÷ S
笛卡尔乘积x 属性r+s 元组rxs
查询树 结果-project() 关系代数语法树Π σR.A=S.A- x 去结果去括号 优化的查询树 Ⅰσ下移 Ⅱσ x变⋈(加投影 分组) 关系代数表达式 自下而上
不完全克服:插入异常-没插、删除异常-删了、冗余度大
关系模式
候选码(主属性) --去左重复右
闭包 (AB)F+ x(0)= ab→cd x(1)=ab∪cd= ...于x(1)=x(2)中止/X=U
最小依赖集 1删掉看闭包 2化简左侧非单属性
范式 1NF 没合并 2NF 码没有部分依赖 --②s1(部分依赖关系) S2(剩关系) 3NF 没有传递--传递分开 BCNF 候选都是主属性(左边) 都只听主-- 4NF 候选都是主属性 --单独W不算 WS WC
多值函数依赖
性质
嵌入型多值依赖 在u的w子集成立
SQL
增加alter table R add C date
索引 creat unique/cluster聚簇 index XXX on R(A ASD,B DESC)
创建 create table Student( sno char(6) null, senrolldate datetime null, primary key(sno) );
创视图 create view R-A as from with check option;条件保存 drop view R_A cascade连级视图
插入值 insert into R(A,B,C) 没有默认全部 Ⅰ.values ('','','',null) 主码不能空 Ⅱ.select from ...
更新 update R set A where in
删除 delete from where
查询 5select (all/distinct去重) R.A,/*全部/表达式A+1/'字符串'/聚集count () 1from R,S S'空格别名 R left/ out join A on (R.A=B=B)左/外连接:没选课的 2(where ) 3group by C分组后 selec受限制C+聚合 4having 6order by A,B ASC/DESC 空值最大
聚合 count()计数 avg ()均值 lower(A)小写
A not in('',=或'') 集合 / is not null/ A='' /A not between 20 and 30 not like '刘%/刘_/_草%' %:任意个字符 _一个字符 a\_bc escape '\'表示_ from R,S where R.A=S.A(B) and S.A=H.A连接 any某个=任意一个 all所有 可用聚集MAX MIN <> :!= not exists /()true false存在嵌套 效率高点 一个个带入 可替换连接可读性强
where
子主题
没有用谁的 where not in(select distinct) xx所有选的 ( ÷ )x 至少 连接
union select并 去重=select distinct union all intersect 交 except 差
安全性
授权 grant select(),insert9/all privileges on table R to 用户/public with grant option; 维护 revoke on from cascade/restrict 收回 create role创建用户 audit 操作 on
默认拒绝 设置空值
安全性-防止不合法用户数据泄露、更改破坏操作(用户身份鉴别-用户口令、用户存取控制权限、试图机制、审计、数据加密) 完整性-正确 相容-防止错误信息 非法存取破坏数据 (实体-不为空、参照-可以空 另一关系有效值、用户自定义约束)
存取-数据对象类型 自主存取控制-设用户-定义“授权” 强制 -上密级
完整性
creat table R A smallint/date unique not null B char() check (sex表达式= /in/ not like)用户定义完整性 primary key (A,B)主码 实体完整性 foreign key B references S.B on delete/update cascade级联删除/no action拒绝执行/设置空值 参照完整性
DDL
单个表
alter table R add constraint C1 primary key/foreign key(A) references S(A) ①on 操作 cascade/set null/ no action默认 on... ②check(工作实践<= and > sb in (select from)) drop constraint C2
create domain alter drop域
多个表
create assertion 表 check(A>(sql语句)) 断言 drop assertion
触发器
create trigger 名 (before-对原有条件判断/after=for update of /insert on) referencing new/old row/table as 变量delta for each row/statemen as when(条件) insert into values(.,.,.)
begin if(R.A=''and) then end if; end;
数据库设计
化同名 去冗余
优化 水平分解 8/2 全分 垂直分解 子模式 视图别名 视图分用户 简化
1:1 都拿左/右 1:n 都拿多 m n 单独放一起 最多有三个
左右各选一个 联系没属性不加 同义省调次序
①局部 找自己的 去重复包括(局部内外) ② 注意间接关系才也要连
E-R模型转换为关系数目: 实体+m:n联系
游标
exec sql begin declare section; 属性; exec sql end declare section;//数据库属性 long sqlcode//返回执行状态 exec sql include sqlca;定义通信 C语言 exec sql connect to 库名@主机:端口 用户名
drop table/view/trigger delect 删具体数据 行