数据库系统概论

1.绪论

1.基本概念

数据data:描述事物的符号,数据库中存储的基本对象。

  • 数据的含义称为数据的语义,数据与其语义是不可分的。

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

数据库管理系统DBMS:位于用户与操作系统之间的一层数据管理软件。是基础软件,是一个大型复杂的软件系统

  • **DBMS的主要功能:**数据定义功能;数据组织、存储和管理;数据操纵功能;数据库的事务管理和运行管理;数据库的建立和维护功能(实用程序);

数据库系统DBS:由BD、DBMS、应用程序和数据库管理员(DBA)组成。

2.数据库系统的特点

  • 数据结构化
  • 数据的共享性高,冗余度低,易扩充
  • 数据独立性高:物理独立性、逻辑独立性,DBS最基本的特征之一,指应用程序和数据结构之间相互独立,互不影响。
  • 数据由DBMS统一管理和控制:数据的一致性指的是数据的存取方式。

3.数据管理技术的发展过程

  • 人工管理阶段(20世纪40年代中--50年代中)
  • 文件系统阶段(20世纪50年代末--60年代中)
  • 数据库系统阶段(20世纪60年代末--现在)

4.两类数据模型

两大类:概念(又称信息)模型,逻辑模型和物理模型

概念模型:按用户观点建模,用于数据库设计、表示方法有E-R模型

逻辑模型:按计算机观点建模,用于DBMS实现,如:网状、层次、关系模型

物理模型:数据最底层的抽象

5.数据模型组成要素

数据模型数严格定义的一组概念的集合,需要精确描述系统的静态特性、动态特性和完整性约束条件。

  • 数据结构:描述系统的静态特性-->描述数据库的组成对象以及对象之间的联系
  • 数据操作:描述系统的动态特性-->是对数据库中各种对象的示例所允许的操作的集合,类型有增删改查
  • 数据的完整性约束条件:限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效与相容,完整性约束条件是一组完整性规则的集合

6.DBS的三级模式结构:

一个数据库只能有一个内模式和模式,可以有多个外模式,但一个应用程序只能使用一个外模式。

  • 外模式(子/用户模式):用户能看到和使用的局部数据的逻辑结构和特征的描述,数据库用户的数据视图,是与某应用有关的数据的逻辑表示。
  • 模式(逻辑模式):数据库中全体数据的逻辑结构和特征的描述,所有用户的公共数据视图。
  • 内模式 (存储模式):数据物理结构和存储方式的描述,数据在数据库内部的组织方式

7.DB的二级映像与数据独立性

DBMS为实现三个模式的联系转换,再其之间提供了两层映像:

  • 外模式/模式映像:保证了数据的逻辑独立性。模式改变,外/模式映像改变保证外模式不变,程序由外模式编写,从而应用程序不变
  • 模式/内模式映像:保证了物理独立性。DB存储结构改变时,模式/内映像改变保证模式不变,应用程序不变。

2.关系数据库

2.1关系数据结构及形式化定义

1.关系

关系模型的数据结构只包含单一的数据结构,建立在集合代数的基础上。逻辑结构为二维表。

1)域:一组具有相同数据类型的值的集合,如整数、实数

2)笛卡尔积:域上的一种集合运算

3)关系:

关系的表示:关系也是一个二维表,表的每行对应一个元组,表的每对应一个域。

属性:关系中不同列可以对应相同的域;为了加以区分,必须对每起一个名字,称为属性;

n目关系必有n个属性;关系中的任意属性值都不可再分

4)码:

候选码:若关系中某一属性组值能唯一标识一个元组,而其子集不能。即候选码是能够唯一标识每个实体元组的属性集合。

最简单情况:候选码只有一个属性。

全码:关系模式的所有属性都是这个关系模式的候选码,承为全码。

主码:一个关系有多个候选码,则选定其中一个为主码。又称主键

外码(外键)可以与主码(主键)异名。外键是一个表中的字段,其值必须是另一个表中的主键,用于建立表与表之间的关联关系。通常情况下,外键与其引用的主键具有相同的语义,但它们可以使用不同的名称。

主属性:候选码的诸属性为主属性。能够唯一标识实体的最小属性集合。不包含在任何候选码的属性称为非主属性或非码属性

5)关系可以有三种类型:

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

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

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

2.关系模式

关系的描述称为关系模式,形式化表示R(U,D,DOM,F)

  • R 关系名
  • U 组成该关系的属性名集合
  • D 属性组U中属性所来自的域
  • DOM 属性向域的映象集合
  • F 属性间的数据依赖关系集合

