知识点
一、数据库系统概论
- DB:数据库
DBMS:数据库管理系统(数据库系统核心,管理和控制数据)
DBS:数据库系统 - 人工管理阶段
文件系统管理阶段:程序与数据有了一定独立性
数据库系统管理阶段


4. 数据库系统特点:
数据结构化、共享高、冗余低、易扩充、数据独立性高
二、数据库系统结构
-
数据模型:概念模型(如E-R模型)、逻辑模型(如层次、网状、关系模型)、物理模型
-
数据库系统的三级模式:外模式、概念模式、内模式。
外模式:即用户模式,局部数据。一个数据库可有多个外模式。
概念模式:所有用户的公共数据视图。一个数据库只有一个概念模式。
内模式:物理结构和存储结构的描述。一个数据库只有一个内模式。

-
数据库的二级映像:
- 外模式 / 模式映像:保证程序与数据的逻辑独立性。
- 模式 / 内模式映像:保证数据的物理独立性。
三、关系数据库基础
-
关系:关系就是表,但不能说表就是关系。(因为关系是一种特殊的表、而表的形式可以多种多样)
-
每一行数据称为一个元组或一条记录。
每一列称为一个属性。 -
一个关系所有的码构成主码,即候选码。
-
关系的完整性:实体完整性(主码唯一且不为空)、参照完整性(参照属性能找到或取空值)、用户自定义完整性
-
两个关系R、S能进行并、交、差运算,必须有相同的属性个数,即并相容性。
-
集合运算:并、交、差、笛卡尔积

-
关系运算:
选择(σ):选出一行。
投影(π):投出一列。
连接、除

四、关系数据库标准语言SQL
- 数值类型:tinyint、int、decimal等
文本类型:char、varchar(长度可变、非unicode)、nchar、nvarchar(长度可变、unicode)
日期时间类型:date(0001-01-01 ~ 9999-12-31)、time(00:00:00.000 ~ 23:59:59.999)、datetime - 数据库的创建,表的创建、删除、修改、查询:见代码(P45~P72)
- 左外连接:以左表为主表,右表中没数据的为null
右外连接:以右表为主表,左表中没数据的为null - 视图:一种数据库对象,是从一个或多个数据表或视图导出的虚表,试图的结构和数据是对数据表进行查询的结果(注:视图查询降低查询性能)
- 视图与表的联系与区别?
- 视图是已经编译好的sql语句,而表不是。视图没有实际的物理记录,而表有。
- 表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表
- 表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在
- 基表中的数据发生变化,从视图中查询出的数据也随之改变,视图的修改影响基表的数据,但视图的删除不影响基表
- 表是概念模式,视图是外模式
- 索引:数据库的附加表,建立列的值和记录地址的映射,以加快查询速度
- 聚集索引和非聚集索引区别?
- 聚集索引物理存储连续;非聚集索引是逻辑上的连续,物理存储不连续
- 聚集索引一个表只能有一个;非聚集索引一个表可有多个
五、关系数据库设计理论
- 平凡函数依赖:X–>Y,Y是X的子集。
非平凡函数依赖:X–>Y,Y不是X的子集。
完全函数依赖:X–>Y,设Z是X的真子集,没有Z–>Y。
部分函数依赖:X–>Y,设Z是X的真子集,有Z–>Y。
传递函数依赖:X–>Z,有X–>Y和Y–>Z,且无Y–>X。 - 第一范式(1NF):所有属性都是不可分的基本数据线,即列不可分

第二范式(2NF):满足1NF,非主属性完全依赖于码

第三范式(3NF):满足2NF,不存在非主属性传递函数依赖于码。
如,学生表(学号, 系名, 宿舍区)属于2NF,不属于3NF,因为有学号—>系名,系名—>宿舍区,则有学号—>系名—>宿舍区,即宿舍区传递依赖于学号。
BC范式(BCNF):满足3NF,不存在主属性对非所在码的传递依赖和部分依赖。
如下属于3NF,不属于BCNF。

- 为什么引入范式理论?
规范化目的是使结构更合理,消除存储异常,使数据冗余尽量小;便于插入、删除和更新;提高表设计的灵活性。范式级别越高,异常越少,但性能降低。 - 反规范化:为提高数据检索性能,引入适当冗余。反规范化加重了维护数据库完整性的代价,常用触发器和事务防止情况发生。
六、数据库设计
- 数据库设计的基本步骤:
需求分析
概念结构设计(E-R图)
逻辑结构设计(关系模型)
物理结果设计
数据库实施
数据库运行与维护
七、数据库保护
- 事务:用户定义的一个数据操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单元。
- 事务的特征:
原子性:事务是数据库的逻辑工作单位
一致性
隔离性
持久性 - 并发操作引发的问题
丢失更新问题:同时读同一数据并修改。
读“脏”数据:读取了未提交事务的数据。
不可重复读(幻读现象):两次读同一数据不一样,另一个事务修改了数据。并发操作破坏了事务的隔离性。 - 并发控制措施:封锁
- 写锁(排他锁):即X锁,已有X锁或S锁时,不能加X锁
读锁(共享锁):即S锁,只有S锁时,可加S锁 - 封锁协议

