0%

数据库第二章——数据库系统结构

三个世界:现实世界,信息世界,机器世界

数据库系统中数据的三级模式结构:

数据库系统中数据的三级模式结构

模式/内模式印象实现了 物理独立性

外模式/模式印象实现了 逻辑独立性

物理独立性+逻辑独立性 加起来叫数据独立性

用户访问数据的过程

这个图有点问题,最后一步还有一个日志,就是用户的每一个操作都会记录在日志里面。

DBMS的主要功能:

1.定义功能:DMBS提供DDL来定义模式,外模式和内模式

2.操纵功能:增删查改

3.保护功能:数据库的恢复,并发控制,完整性和安全性

4.维护功能 5.数据字典

DBS的组成(用户+DBMS+DB):数据库,硬件,软件,数据库管理员(DBA)

数据库第三章

关系模式的完整性规则:

1.实体完整性规则:实体主键属性不能为空

2.参照完整性规则:不引用不存在的实体,要么就为空或者参照关系中的某个主键

3.用户定义的完整性规则:由用户的应用环境决定

早八摸一会会便要倒下了。xly说:大家没吃早饭的都可以吃吃喝喝不扣分嗷,喝水也行、喝饮料也行不喝酒就行。因为早上醒来神智有一丢丢不清醒,所以可以说一点胡话。本是想偷走那个猫猫竖耳朵,但是一开始便找不到借口,所以干了一些并没有缘由的事情。但是大概便是没有缘由的事情才是金泓宇最后的自由裁量权。因为有的事情算是金泓宇想不明白,放在一边以后看着说,有些事情是金泓宇想明白了,决定不了的。因为本质这个决定带来的事情我看不到,以及金泓宇望穿了说大概会有更坏的事情因为决定而发生。所以想明白和去做完全是两件事情呢。但是猫猫却还是一件事情。金泓宇神志不清的时候真是什么话都敢讲呢。

猫猫

视图

视图的定义:(1)视图是从一个表或者多个表里导出的。(2)视图是一张虚表。(3)视图定义后可以和表一样操作

数据不在视图里面,在原来的表里面

视图的作用:安全

1.SQL语句创建视图:

1
CREATE VIEW<name>[<list>] AS <subselect>[WITH CHECK OPTION]

2.SQL视图的删除:只删除视图的定义,和原来表里面的数据一点关系都没有

视图的查询:DBMS对视图的查询会转换为对表的查询

3.视图的更新

视图的更新是有条件限制的。(体现了视图的安全性)

(1)从单个关系仅使用了选择和投影导出的 这个是好更新的

(2)列出现表达式和常数是不好INSERT和UPDATE的(不好更新的太多了,不想记了)

老板四十岁以后悟出的道理:要大量的接触社会,还一定要发SCI,还一定要对社会有贡献

嵌入式SQL

嵌入式SQL的使用规定:

使用SQL语句逐一从游标中获取记录,并赋给主变量,由宿主语言作进一步的处理。游标相当于里面放了一张表,分四个步骤:

(1)定义游标(2)打开游标(3)推进游标(4)关闭游标

如果查询结果只是一行,那只要定义几个变量

如果查询结果是一张表,一定要靠游标完成

金泓宇又在院长的课上摸鱼了,试试看这个\(a\beta\)好不好用叭,要是不好用也不想修了呢。昨天晚上矫情的有一丢丢晚,想想不知道是不是坏事,但是坏的一定是,没什么人会喜欢矫情的金泓宇。在这里记两句话叭,第一句本不该在这,但要送给一些人,也许假以时日会有用。某先行一步,俟诸公锒铛之九泉,此日不远。另外一句要送给金泓宇自己,我这个獦獠人,也想学佛吗。

好像是早上

最近也没有特别不想睡觉吧。只不过因为不睡觉的时间要过的比白天快乐不少。所以大概愿意用白天至少目前来说没有那么,完全是金泓宇的时间来不清醒,这样晚上大概就会清醒一点,因为本来醒着是一件无聊的事情,最近变得有趣一点了。金泓宇必须要回家,不回家谁去陪家里人呢,就像如果爸爸不常在家,爸爸回家了就一定要回去陪爸爸,所以金泓宇周五一定要回家。但是就算今天没课了,如果金泓宇回去了,就没有人陪金泓宇了,现在就走,谁陪我呢,所以金泓宇好坏嗷。所以周五到家,才是金泓宇的合法回家时间。

某个小朋友想养的萨摩耶

第三章 线性模型