关系模式是静态的 、稳定的,而关系是动态的、随时间变化的。二者统称为关系。可以把关系模式理解为表的结构、属性之间的关系、约束条件,把关系理解为二维表

3.关系数据库

关系数据库中,关系模型是型,关系是值。在一个给定的应用领域中,所有关系的集合构成一个关系数据库。关系数据库也有型值之分:

  • : 关系数据库模式, 对关系数据库的描述。
  • : 关系模式在某一时刻对应的关系的集合,简称为关系数据库

2.2关系操作

  • 查询:选择SELECT,投影PROJECT,并union、差except、笛卡尔积、连接join
  • 插入
  • 删除
  • 修改

特点:集合操作方式,及操作对象和结果都是集合。

关系语言的分类:关系代数、关系演算(又分:元组关系演算和域关系演算)

2.3关系的完整性

关系模型的三类完整性约束:

实体完整性、参照完整性、用户定义的完备性

4.数据库安全性

1.不安全因素

  • 非授权用户对DB的恶意存取和破坏
  • DB中重要数据的泄露
  • 安全环境的脆弱性

2.数据库安全性控制

  • 用户身份鉴别:静态、动态口令鉴别,生物特征、智能卡鉴别
  • 存取控制:涉及对数据和数据库模式的控制。数据库模式包括表、视图、索引等数据库对象的结构定义
  • 自主存取控制方法

3.为什么授权

授权指授予GRANT和 收回REVOKE,是DB安全性控制中的自主存取控制方法,为了保护DB,防止不合法使用造成数据泄露、更改或破坏

4.授予GRANT

sql 复制代码
GRANT 权限 ON 对象类型 对象名 TO 用户名 [WITH GRANT OPTION]
如:
GRANT SELECT ON TABLE Student TO U1

把插入Student表和修改学生学号的权限授给用户U4

sql 复制代码
对属性列的授权时必须明确指出相应属性列名 
	  	GRANT UPDATE(Sno), INSERT 
		ON TABLE Student 
		TO U4;

权限:如查询权限SELECT ,全部权限 ALL PRIVILEGES

对象类型、对象名:TABLE或VIEW,表名、视图名

用户名:指定用户或全体用户PUBLIC

没有WITH GRANT OPTION代表获得某种权限的用户只能使用不能传播权限

sql 复制代码
GRANT INSERT ON TABLE SC TO U6
        WITH GRANT OPTION;

同样,U6还可以将此权限授予U7:
GRANT INSERT ON TABLE SC TO U7;
但U7不能再传播此权限,因为没有写这条语句

不允许循环授权:即被授权者不能把权限再授回授权者或其祖先

5.收回REVOKE

授予的权限可以由DBA或者其他授权者用REVOKE语句收回

sql 复制代码
REVOKE 权限 ON 对象类型 对象名 FROM 用户名[CASCADE|RESTRICT];

把用户U4修改学生学号的权限收回:

sql 复制代码
REVOKE UPDATE(Sno) ON TABLE Student FROM U4 CASCADE;
CSACADE:级联回收。将用户传播出去的权限一并收回
RESTRICT:受限回收。用户传播郭该权限,回收失败

收回所有用户对表SC的查询权限:

sql 复制代码
REVOKE SELECT ON TABLE SC FROM PUBLIC;

6.创建数据库模式的权限

只有超级用户才有权创建一个新数据库用户,有三种权限

如没有指定创建的新用户的权限,默认该用户拥有CONNECT权限。默认该用户拥有CONNECT权限。

sql 复制代码
CREATE USER username WITH DBA|RESOURCE|CONNECT

7.数据库角色

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

sql 复制代码
创建角色:
CREATE ROLE 角色名
在角色中添加用户或角色,使R2,R3具有R1的全部权限:
GRANT R1 TO R2,R3 WITH...
给角色授权:
GRANT SELECT,UPDATE,INSERT ON TABLE Student TO R1;
收回权限:
REVOKE SELECT ON TABLE Student FROM  R1;

8.视图机制

为不同用户定义不同视图,把不需要的数据隐藏,这样用户就不会误操作

9.审计

把对数据库的操作都记录到审计日志中,然后可通过日志审查是否有违法行为

10.数据加密

通过加密算法把明文变密文,这样别人就无法查看。

5.数据库完整性

1.数据库完整性指的是数据的正确性和相容性

  • 正确性:符合现实世界语义
  • 相容性:同一对象在不同表中的数据符合逻辑

2.维护完整性需实现的功能

  • 提供定义完整性约束条件的机制
  • 提供完整性检查的方法
  • 进行违约处理

3.三大完整性