- 死锁预防:一次封锁法、顺序封锁法
- 可串行化调度:结果正确,当且仅当其结果与按某一顺序的串行执行的结果相同时,该策略为可串行化调度策略。两段锁协议可保证并发调度可串行化。
- 两段锁协议:先封锁,后解锁
- 遵循两段锁协议,一定可串行化;可串行化,不一定遵循两段锁协议
- 遵循两段锁协议,仍可能发生死锁
- 数据库故障类型
事务内部故障:非预期,不能由程序处理。如运算溢出、死锁。
系统故障(软故障):如硬件错误、停电。
介质故障(硬故障):外存故障,如磁盘损坏。
计算机病毒 - 数据转储:静态转储、动态转储
- “先写日志文件”原则
八、安全管理
- 安全控制:确认登录账户,确认访问数据库权限,确认操作数据库权限。
- 用户分类:系统管理员、数据库对象拥有者、普通用户。
- 角色:一组具有相同权限的用户。
九、备份和恢复数据库
- 备份类型
完整备份:所有数据库信息备份
差异备份:对最近一次数据库备份发生变化的数据进行备份
事务日志备份 - 备份内容:系统数据库、用户数据库、事务日志
十、NoSQL数据库
- 四大分类
键-值存储数据库:如Redis
列存储数据库:如HBase
文档型数据库:如MongoDB
图形数据库:如Neo4J - 适用情况:数据模型简单、系统灵活性强、数据库性能高、数据不必高度一致
代码
- 表创建、插入、删除、修改
-
CREATE TABLE SC(
Sno nvarchar(20) NOT NULL,
Cno nvarchar(20) NOT NULL,
Tno nvarchar(20) NOT NULL,
Type nvarchar(20) NOT NULL check(Type in (‘必修’,‘选修’)),
Grade nvarchar(20) NULL check(Grade>=0 and Grade<=100),
primary key(Sno,Cno),
FOREIGN KEY (Sno) REFERENCES Student(Sno),
FOREIGN KEY (Cno) REFERENCES Course(Cno),
FOREIGN KEY (Tno) REFERENCES Teacher(Tno),
) -
INSERT INTO Student(Sno,Sname,Ssex,Sdept,Sage) VALUES (’201920123’,’张大荣’,’男’,’法学院’,19)
-
DELETE FROM COURSE WHERE C_ID NOT IN (SELECT C_ID FROM GRADE)
-
UPDATE Student set Sage=Sage+1
- 表查询
- 多表连接
SELECT Sno,Sname,Smajor
FROM Student S
JOIN SC ON S.sno=SC.sno
JOIN Course C ON C.cno=SC.cno
WHERE Cname=’数据库原理及应用’ - 子查询(嵌套查询)
SELECT Sno,Sname,Smajor
FROM Student
WHERE SNO IN (SELECT SNO FROM SC
WHERE CNO=(SELECT CNO FROM COURSE WHERE CNAME=’ 数据库原理及应用’) - 子查询(嵌套查询)
SELECT Sno,Grade FROM SC
WHERE Cno=’B003’ and grade>( SELECT AVG(Grade) FROM SC WHERE Cno=’B003’) - 模糊查询
SELECT Sname,Sdept,EMAIL
FROM Student
WHERE EMAIL LIKE ‘_@%’
-
存储创建、执行
Create Procedure prcAVG @课程名 char(30)
AS
BEGIN
Select AVG(Grade)
From SC
where Cno=(Select Cno From Course
where Cname= @课程名
)
END
EXECUTE prcAVG ‘数据库原理及应用’ -
视图创建
create view smajor_num
as
select Smajor ,count(*) nums
from student
group by smajor -
权限授予、拒绝、回收
- GRANT SELECT,UPDATE ON STUDENT TO JOHN
- DENY SELECT , UPDATE , DELETE ON STUDENT TO JOHN
- REVOKE DELETE ON STUDENT FROM JOHN
- 创建唯一索引
create unique index idx on course(cname) - 创建触发器(DML触发器:after / for 、instead of)
create trigger insert_or_update_student
on student
for insert , update
as
update student set sage=18
from student t, inserted i
where t.sno=i.sno and i.sage<18
E-R图转关系模型
转换规则



4709





