数据库系统概论

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)
相关推荐
Karoku0668 分钟前
【企业级分布式系统】ELK优化
运维·服务器·数据库·elk·elasticsearch
小技与小术1 小时前
数据库表设计范式
数据库·mysql
安迁岚1 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验三 数据操作
运维·服务器·数据库·sql·mysql
安迁岚1 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验九 触发器
数据库·sql·mysql·oracle·实验报告
Loganer1 小时前
MongoDB分片集群搭建
数据库·mongodb
LKID体1 小时前
Python操作neo4j库py2neo使用之创建和查询(二)
数据库·python·neo4j
刘大浪2 小时前
后端数据增删改查基于Springboot+mybatis mysql 时间根据当时时间自动填充,数据库连接查询不一致,mysql数据库连接不好用
数据库·spring boot·mybatis
一只爱撸猫的程序猿2 小时前
简单实现一个系统升级过程中的数据平滑迁移的场景实例
数据库·spring boot·程序员
无敌岩雀2 小时前
MySQL中的索引
数据库·mysql
a_安徒生2 小时前
linux安装TDengine
linux·数据库·tdengine