实体完整性PRIMARY:主码唯一且非空

检查与违约处理:

  • 检查主码值是否唯一,如果不唯一则拒绝插入或修改
  • 检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改
sql 复制代码
在列级定义主码
CREATE TABLE Student
(Sno  CHAR(9)  PRIMARY KEY,
Sname  CHAR(20) NOT NULL);

在表级定义主码
CREATE TABLE Student
(Sno  CHAR(9),  
Sname  CHAR(20) NOT NULL,
PRIMARY KEY (Sno)); 

参照完整性REFERENCES:外码的约束

REFERENCES短语指明这些外码参照哪些表的主码

sql 复制代码
FOREIGN KEY (Sno) REFERENCES Student(Sno),  
/*在表级定义参照完整性*/
FOREIGN KEY (Cno) REFERENCES Course(Cno)    
/*在表级定义参照完整性*/

检查与违约:

sql 复制代码
CREATE TABLE SC
(Sno   CHAR(9)  NOT NULL,
Cno   CHAR(4)  NOT NULL,
Grade  SMALLINT,
PRIMARY KEY(Sno,Cno), 				
FOREIGN KEY (Sno) REFERENCES Student(Sno) 
ON DELETE CASCADE     /*级联删除SC表中相应的元组*/
ON UPDATE CASCADE, /*级联更新SC表中相应的元组*/
FOREIGN KEY (Cno) REFERENCES Course(Cno) 	                    
ON DELETE NO ACTION 	
/*当删除course 表中的元组造成了与SC表不一致时拒绝删除*/
ON UPDATE CASCADE   
/*当更新course表中的cno时,级联更新SC表中相应的元组*/
);

用户定义完整性CHECK:属性上约束条件的定义

属性上约束条件定义:

  • 非空NOT NULL
  • 列值唯一UNIQUE
  • 检查列值是否满足一个布尔表达式CHECK
sql 复制代码
 CREATE TABLE Stu
(name VARCHAR(30) NOT NULL,
  ID VARCHAR(30)  UNIQUE,/*要求Dname列值唯一*/
  gender CHAR(2) CHECK (gender IN ('男','女') ) /*属性gender只允许取'男'或'女' */

检查和违约:

属性上:

  • 插入元组或修改属性的值时,关系数据库管理系统RDBMS检查属性上的约束条件是否被满足
  • 如果不满足则操作被拒绝执行

元组上:

  • 在CREATE TABLE时可以用CHECK短语定义元组上的约束条件,即元组级的限制
  • 同属性值限制相比,元组级的限制可以设置不同属性之间的取值的相互约束条件
  • 约束条件不满足拒绝访问

7.数据库设计的步骤

1.DB设计过程:

  • 需求分析:了解与分析用户需求,生成数据字典
  • 概念结构设计:绘制E-R图
  • 逻辑结构设计:将E-R图转换为关系模型等DBMS的逻辑结构(网状、层次、关系)
  • 物理结构设计:关系模式选取存取方法
  • 数据库实施:建立实际数据库结构、试运行、装入数据
  • 数据库运行和维护

2.数据字典的内容和作用

  • 数据项、数据结构、数据流、数据存储、处理过程
  • 进行详细的数据收集和数据分析所获得的主要结果

3.概念设计

1)基本E-R模型:通过 E-R 图表示出来。将所有实体属性和实体之间的联系均描述出来就构成了一个 E-R 图

  • 实体型用矩形表示,框内写名字;属性用椭圆,无向边与实体型连接;联系(也可以有属性)用菱形表示,无向边与实体型相连,并标注联系类型(1:1,1:n,m:n)
相关推荐
Ai 编码助手5 小时前
MySQL中distinct与group by之间的性能进行比较
数据库·mysql
陈燚_重生之又为程序员5 小时前
基于梧桐数据库的实时数据分析解决方案
数据库·数据挖掘·数据分析
caridle5 小时前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
白云如幻5 小时前
MySQL排序查询
数据库·mysql
萧鼎6 小时前
Python并发编程库:Asyncio的异步编程实战
开发语言·数据库·python·异步
^velpro^6 小时前
数据库连接池的创建
java·开发语言·数据库
荒川之神6 小时前
ORACLE _11G_R2_ASM 常用命令
数据库·oracle
IT培训中心-竺老师6 小时前
Oracle 23AI创建示例库
数据库·oracle
小白学大数据6 小时前
JavaScript重定向对网络爬虫的影响及处理
开发语言·javascript·数据库·爬虫
time never ceases6 小时前
使用docker方式进行Oracle数据库的物理迁移(helowin/oracle_11g)
数据库·docker·oracle