参考教学视频:bilibili 张旭
由于排版问题,建议大家到我的个人网站,慢慢食用 传送门
实体之间有一对一、一对多和多对多等多种联系
概念模型的一种表示方法:实体-联系方法,用E-R图来描述现实世界的概念模型,也叫E-R模型
关系:一个关系对应通常说的一张表
元组:表的一行
属性:表的一列
码:也称码键,表中某个属性组
域:是一组具有相同数据类型的值得集合
分量:元组的一个属性
•域
•笛卡尔积
•关系
– 关系,属性,元组
– 候选码,主码,主属性
– 基本关系的性质
查询
选择、投影、连接、除、并、交、差
数据更新
插入、删除、修改
基本运算
并、差、笛卡尔积、投影、选择
交并差这里不再赘述。
笛卡尔积即是两个表的元组之间排列组合
比如 在student表中选择sdept=‘2s’的全部信息
σ s d e p t = ′ 2 s ′ ( s t u d e n t ) \sigma_{sdept}='2s'(student) σsdept=′2s′(student)
查询指定属性,如查询sname,sex在student表中
π s n a m e , s e x ( s t u d e n t ) \pi_{sname,sex}(student) πsname,sex(student)
比如在表SC中查询学号(sno)为95001的学生选修的课程号(cno)
π c n o ( σ s n o = ′ 9500 1 ′ ( S C ) ) \pi_{cno}(\sigma_{sno}='95001'(SC)) πcno(σsno=′95001′(SC))
自然连接:把共同属性进行等值连接
悬浮元组:在连接时,R中某些元组可能不存在与公共属性相等的值,从而造成关系R中的这些元组被舍弃,这些被舍弃的元组称为悬浮元组。如下面例子当中的第二三五行就是悬浮元组
例如表R连接表S表示为
R ⋈ S R\bowtie S R⋈S
除:保留R中满足S的(R和S的共同属性),而且R中列要去掉S的列
查 询 条 件 | 谓 词 |
---|---|
比 较 | =,>,<,>=,<=,!=,<>,!>,!<;NOT+上述比较运算符 |
确定范围 | BETWEEN AND,NOT BETWEEN AND |
确定集合 | IN,NOT IN |
字符匹配 | LIKE,NOT LIKE |
空 值 | IS NULL,IS NOT NULL |
多重条件(逻辑运算) | AND,OR,NOT |
案例
select * from edu_student;
select id 标志,title 课程名称 from edu_course ec;
select distinct title 课程名称 from edu_course;
select title 课程名称 from edu_course where price>=88
select 3 in (1,2);
select * from edu_course where title like ‘_速成’;
'-'代表一个不确定字符
'%'代表多个不确定字符
isnull 和is not null不再赘述
and 和or不再赘述
select sno,grade from sc where cno=‘3’ orderby grade desc;
select count(*) from student;
select avg(grade) from sc where cno =‘1’;
如:
select sno,sname,sdept from student where sdept in
(select sdept from student where sname = ‘刘晨’);
select sname,sage from student where sage
主要是解决“至少选择了”、“只选择了”和“选择了全部”类似的问题
例如:
这里的exists和not exists有些绕,我加入了一些自己的理解:
比如上面的例子,可以理解为一条一条数据来判断,从最外层开始,首先查询所有的学号sno,传入下一层的是第一个sno,接下来对这个sno进行判断,
下一层select中查询出来的是学号为‘20021522’学生所选全部课程,传入下一层的是第一个sno+第一个课程cno
最后一层进行判断,sno是否选修了cno,接下来判断sno是否选修了cno2,依次类推,如果都选修了,那么最后一层传出的是false(因为是not exists),再往上一层传的是ture(又是not exits),所以这条数据就被保留了,接下来就是第二个学生sno2传入下一层,
以此类推,就可以找出所有“至少选修了所有学号为‘200215122’学生选修课程的学生”
insert into 表名[(字段列表)] values (值列表)
update 表名 set 字段1=值,字段2=值…where 条件
delete from 表名 [where 条件]
实体完整性
主码唯一且非空
参照完整性
外码要么为空,要么对应另一表的主码
用户定义完整性
实体的属性要完整,比如学号多少,姓名,班级,专业之类
断言assertion
格式: create assertion <断言名>
触发器即 事件->条件->动作
当对一个表中增删改时,对触发器里面的条件进行检查,如果成立就执行触发器里面的动作,否则不执行
格式:
create trigger <触发器名> /*每当触发事件发生时,该触发器被激活*/
{before|after} <触发事件> on <表名> /*指明触发器激活时间是在执行触发器前或后*/
referencing {new|old} row as <变量>/*referencing 指出引用的变量*/
for each{row|statement} /*定义触发器的类型,指明动作体执行的频率*/
[where<触发条件>] <触发动作体>/*仅当触发条件为真时才会触发动作体*/
非平凡的函数依赖
X->Y,但Y不属于X,则称X->Y是一个非平凡的函数依赖
平凡的函数依赖
X->Y,且Y属于X,X->Y是一个平凡的函数依赖
选候选码
(1)L类:仅仅出现在F中的函数依赖左部的属性
(2) R类:仅仅出现在F中的函数依赖右部的属性
(3) N类:不出现在F中的函数中的属性
(4) LR类:出现在F中的函数依赖左部又出现在右部的属性
结论:
(1) 若X是L类属性:则X必然属于任一候选键的成员
(5) 若X是L类属性:且X包含了R的所有属性,则X必然属于唯一候选键
(2) 若X是R类属性:则X不属于任何候选键
(3) 若X是N类属性:则X必然属于任一候选键的成员
(4) 若X是LR类属性:且X包含了R的所有属性,则X必然属于唯一候选键
案例
范式是符合某一种级别 的关系模式的集合
关系数据库中的关系必须满足一定的要求 。满足不同程度要求的为不同范式
范式的种类
第一范式(1NF)
第二范式(2NF)
第三范式(3NF)
BC范式(BCNF)
第四范式(4NF)
第五范式(5NF)
只需知道BC范式以上即可
所有字段值都是不可再分的原子值
如地址和省份城市详细地址的关系
第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库
一个表只能包含一种数据,不可以把多种数据保存在同一张表中,即每一个非主属性完全函数依赖 于码
确保数据表中的每一列数据都和主键直接相关,而不能间接相关
比如在设计一个订单数据表的时候,可以将客户编号作为一个外键和订单表建立联系,而不可以在订单表中添加客户的其他信息
消除每一属性对候选码的传递依赖,BCNF是修正的第三范式
解题过程
准则: 无损连接 和 保持函数依赖
无损: 就是分解后再次连接,和分解之前一样
依赖:依赖不变
例题部分
设关系模式为 R, U={A,B,C,D,E,P },
F={A→D,E→D,D→B,BC→D,DC→A }
(1)求(AD)+;
(2)求R的候选码,指出哪些属性是主属性,哪些是非主属性。
(3)判断是第几NF
例题二
例题部分
设在需求分析阶段,经初步分析,有如下实体及其属性:
学生:学号、学院、姓名、性别、年龄、选修课程名
课程:编号、课程名、开课学院、任课教师号
教师:教师号、姓名、性别、职称、讲授课程编号
学院:学院名称、电话、教师号、教师名
调研后确定系统中存在如下联系:
(1)一个学生可选修多门课程,一门课程可为多个学生选修;
(2)一个教师可讲授多门课程,一门课程可为多个教师讲授;
(3)一个学院可有多个教师,一个教师只能属于一个学院。
试完成如下设计:
(1)设计包括各实体及其联系的全局E-R图(为避免E-R图图形复杂,可省去实体属性,注意:需求分析的实体属性仅为初步分析,存在重复和多余属性) (12分)
(2)将该全局E-R图转换为等价的关系模型表示的数据库逻辑结构。(6分)
解答
(2) 关系模式
学院(学院名,电话)
教师(教师号,姓名,性别,职称,学院名)
课程(课程编号,课程名,学院名)
学生(学号,姓名,性别,年龄,学院名)
讲授(教师号,课程编号)
选修(学号,课程编号)
例题二
销售部门管理系统数据库设计:(共15分)
假定一个部门的数据库包括以下信息:
a. 职工的信息:职工号、姓名、地址。
b. 部门的信息:部门号、部门名、经理。
c. 产品的信息:产品名、产品内部编号。
d. 制造商的信息:制造商名称、地址。
需求分析:一个部门有多个职工,每个职工只属于一个部门; 每种产品可以由不同部门销售,一个部门可以销售多种产品;每种产品可以由不同制造商生产,每个制造商可以生产多种产品,每个制造商生产的每种产品对应不同价格。
要求:(1)根据上述语义画出E-R图;(9分)
(2)将E-R图转换成对应的关系模式并标注每个关系的主码。(6分)
解答
关系模式:
职工(职工号,姓名,地址,所在部门) -----1分
部门(部门号,部门名称、经理) -----1分
产品(产品内部编号,产品名称) -----1分
制造商(制造商名称,地址) -----1分
销售(部门号,产品内部编号) -----1分
生产(制造商名称,产品内部编号,价格) -----1分
例题三
查询过程
优化原则
案例
优化后:
定义:
{% folding,恢复策略 %}
事务故障的恢复:事务异常终止,那么撤销之前所有的操作
系统故障的恢复:还没执行完的事务UNDO,丢失的事务REDO
介质故障的恢复:重装数据库,重做已经做完的事务
1、丢失修改:修改的东西没生效
2、读脏数据:数据正在更新时被读取,数据就是脏数据
3、不可重复读:在一个事务中两次读取数据不一致
一级封锁协议
修改时必须加X锁,直到结束
解决丢失修改问题
二级封锁协议
读的时候,加S锁,用完就放
解决读脏数据问题
三级封锁协议
读的时候,加S锁,知道结束
解决不可重复读问题