线性模型的基本形式: \[ f(x)=w_1x_1+w_2x_2+\ldots+w_dx_d+b \] 一般向量形式写成: \[ f(x)=w^Tx+b \] 单一属性的线性回归目标: \[ f(x)=wx_i+b\\st.\rightarrow(x)\simeq y \] 局部加权线性回归:降低某一个特征的影响

对于某一个周期性波动性的数据,使用线性模型明显和原模型的差别较大

平滑问题:有趋势的或是季节性数据

对于存在于该数据周围的所有数据按照距离赋予权值,这里我们使用高斯函数进行权值计算。高斯函数定义为空间中任意一点xi到x之间欧氏距离的单调函数。 \[ k(x,x')=e^{-\frac{|x-x'|^2}{2\sigma^2}} \] 对数线性回归:输出标记的对数为线性模型逼近的目标。 \[ lny=w^Tx+b \Leftrightarrow y=w^Tx+b \] 对数几率回归:

将y视为样本x作为正例的可能性,则1-y是反例的可能性,y/1-y成为几率。反映了x作为正例的相对可能性,取其对数得到对数几率。

对数几率回归的优点:

无需事先假设数据分布,直接对分类可行性建模,避免假设分布不准确带来的问题

对率函数是任意阶可导的凸函数

极大似然估计:

第二章 模型评估与选择

经验误差与过拟合:

样本误差,测试误差,泛化误差

过拟合:将训练样本本身的特点当作所有样本的一般性质,导致泛化性能下降

目前的解决方法:优化目标加正则项、early stop

评估方法:

我们假设测试集是从样本真实分布中独立采样获得,将测试集上的测试误差作为泛化误差的近似,所以测试集和训练集要尽可能的互斥。

通常将m个样本的数据集D,拆分成训练集S和测试集T

1.留出法 直接将数据集划分为两个互斥集合,测试/训练集的数据分布要尽量保持一致。一般做若干次随机划分,重复实验取平均值

2.交叉验证法

将数据集划分成k个大小相同的互斥子集。每次用k-1个子集的并集作为训练集,余下的子集作为测试集,最终返回k个测试结果的均值。

留一法:交叉验证的特例。m个样本只有唯一方法划分为m个子集——每个子集包含一个样本。

3.自助法

每次在D里选一个样本,放到D‘,然后放回。重复执行m次,获得一个D’。

性能量度:

错误率和精度:加起来等于1 。错误率就是错的占样本的比例,精度就是对的占样本的比例。

混淆矩阵:TP(真正例)+FP(假正例)+TN(真反例)+FN(假反例)=样例总数

查准率和查全率:P=TP/(TP+FP)查准率 R=TP/(TP+FN)查全率

以查准率为Y轴查全率为X轴,做P-R曲线。哪个包住了哪一个就是效果更好。在两个曲线有交叉的情况下,可以计算面积。或者考虑在某一个特定的点下,查准率和查全率的指标。

“平衡点”:平衡点是曲线上查询率=查全率时的取值。平衡点谁更高。哪个学习器就更好。

F1度量:F1=(2xTP)/(样例总数+TP-TN) \[ F_{\beta}=\frac{(1+\beta^2)\times P \times R}{(\beta^2\times P)+R} \] ROC与AUC:很多学习器的测试样本产生一个实值或者概率预测,然后将这个预测值和一个分类阈值进行比较,大于则为正例,小于则为反例。ROC曲线的纵轴是真正例率(TPR True Positive Rate),横轴是假正例率(FPR false Positive Rate)。

AUC值是ROC曲线下的面积,即Area Under ROC Curve。根据ROC的画法,AUC的计算可以估算为矩形面积: \[ AUC=\frac{1}{2}\sum^{m-1}_{i=1}(x_{i+1}-x_i).(y_i+y_{i+1}) \]

比较检验:

假设检验:假设检验中的“假设”是对学习器泛化错误率分布的某种判断或猜想。例如a<a0。我们可以使用二项检验或者t检验。

交叉验证t检验,5x2交叉验证是做五次2折交叉验证。

数据查询(接上节课):

带有谓词in的子查询:

1
2
SELECT sname FROM s,sc WHERE s.sno=sc.sno AND cno='c2';
SELECT sname FROM s WHERE sno in (SELECT sno FROM sc WHERE cno='c2');//嵌套查询先做里面的SELECT

带有ANY和ALL的比较子查询:

1
SELECT s.sno,sname FROM s WHERE sex='男' AND s.sno=sc.sno GROUP BY s.sno HAVING AVG(grade)>ALL (SELECT grade FROM s,sc WHERE s.sno=sc.sno AND sex='女')//找男同学,平均分大于所有女同学的分

带有存在量词EXISTS子查询:

