数据库原理1

第一章:绪论

数据库的四个基本概念

数据、数据库、数据库管理系统、数据库系统

  • 数据:数据是数据库中存储的基本对象

  • 数据库:长期存储在计算机内,有组织,可共享的大量数据的集合

    具有较小的冗余度、较高的数据独立性、易扩展性

  • 数据库管理系统:是位于用户和操作系统之间的一层数据管理软件

  • 数据库系统:由数据库、数据库管理系统(及其应用开发工具)、应用程序和数据库管理员组成的存储、管理、处理和维护数据的系统


数据库系统特点

1:数据结构化(文件系统和数据库系统的本质区别)

数据整体是结构化的,数据不再针对一个应用,而是面向全组织,具有整体的结构化

2:数据共享性高、冗余度低且易扩展

共享性高:不是面向某个应用,而是面向整个系统,因此可以被多个用户、多个应用共享使用

冗余度低:数据共享能够减少数据冗余,节约存储空间

易于扩展:存储结构化的数据,易于扩展

3:数据独立性高,包括数据物理独立性数据逻辑独立性

物理独立性:用户的应用程序和数据库中数据的物理存储是相互独立的,由模式/内模式映像保证

逻辑独立性:用户的应用程序和数据库的逻辑结构是相互独立的,由外模式/模式映像保证

4:数据由数据库管理系统统一管理和控制


数据模型

数据模型是对现实世界数据特征的抽象

第一类概念模型、第二类逻辑模型和物理模型

概念模型
  • 主要用于对于数据库的设计
  • 是现实世界到机器世界的一个中间层次
  • 实体-联系方法(E-R方法也称为E-R模型,用E-R图来描述现实世界的概念模型)
信息世界的概念
  • 实体:客观存在并相互区别的事物
  • 属性:实体所具有的某一特性
  • 码:唯一标识实体的属性集
  • 实体型:学生(学号、姓名、性别、出生年月、所在院系、入学时间)就是一个实体型
  • 实体集:全体学生就是一个实体集
  • 联系:
    • 实体之间的联系通常是指不同实体集之间的联系
    • 实体之间的联系有一对一、一对多、多对多等多种类型
数据模型的组成三要素
  • 数据结构
  • 数据操作
  • 数据完整性约束
常用的数据模型
层次模型
  • 有且只有一个结点没有双亲结点,这个结点称为根结点

  • 根以外的其他结点有且仅有一个双亲结点

  • 适合一对多的关系,不适合多对多关系

在这里插入图片描述

在进行插入操作时,没有相应双亲结点值就不能插入它的子女结点值

在进行删除操作时,如果删除双亲结点值,则相应的子女结点值也被删除

网状模型
  • 允许结点无双亲
  • 一个结点可以有多个双亲
  • 要为每个联系命名(在网状模型中联系不唯一)
关系模型

关系:一个关系对应一张表

元组:表中的一行

属性:表中的一列

码:表中的某个属性组

域:一组具有相同数据类型的值的集合

分量:元组中的一个属性值

关系模式:对关系的描述,如 学生(学号,姓名,年龄,性别,年级)


数据库系统结构

模式是数据库全体数据的逻辑结构和特征的描述,模式的一个具体值称为模式的一个实例,同一个模式可以有很多实例

数据库系统三级模式:外模式、模式和内模式三级组成

在这里插入图片描述

模式

描述的是数据的全局逻辑结构,所有用户的公共数据视图;

  • 一个数据库只有一种模式

  • 作为数据库的中间层,既不涉及数据的物理存储细节和硬件环境,

  • 与具体应用程序、应用开发工具和高级程序设计语言无关

  • 数据库管理系统提供模式数据定义语言(模式DDL)来严格定义模式

外模式

外模式也称为子模式或者用户模式,是数据库用户的数据视图,描述的是数据的局部逻辑结构

  • 外模式通常是模式的子集

  • 一个数据库可以有多个外模式

  • 一个外模式可以被一个用户的多个应用系统所使用,但是一个应用程序智能使用一个外模式

  • 数据库管理系统提供外模式数据定义语言(外模式DDL)来严格定义外模式

内模式

内模式也称为存储模式,是数据物理结构和存储方式的描述,也称为存储模式

  • 一个数据库只有一个内模式
  • 是对数据物理结构和存储方式的描述:比如索引方式是B+树索引还是hash索引、存储方式是升序或者降序、数据是否压缩
