数据库系统
![](https://img.haomeiwen.com/i5268036/d820f2a205d1353f.png)
![](https://img.haomeiwen.com/i5268036/d1b920f39444b25d.png)
![](https://img.haomeiwen.com/i5268036/0b5e45234e2f5586.png)
![](https://img.haomeiwen.com/i5268036/df5aaca5673e765a.png)
![](https://img.haomeiwen.com/i5268036/417a3323346efae6.png)
![](https://img.haomeiwen.com/i5268036/904053ef11a3565e.png)
![](https://img.haomeiwen.com/i5268036/b77ca12a1d9ff841.png)
E-R模型又叫实体-关系图。
简单属性:不可再分的属性;
复合属性:还可以再分的属性;
派生属性:通过计算可以得出的属性。
关系有1对1,1对多,多对多。
带下划线的代表主键。
![](https://img.haomeiwen.com/i5268036/c1451d4dc8708361.png)
扩展知识:弱实体和特殊化,这两种都是实体,表现形式如下图左侧所示。
![](https://img.haomeiwen.com/i5268036/adcacc85ba0ab577.png)
表示多的一端尽量用*表示,如果要用M表示,当表示多对多的时候两端的字母不能一样,如:M:M这种是不合法的,应该写成M:N。
![](https://img.haomeiwen.com/i5268036/f20799b409102df7.png)
最终得到的逻辑设计就是E-R模型。
命名冲突不一定要解决,如异名同义这种情况,同时存在经理编号和员工编号,他们都表示编号,但可以不进行统一,因为进行统一后,有时反而不太好用。
![](https://img.haomeiwen.com/i5268036/9cf73993e1b7a525.png)
![](https://img.haomeiwen.com/i5268036/34dbc05b1d75cbf2.png)
U代表属性集合,R代表关系模式的名字。体现在库表中,R代表表名,U代表列名。
1:1关系可以写在任意一端;1:n关系需要放在n这边的表中;n:m,只能单独做关系模式。
![](https://img.haomeiwen.com/i5268036/6e2fccf0848bc815.png)
差:以左边的为主,减去右边的内容。比如下图中S1-S2,就是从S1表中减去S2的内容。
![](https://img.haomeiwen.com/i5268036/244d341f9d3662f8.png)
![](https://img.haomeiwen.com/i5268036/ab4488aaf1ef4def.png)
1=2和1=‘2’意义不一样,1=2代表第一列和第二列做对比,1=‘2’代表第一列和‘2’这个值做对比。
select语句:select Sno,Sname from S1 where Sno = ‘No0001’;其中Sno,Sname相当于对S1做投影,where之后的内容相当于对S1做选择。
![](https://img.haomeiwen.com/i5268036/b8a51f5e6e010205.png)
![](https://img.haomeiwen.com/i5268036/0c536e2123d60b71.png)
![](https://img.haomeiwen.com/i5268036/85b4a65a9d5a9a96.png)
![](https://img.haomeiwen.com/i5268036/ee0a050063cd9df3.png)
先做选择再进行笛卡尔积然后再投影效率会比较高,因为如果先用笛卡尔积选择范围会很大。
![](https://img.haomeiwen.com/i5268036/ec5d1e6d60477296.png)
![](https://img.haomeiwen.com/i5268036/c1c18e33d156c99c.png)
![](https://img.haomeiwen.com/i5268036/d04e54f300aae011.png)
数据冗余:下图中后三列就存在数据冗余。
更新异常:如对下图更新计算机系的名称时,会有遗漏就是更新异常。
插入异常:下图中想插入一个学生但因为不知道系的信息或者想插入一个系但没有学生的信息都会导致插入异常。
删除异常:比如删下图中的赵六,但会把信息系这个信息也会删掉,就会导致删除异常。
![](https://img.haomeiwen.com/i5268036/8c7812adbd2d83ef.png)
![](https://img.haomeiwen.com/i5268036/20b5cfbdebf606ba.png)
X是决定因子。
![](https://img.haomeiwen.com/i5268036/a846e48c2d5669d5.png)
![](https://img.haomeiwen.com/i5268036/6b488a280c0db441.png)
下图中A→B,AC→B,C就是冗余键;客户编号和身份证号都是候选键,但(客户编号,身份证号)这个组合键就存在冗余,不是候选键。
![](https://img.haomeiwen.com/i5268036/a8e153671a824708.png)
![](https://img.haomeiwen.com/i5268036/8c3980a17233532a.png)
下图中A的入度为0,出度为2;B入度为1,出度为0;C入度为1,出度为0.
![](https://img.haomeiwen.com/i5268036/96c2bf8dd6f3223d.png)
AD或者(A,D)这两种形式代表的是A,D组合键;A和B代表的是A,B两个候选键。
![](https://img.haomeiwen.com/i5268036/cd4ea3203a588980.png)
![](https://img.haomeiwen.com/i5268036/efd910277f0a892f.png)
![](https://img.haomeiwen.com/i5268036/ff214c687e7b3ea0.png)
![](https://img.haomeiwen.com/i5268036/79081a857073868d.png)
![](https://img.haomeiwen.com/i5268036/d1e19cb01bd71444.png)
![](https://img.haomeiwen.com/i5268036/7e4533a5ec08f22e.png)
主属性:候选键都是主属性。
非主属性:主属性之外的所有属性都是非主属性。
![](https://img.haomeiwen.com/i5268036/7055b2be88811e3a.png)
![](https://img.haomeiwen.com/i5268036/d8a6868fb7996369.png)
![](https://img.haomeiwen.com/i5268036/9c6f9ef4c38b9e43.png)
![](https://img.haomeiwen.com/i5268036/452aef6f7b4524e3.png)
![](https://img.haomeiwen.com/i5268036/00c497f51cbd6ac2.png)
对于规范化问题一般是通过拆表来解决。
![](https://img.haomeiwen.com/i5268036/358219d0f51c1bdc.png)
![](https://img.haomeiwen.com/i5268036/e8c338fc7fa70360.png)
下图中T->J中没有包含候选键所以不满足BC范式。
![](https://img.haomeiwen.com/i5268036/8512c0fa7e96eeba.png)
![](https://img.haomeiwen.com/i5268036/956d0d09ed5fbbcb.png)
答案是C,D,A
![](https://img.haomeiwen.com/i5268036/b1dcde7c9afc35e6.png)
![](https://img.haomeiwen.com/i5268036/59ee857a1ff7f63a.png)
![](https://img.haomeiwen.com/i5268036/ec2bd8eb42005e38.png)
![](https://img.haomeiwen.com/i5268036/db8c83ac7c0eff34.png)
![](https://img.haomeiwen.com/i5268036/526470f76d223217.png)
有冗余依赖先去掉冗余依赖再判断。
下图两个都保持了函数依赖。
![](https://img.haomeiwen.com/i5268036/370937ca143aedfc.png)
![](https://img.haomeiwen.com/i5268036/7df7e23306794673.png)
![](https://img.haomeiwen.com/i5268036/9c28da5db46fcd26.png)
只要出现一行全部✔的就说明是无损分解。
![](https://img.haomeiwen.com/i5268036/55aa93d1d7f4d7de.png)
![](https://img.haomeiwen.com/i5268036/1685e5d211ba81d1.png)
![](https://img.haomeiwen.com/i5268036/38778bfa7e864337.png)
第一个是无损分解,第二个是有损分解。
![](https://img.haomeiwen.com/i5268036/580f91cc6dc259fe.png)
![](https://img.haomeiwen.com/i5268036/cc378135a6ace27b.png)
![](https://img.haomeiwen.com/i5268036/5663151a8bbed0a1.png)
![](https://img.haomeiwen.com/i5268036/2ae81d69ab8b9b8c.png)
![](https://img.haomeiwen.com/i5268036/c9a7972fd488706e.png)
![](https://img.haomeiwen.com/i5268036/c1162a567ab300d0.png)
![](https://img.haomeiwen.com/i5268036/bd52d737ab39cd8f.png)
原子性:事务要么就做要么就不做,不能只做一半。
一致性:事务完成之后要保持一致性的结果。
隔离性:事务之间不能相互影响,不论谁先做都不能相互影响,比如A事务的结果不能影响B事务。
持续性:事务一旦完成会在数据库中持续保存。
![](https://img.haomeiwen.com/i5268036/4295e99b0859d331.png)
![](https://img.haomeiwen.com/i5268036/721e37a8d36b7a18.png)
![](https://img.haomeiwen.com/i5268036/8e8770e37d3df970.png)
![](https://img.haomeiwen.com/i5268036/6f12087409d4d864.png)
![](https://img.haomeiwen.com/i5268036/2d29038d809fd9d8.png)
![](https://img.haomeiwen.com/i5268036/4825d90d1c5c6a89.png)
![](https://img.haomeiwen.com/i5268036/25f18cb4b8fbcc4e.png)
![](https://img.haomeiwen.com/i5268036/8cb6c393a60d11fe.png)
加锁的对象要尽量小,加锁的时间要尽量短,因为加完锁之后这个对象就停了。
![](https://img.haomeiwen.com/i5268036/6062b96fcffbb4e8.png)
没有直接写释放对A的写锁,因为ROLLBACK就有释放锁的功能。
![](https://img.haomeiwen.com/i5268036/5be429cb2188cddd.png)
读锁是3级封锁协议,事务完成之后才会释放。
![](https://img.haomeiwen.com/i5268036/4bbb00199b0ef049.png)
![](https://img.haomeiwen.com/i5268036/e1bf97e2b5292069.png)
![](https://img.haomeiwen.com/i5268036/5a51ad2521779499.png)
![](https://img.haomeiwen.com/i5268036/9a4dced71cc5ab81.png)
审计相当于日志的功能。
![](https://img.haomeiwen.com/i5268036/9491b19207194279.png)
![](https://img.haomeiwen.com/i5268036/ced9eb1b7bceeec5.png)
![](https://img.haomeiwen.com/i5268036/f445efa004e5d6b6.png)
备份的时候,差备的效率比增备低。
还原的时候,差备的效率比增备高。以增备还原,还原顺序是A0》A1》A2;以差备还原,还原顺序是A0》A1+A2+A3。
日志文件中要记录所有操作及修改前和修改后的数据,commit之后才算正式提交,要及时commit。
![](https://img.haomeiwen.com/i5268036/fdfde8ba3c99104e.png)
![](https://img.haomeiwen.com/i5268036/a2a12382b7aefaeb.png)
所有的恢复都是根据日志来,具体是撤销还是重做看日志,做完的就重做,没有做完的就撤销。
数据库备份非常重要!!!
![](https://img.haomeiwen.com/i5268036/766b37975bbf48f6.png)
集中式数据库放在一台服务器上,分布式数据库存放在多台服务机。
![](https://img.haomeiwen.com/i5268036/234e4aad8abbedd4.png)
![](https://img.haomeiwen.com/i5268036/bae853ebe5559b9b.png)
![](https://img.haomeiwen.com/i5268036/39acc597f3114744.png)
关系数据库模式:提高性能的扩展方式主要以加内存,更换CPU这些向上扩展的方式。(向上垂直扩展)
NoSQL模式:提高性能的扩展方式主要以集群,向外扩展的方式。(水平扩展)
![](https://img.haomeiwen.com/i5268036/e1966cb9be5611af.png)
![](https://img.haomeiwen.com/i5268036/60d273f7723d9d63.png)
![](https://img.haomeiwen.com/i5268036/53784502df4c38da.png)
反规范化用牺牲空间的方式,提高查询效率。
分割表:把经常查询的部分当作一个表,是一个新表。提高查询效率
表分区:把一张表分成多块放到一台服务器的不同磁盘上
![](https://img.haomeiwen.com/i5268036/1ea2365752d5327e.png)
内存数据库缺点:
1、对内存要求比较高,一般要求1TB;
2、要将数据定期放到外存,要定期备份,因为一旦重启,内存上的数据就会被清掉,造成数据丢失。
如果用内存数据库进行集群,出错概率会提高,维护成本比较高。
![](https://img.haomeiwen.com/i5268036/4dc8b2a281ded218.png)
![](https://img.haomeiwen.com/i5268036/325ba9a6d316b441.png)
数据库性能优化:
1、对于常用的查询可以规划成一个表。
2、索引也不能过多,过多会出现索引冲突和空值的情况下会导致索引失效。
3、SQL优化:尽量用连接不用笛卡尔积;尽量把子表缩小,把条件放在前面。
![](https://img.haomeiwen.com/i5268036/0bb137fbe46dcf0d.png)
![](https://img.haomeiwen.com/i5268036/2d35631c1a9c4b7d.png)
大数据深度分析结果用于决策。
![](https://img.haomeiwen.com/i5268036/6eefa5c7e91296b3.png)
![](https://img.haomeiwen.com/i5268036/ec2f4c427da411a5.png)
![](https://img.haomeiwen.com/i5268036/9ddff0041fbc69d6.png)
![](https://img.haomeiwen.com/i5268036/7eb47db09a8d08f7.png)
![](https://img.haomeiwen.com/i5268036/3b967bbc63a73e3e.png)
![](https://img.haomeiwen.com/i5268036/00b098d410b39d6c.png)
对于数据库的问题主要是针对存储的空间和查询的时间。