1
2
SELECT sname FROM s WHERE sno NOT IN (SELECT sno FROM sc WHERE cno='c2');
SELECT sname FROM s WHERE NOT EXISTS (SELECT * FROM sc WHERE cno='c2' AND s.sno=sc.sno);//存在量词是先做外面再做里面的

SQL语言只有存在量词,不支持全称量词:

查询所有学生都选修的课程号和课程名==没有学生不选修的课程号和课程名 \[ (\forall x)P\equiv\neg(\exist x)\neg P \]

1
SELECT cno,cname FROM c WHERE NOT EXISTS (SELECT * FROM s WHERE NOT EXISTS (SELECT * FROM sc WHERE sno=s.sno AND cno=c.cno))//不存在一个学生不选

SQL不支持逻辑蕴含:

求选修学号为S3的学生所修全部课程的学生号码 \[ (\forall c_y)(p \rightarrow q) \\ \equiv \neg(\exist c_y)\neg(p \rightarrow q) \\ \equiv \neg(\exist c_y)\neg(\neg p \lor q) \\ \equiv \neg(\exist c_y)( p \land \neg q) \]

1
SELECT sno FROM sc x WHERE NOT EXiSTS (SELECT * FROM sc y WHERE sno='s3' AND NOT EXISTS (SELECT FROM sc z WHERE sno=x.sno and cno=y.cno))

SQL的数据操作:

1.数据插入

2.数据删除

1
2
3
DELETE FROM<表名> WHERE
DELETE FROM s WHERE sno NOT IN (SELECT sno FROM sc)
DELETE FROM sc WHERE cno IN (SELECT cno FROM c WHERE cname='数据库原理')

3.数据修改

1
2
3
UPDATE<表名> SET<列名>=<表达式>
UPDATE sc SET grade=grade*1.04 WHERE grade>=70
UPDATE sc SET grade=grade*1.05 WHERE grade<70

实验要求:

第一题:给定一个矩阵, 判断是否存在单位矩阵,并给出所在列

金泓宇的弱智思路:因为早起智商低下,所以就定义一个Mat单位阵,然后一点一段划过去判断能不能合上

1
2
3
4
5
6
7
8
9
10
11
12
function [yt] = whethereye(A,m,n)
yt=6.19;
M=min(m,n);
x=m-M+1;y=n-M+1;
Mat=eye(M,M);
for i=1:x
subA=A(:,i:i+M-1)
if(subA==Mat)
yt=i;
end
end
end

第二题:高斯消元解方程

就正常按高斯消元的步骤就好,做的时候因为偷懒看了上学期的作业,行和列还给搞反了,看了半天怎么系数那一列做完都不动的

1
2
3
4
5
6
7
8
9
10
11
12
13
function[x]=gauss_elim(A,b)
C=[A,b];
[m,n]=size(A);
for i =1:n
C(i,:) = C(i,:)/C(i,i);
for j =1:n
if i~=j
C(j,:)= C(j,:)-C(i,:).*C(j,i)
end
end
end
x=C(:,n+1);
end

开环系统和闭环系统的抗扰动性能对比

实验目的:设输入电压为0时,扰动信号Td(s)=1/s,分别比较在无转速计开环控制状态下和有转速计闭环控制状态下电机输出转速稳定误差。

开环系统:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
%Speed Tachometer Example
Ra=1;Km=10;j=2;f=0.5;Kb=0.1;
num1=[1];den1=[j,Kb];sys1=tf(num1,den1);
num2=[Km*Kb/Ra];den2=[1];sys2=tf(num2,den2);
sys_o=feedback(sys1,sys2);
%
sys_o=-sys_o
%
[yo,T]=step(sys_o);
plot(T,yo)
title('Open-loop Disturbance Step Response')
xlabel('Time (sec)'),ylabel('\omega_o'),grid
%
yo(length(T))

实验结果:

开环系统

闭环系统:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
%Speed Tachometer Example
Ra=1;Km=10;J=2;b=0.5;Kb=0.1;Ka=54;Kt=1;
num1=[1];den1=[J,b];sys1=tf(num1,den1);
num2=[Ka*Kt];den2=[1];sys2=tf(num2,den2);
num3=[Kb];den3=[1];sys3=tf(num3,den3);
num4=[Km/Ra];den4=[1];sys4=tf(num4,den4);
sysa=parallel(sys2,sys3);
sysb=series(sysa,sys4);
sys_c=feedback(sys1,sysb);
%
sys_c=-sys_c
%
[yc,T]=step(sys_c);
plot(T,yc)
title('Closed-loop Disturbance Step Response')
xlabel('Time (sec)'),ylabel('\omega_c(rad/sec)'),grid
%
yc(length(T))

实验结果:

开环系统