外模式/模式映像

当模式改变时,数据库管理员对外模式/模式映像做相应改变,

外模式保持不变,应用程序是根据数据的外模式编写的,应用程序不必修改,称为逻辑独立性

逻辑独立性:用户的应用程序和数据库的逻辑结构是相互独立的

模式/内模式映像

当存储方式发生改变时,只需要对模式/内模式映像做出改变,外部应用程序不必修改

物理独立性:用于的应用程序和数据库的数据物理存储是相互独立的


第二章:关系数据库

数据模型组成三要素:数据结构、数据操作和数据完整性约束

第二章内容按照 关系数据结构(2.1)、关系操作(2.2)、关系三类完整性约束(2.3)、关系代数(2.4,实现关系操作的语言)、关系演算来展开


关系数据结构

笛卡尔积

候选码:某一属性组的值能够唯一标识一个元组,而其子集不能

主码:从候选码中选择出一个

主属性:候选码中的诸属性称为主属性

非主属性(非码属性):不包含在候选码中的诸属性

全码:关系模式下所有属性是这个关系模式的候选码

关系三种类型

基本关系:基本表或者基表,实际存在的表,是实际存储数据的逻辑表示

查询表:查询结果对应的表

视图表:由基本表或者其他视图表导出的表,是虚表,不对应实际存储的数据

关系表中不允许还由表,简言之就是不允许“表中有表”


关系操作

关系操作包含查询操作、插入操作、删除操作、修改操作

查询操作:选择、投影、连接、除、并、差、交、笛卡尔积

其中选择、投影、并、差、笛卡尔积是5种基本操作

关系操作的特点是集合操作方式,即操作的对象和结果都是集合


关系完整性

关系模型中有三类完整性约束:实体完整性、参照完整性和用户定义完整性

实体完整性

属性A是关系R的主属性,A不能取空值

参照完整性

属性F是关系R的外码,参考S中的主码K值

  • 取空值
  • 等于S中某个元组主码值
用户自定义的完整性

用户定义的完整性就是针对某一具体关系数据库的约束条件


关系代数

并、差、交、笛卡尔积

选择

在这里插入图片描述

投影

投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组 (避免重复行)

在这里插入图片描述

连接

在这里插入图片描述

在这里插入图片描述


第三章:SQL

SQL的特点

  • 综合统一

  • 高度非过程化

    在进行SQL数据操作时,只需要提出做什么,无需指明怎么做

  • 面向集合的操作方式

  • 语法结构提供多种使用方式:是嵌入式语言,能够嵌入到高级语言程序中

  • 语言简洁、易学易用

在这里插入图片描述

一个关系数据库管理系统的实例中可以建立多个数据库,一个数据库中可以建立多个模式,一个模式下通常包含多个表、视图和索引等数据库对象

在这里插入图片描述


数据定义

模式定义和删除

定义模式:定义模式实际上定义了一个命名空间,在这个空间中可以进一步定义该模式的数据库对象,如基本表、视图、索引

create scheme "S-T" autherization wang;
create scheme autherization	wang; /*默认模式名为用户名*/
DROP SCHEME "S-T" cascade;/*级联方式删除,删除在这个模式下的所有数据库对象*/
DROP SCHEME wang RESTRICT;/*在该模式下已经定义了下属的数据库对象,如表和视图之类的,拒接执行该指令*/
基本表定义和删除
CREATE TABLE Course(
    Cno CHAR(4) PRIMARY KEY,
    Cname CHAR(10) NOT NULL,
    Cpno CHAR(4),
    FOREIGN KEY (Cpno) REFERENCES Course(Cno)
);
DROP TABLE Course RESTRICT;
DROP TABLE Course CASCADE;
索引定义、修改和删除

顺序文件索引:按照属性值升序或者降序存储关系,在该属性上建立一个顺序索引文件

顺序索引文件:属性值和相应元组指针

B+树索引:将索引属性组织成B+树形式,B+树叶节点为属性值和对应的元组指针

散列索引:建立若干桶,将索引属性按照散列函数映射到对应桶中,桶中存放索引属性值和对应元组指针

CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);/*SC表按照学号升序和课程号降序建立唯一索引*/
ALTER INDEX SCno RENAME TO SCSno;
DROP INDEX SCSno;

数据查询

单表查询
  • 查询指定列
SELECT Sname FROM Student;
  • 查询全部列
SELECT * FROM STUDENT;
  • 查询经过计算的值
SELECT SNAME,2014-SAGE FROM STUDENT;
  • 消除取值重复的行,若无DISTINCT关键词,则默认为ALL
SELECT DISTINCT SNO FROM SC;/*消除结果表中重复行*/
  • 查询满足条件的元组
    • %表示任意长度字符串,如a%b表示以a开头,以b结尾的任意长度字符串
    • _任意单个字符,a_b表示以a开头,以b结尾的长度为3的任意字符串
SELECT DISTINCT FROM SC WHERE GRADE<60;/*比较大小*/
SELECT SNAME FROM SC WHERE SAGE BETWEEN 20 AND 30;/*确定范围*/
SELECT Sname FROM SC WHERE Sdept IN('CS','MA','IS');/*确定集合*/

WHERE Sname NOT LIKE '刘%'; /*% 代表任意长度(长度可以为0)的字符串*/
WHERE Sname LIKE '欧阳__'; /*_代表单个字符*/
WHERE Cname LIKE 'DB\_Design' ESCAPE '\';
  • 设计空值的查询,注意 Grade IS NULLIS 不能用等号代替
WHERE Grade IS NULL;
# WHERE Grade IS NOT NULL;
  • 多重条件查询
WHERE Sdept= 'CS' AND Sage<20;

ORDER BY

对查询结果按照一个属性或者多个属性列的升序ASC或者DESC降序排序,默认为__升序__

对于空值,排序时显示的次序是由具体系统来决定的

  • 按升序排序,含空值的元组在最后显示
  • 按降序排序,空值的元组最先显示
SELECT Sno, Grade
FROM SC
WHERE Cno= ' 3 '
ORDER BY Grade DESC;

聚集函数

聚集函数遇到空值时,除了COUNT(*),其他都直接跳过。

聚集函数只能用于SELECT子句GROUP BY中的HAVING子句。(不能用于WHERE子句)

SELECT COUNT(*) FROM Student;
SELECT COUNT(DISTINCT Sno) FROM SC;
SELECT AVG(Grade) FROM SC WHERE Cno= ' 1 ';
SELECT SUM(Ccredit) FROM SC,Course;
SELECT MAX(Grade) FROM SC WHERE Cno='1';

GROUP BY

GROUIP BY子句将查询结果按照某一列或者多列的值分组,值相等的为一组

SELECT Cno,COUNT(Sno) FROM SC GROUP BY Cno

查询选修相同Cno课程的同学总人数

SELECT FROM SC GROUP BY Sno HAVING COUNT(*)>3;

查询出元组个数>3,既学生选修的课程超过3门组选出来

连接查询

等值连接与非等值连接

SELECT Student.*,SC.* FROM Student,SC 
WHERE Student.Sno=SC.Sno;

自然连接

SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
FROM Student,SC
WHERE Student.Sno = SC.Sno;

复合条件

WHERE Student.Sno=SC.Sno AND SC.Cno=' 2 ' AND SC.Grade>90;

自身连接

连接操作对于自己和自己进行拼接,称为表的自身连接,取别名

SELECT FIRST.Cno, SECOND.Cpno
FROM Course FIRST, Course SECOND
WHERE FIRST.Cpno = SECOND.Cno;

外连接

仍将悬浮元组保存在结果关系中(会赋空值NULL)

# 左外连接
SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
FROM Student LEFT OUT JOIN SC ON (Student.Sno=SC.Sno);

多表连接

两个以上的表进行连接

嵌套查询

ORDER BY子句只能对最终查询结果排序

相关子查询和非相关子查询

SELECT Sno,Cno
FROM SC x
WHERE Grade>=(SELECT AVG(Grade)
              FROM SC y
              WHERE y.sno=x.sno
             );

ANY、EXISTS相关子查询

SELECT Sname,Sage FROM Student
WHERE Sage<ANY(
    SELECT Sage FROM Student WHERE Sdept='CS'
)
AND Sdept<>'CS'

SELECT Sname FROM Student
WHERE EXISTS(
    SELECT * FROM Student WHERE Sno=Student.Sno AND Cno='1'
);
集合查询

集合操作主要包括并UNION、交INTERSECT、差EXCEPT

UNION:合并后会自动去除重复的元组

SELECT * FROM Student WHERE Sdept='CS' UNION SELECT * FROM Student WHERE Sage<=19;
SELECT * FROM Student WHERE Sdept='CS' INTERSECT SELECT * FROM Student WHERE Sage<=19;
SELECT * FROM Student WHERE Sdept='CS' EXCEPT SELECT * FROM Student WHERE Sage<=19;

数据更新

插入
  • 插入元组
INSERT INTO SC(Sno,Cno) VALUES ('201908010808','1');
  • 插入子查询结果
CREATE TABLE Dept_age(
    Sdept CHAR(15),
    Avg_age SMALLINT
);
INSERT INTO Dept_age(Sdept,Avf_age)
SELECT Sdept,AVG(Sage) FROM Student GROUP BY Sdept;
修改
  • 修改某一元组
UPDATE Student SET Sage=22 WHERE Sno='201215121';
  • 修改多个元组
UPDATE Student SET Sage=Sage+1;
  • 带子查询的修改
UPDATE SC SET Grade=0 WHERE Sno IN(SELECT Sno FROM Student WHERE Sdept='CS')
删除
  • 删除某一个元组值
DELETE FROM Student WHERE Sno='1';
  • 删除多个元组值
DELETE FROM SC;
  • 带子查询的删除
DELETE FROM SC WHERE Sno IN(SELECT Sno FROM Student WHERE Sdept='CS');

空值

不能取空值的约束条件

  • NOT NULL约束条件的
  • UNIQUE限制的属性
  • 码属性

视图

视图是从一个或者几个基表中导出的表,与基表不同,这是一个虚表

数据库中只存放视图的定义,而不存放视图对应的数据

视图类似于一个窗口,如果基表发生改变,视图也会跟着发生变化

创建视图
CREATE VIEW IS_student
AS 
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept='IS'
WITH CHECK OPTION;

WITH CHECK OPTION加上后,对于视图进行修改、插入和删除操作时,关系数据库会自动加上Sdept='IS'的条件

行列子集视图:从单个基表中导出,并且只是去掉了基表中的某些行和某些列,但是保留了主码

分组视图:带有聚集函数和GROUP BY子句的查询来定义视图

删除视图
DROP VIEW IS_S1 CASCADE;
查询视图

视图消解

1:进行有效性检查,检查视图是否存在

2:从数据字典中取出视图定义,把定义的子查询和用户查询结合,转换成等价的对基本表的查询

3:执行修正了的查询

更新视图

更新视图:通过视图来插入、删除和修改数据

也是通过视图消解来转换为对基表的数据更新操作

视图作用
  • 视图能简化用户操作

  • 视图能使用户多种角度看待数据

  • 视图对重构数据库提供了一定程度的逻辑独立性

  • 视图能够对机密数据提供安全保护

  • 视图可以更清晰表达查询

==数据物理独立性:==用户的应用程序不依赖于数据库的物理结构

==数据逻辑独立性:==当数据库重构时,增加新的关系或者对原先关系增加新的字段等,用户的应用程序不会受影响

比如新建视图是两个基表的自然连接的结果(这两个基表是由于重构而改变的),用户应用程序仍然能够用视图查找到数据


第四章:数据库安全性

数据库管理系统提供的安全技术为:强制存取控制、数据加密存储、加密传输等

在这里插入图片描述

身份鉴别机制

用户在进入系统中,系统对用户标识进行识别


存取控制

包括定义用户权限合法权限检查

定义用户权限

用户对某一数据对象的操作权力称为权限,数据库管理系统提供了适合的语言来定义用户权限,这些定义经过编译后存储在数据字典中,被称为是安全规则或授权规则

合法权限检查

当用户发出存取数据库操作的请求后,数据库管理系统在系统内查找数据字典,根据安全规则进行合法权限检查

自主存取控制(DAC)
  • 用户对不同的数据库对象有不同的存取权限

  • 不同用户对同一对象也有不同的权限

  • 用户可以将拥有的权限转给其他用户

用户自主地决定将数据存取权限授予何人,是否决定将“授权”权限赋予他人,这样地存取控制称为自主存取控制

强制存取控制(MAC)

每个数据库对象被标注一定的密级,每一个用户也被授予某一个级别的许可证,只有合法的用户才可以存取

分为主体和客体,为每个主体和客体分配一个敏感度标记(TS>=S>=C>=P)

  • 当主体许可证级别大于等于客体密级时,主体才能够读取相应客体

  • 当主体许可证级别小于等于客体密级时,主体才能够写相应客体

授权

GRANT:授予用户权限

REVOKE:回收用户权限

CASCADE或者RESTRICT,级联回收或者约束回收

WITH GRANT OPTION:被授权的用户能够传播该权限

GRANT ALL PRIVILEGES ON TABLE Student TO U2,U3;
GRANT INSERT ON TABLE SC TO U5 WITH GRANT OPTIONS;

新创建的用户只有三种权限:CONNECT、RESOURCE、DBA

在这里插入图片描述

角色

数据库角色是被命名的一组与数据操作相关的权限,角色是权限的集合

可以对一组具有相同权限的用户创建一个角色,使用角色来管理数据库权限可以简化授权过程

作用:数据库角色是权限的集合,使用角色管理数据库权限可以简化授权过程,使自主授权执行的更加灵活和方便

一个角色的权限

  • 直接授予这个角色的全部权限
  • 其他角色授予这个角色的权限
视图机制
  • 创建视图
  • 赋予视图权限给相应用户(将保密的数据对无权存取的用户隐藏起来)

审计

审计功能是将用户对数据库的操作自动记录下来存放到审计日志中,利用审计日志来监控数据库中的各种行为,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、事件和内容等

AUDIT 设计审计功能,NOAUDIT语句取消审计功能

AUDIT ALTER,UPDATE ON SC;
NOAUDIT ALTER,UPDATE ON SC;

第五章:数据库完整性

实体完整性
  • 检查主码是否唯一(通过B+树进行索引能大大提高效率)
  • 检查主码各个属性是否为空

单属性码可以设置为列级约束条件和表级约束条件

CREATE TABLE SC(
    Sno CHAR(9) PRIMARY KEY, /*列级主码*/
    Ssex CHAR(2)
);

多属性码定义只能为表级约束条件

CREATE TABLE SC(
    Sno CHAR(9) NOT NULL,
    Cno CHAR(9) NOT NULL,
    Ssex CHAR(2)
    PRIMARY KEY(Sno,Cno) /*表级约束*/
);

参照完整性

对于参照完整性,除了定义外码,还应该定义外码是否允许空值

CREATE TABLE SC(
    Sno CHAR(4) NOT NULL,
    Cno CHAR(4) NOT NULL,
    PRIMARY KEY(Sno,Cno),
    FOREIGN KEY(Sno)REFERENCES Student(Sno) ON DELETE NO ACRION ON UPDATE CASCADEFOREIGN KEY(Cno)REFERENCES Course(Cno)
);

用户定义完整性
  • 列值非空 (NOT NULL)
  • 列值唯一(UNIQUE)
  • 检查列值是否满足一个条件表达式(CHECK)
CREATE TABLE Student(
    Sname CHAR(8) NOT NULL,
    Sno CHAR(9) UNIQUE PRIMARY KEY,
    SEX CHAR(2) CHECK (Ssex IN('男','女'))
);

完整性约束命名子句

CONSTRAINT : 用来对完整性约束条件命名​

CREATE TABLE Student(
    Sno NUMERIC(6) CONSTRAINT C1 CHECK (Sno BETWEEN 90 AND 900),
    Sname CHAR(20) CONSTRAINT C2 NOT NULL,
    CONSTRAINT StudentKey PRIMARY KEY(Sno)
);

断言

任何涉及断言的操作都会触发对断言的检查,如果不为真值操作就会被拒绝执行

CREATE ASSERTION C1 CHECK(
    60>=ALL(SELECT COUNT(*)
           	FROM SC
            GROUP by cno
           )
);
DROP ASSERTION C1;
触发器
  • 触发器规则:事件-条件-动作

    事件发生,检查规则,执行动作

  • 触发器只能定义在基本表上,不能定义在视图上

  • 触发器类型

    • 行级触发器 FOR EACH ROW(执行一次语句,按照行数触发器执行N次)
    • 语句级触发器 FOR EACH STATEMENT(执行一次语句触发器执行一次)

在这里插入图片描述


第六章:关系数据理论

函数依赖

对于任意一个Y,在两个元组中不可能有两个相应的X属性相等

X函数确定Y、Y函数依赖于X X → Y X\to Y XY

  • 1NF:如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF

  • 2NF:消除非主属性对码的部分函数依赖

    R∈1NF,且每一个非主属性完全函数依赖于任何一个候选码,则R∈2NF

  • 3NF:消除非主属性对码传递依赖

  • BCNF:在3NF基础上一个关系依赖里面每一个决定因素都包含码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值