一.数据管理技术的产生和发展
数据库是长期存储在计算机内有组织,大量,共享的数据集合。它可以供各种用户共享,具有最小冗余度和较高数据独立性。
数据库管理系统在数据库建立,运用和维护时对数据库进行统一控制,以保证数据的完整性和安全性,在多用户使用时对数据库进行并发控制,在发生故障后对数据库进行恢复。
1.人工管理阶段:
- 数据不保存
- 应用程序管理数据(数据需要由应用程序自己设计,定义和管理,没有相应的软件系统负责数据的管理工作
- 数据不共享
- 数据不具有独立性
2.文件系统阶段:
- 数据长期保存
- 文件系统管理数据
- 数据共享性差,冗余度大
- 数据独立性差
3.数据库系统阶段
- 数据结构化(与文件系统的本质区别)(面向整个组织企业,数据之间是有联系的)
- 数据共享性高,冗余度低且易扩充(减少1冗余,节约存储空间,数据共享能避免数据之间的不相容和不一致)
- 数据独立性高
物理独立性:应用程序与数据库中的数据的物理存储是相互独立的
逻辑独立:应用程序与数据库逻辑结构相互独立 - 数据由数据库管理系统统一管理和控制
数据安全性保护
数据完整性检查(完整性指数据正确性,有效性,相容性)
并发控制(多个用户并发进程同时存取,修改数据库,会发生相互干扰破坏数据库完整性)
数据库恢复(硬,软件故障,操作员失误)
二.数据模型
数据模型:对现实世界数据特征的抽象
1.概念模型/信息模型
- 含义:按照用户观点对数据和信息进行建模
- 信息世界中的基本观念:实体,属性,码,实体型,实体集,联系
- 概念模型一种表示方法:实体-联系方法:E-R模型
2.逻辑模型和物理模型:
- 逻辑模型:层次模型,网状模型,关系模型,面向对象数据模型。按照计算机系统的观点对数据建模
- 物理模型:对数据最底层的抽象,描述数据在系统内部的表示方式和存取方法,或是磁盘磁带上的存储方式和存取方法
3.层次模型
- 含义:满足仅有一个节点没有双亲结点(根节点)。根以外其他节点仅有一个双亲结点。
任何一个给定的记录值只能按层次路径查看,没有一个子女记录值能脱离双亲记录值独立存在
- 层次模型数据操纵与完整性约束:
数据操纵:查询,插入删除,更新
插入:如果没有相应双亲结点值就不能插入它的子女节点值
删除:如果删除双亲,相应节点子女也被同时删除 - 层次模型优缺点
优点:数据结构简单清晰,层次数据库查询效率高,良好的完整性支持
缺点:现实世界中很多联系是非层次的,不适合用层次模型。一个节点具有多个双亲结点,用该模型很笨拙。查询子女节点必须通过双亲节点。由于结构严密,层次命令趋于程序化。
4.网状模型
- 含义:多个节点无双亲。一个节点多个双亲。
- 网状模型数据操纵与完整性约束
支持记录码概念
保证一个联系中双亲记录和子女记录之间是一对多关系
支持双亲记录和子女记录之间的某些约束条件 - 网状模型优缺点
优点:
更为直接描述现实世界
更好性能,存取效率高
缺点:
结构复杂
DDL,DML复杂
应用程序访问数据必须选择适当存取路径,因此必须了解系统结构,加重了编写应用程序负担
5.关系模型
- 含义:二维表
- 术语:
关系:一个关系对应通常说的一张表
元组:一行是一个元组
属性:一列是一个属性
码:某个属性,可以唯一确定一个元组
域:相同数据类型的值集合
分量:元组中一个属性值
关系模式: 关系名(属性1,属性2,属性3......属性n) - 关系模型数据操纵与完整性约束
数据操纵:查询,插入,删除,更新数据
完整性约束:实体完整性,参照完整性,用户定义的完整性 - 优缺点
优点:
数学概念基础
概念单一
存取路径对用户透明,更高数据独立性,安全保密性
缺点:
查询效率不如格式化数据模型
三.数据库系统的结构
1.数据库系统的概念:“型” 和“值”
2.数据库的三级模式结构
- 模式:也叫逻辑模式,所有用户公共数据视图
- 外模式:子模式/用户模式,数据库用户能看见和使用局部数据的逻辑结构和特征的描述(模式的自己,一个数据库有多个外模式,一个应用程序只能使用一个外模式)
- 内模式:存储模式,数据物理结构和存储方式的描述(一个数据库只有一个内模式)
-
四.关系的完整性
1.实体完整性规则:若属性A是基本关系R的主属性,则A不能取空值。空值就是“不知道,不存在,无意义”的值。
eg1:学生(学号,姓名,性别,专业号,年龄)关系中学号为主码,则学号不能取空值
eg2:选修(学号,课程号,成绩)关系中学号和课程号为主码,则学号和课程号不能取空值
2.参照完整性规则:一个关系中的属性是另一个关系中的主码
eg1:学生(学号,姓名,性别,专业号,年龄)
专业(专业号,专业名)
学生关系中引用了专业关系的主码,也就是说学生关系中的专业号,必须是确实存在的专业的专业号
eg2:学生(学号,姓名,性别,专业号,年龄)
专业(专业号,专业名)
选修课程(学号,专业号,成绩)
3.用户定义的完整性:
针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据你须满足的语义要求
补:列级完整性约束和表级完整性约束
列级完整性约束(Column-Level Constraints)
列级完整性约束是针对单个列的约束条件,用于控制和验证该列中的数据。常见的列级约束包括:
- PRIMARY KEY:确保列的每个值都是唯一的,并且不为 NULL。通常一个表有一个主键。
- UNIQUE:确保列中的所有值都是唯一的,但允许 NULL 值(在某些数据库中 NULL 可以被认为是唯一的)。
- NOT NULL:确保列中的每个值都不能为 NULL。
- CHECK:对列中的数据施加条件限制。例如,
CHECK (Sage >= 0 AND Sage <= 120)
确保年龄在合理范围内。- DEFAULT:指定当插入数据时,如果该列没有提供值,则使用的默认值。
CREATE TABLE Student (
Sno CHAR(9) PRIMARY KEY, -- 列级主键约束
Sname CHAR(20) UNIQUE, -- 列级唯一约束
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20) );表级完整性约束(Table-Level Constraints)
表级完整性约束是针对整个表的约束条件,可以涉及一个或多个列。常见的表级约束包括:
- PRIMARY KEY:可以定义在一个或多个列上,确保这些列组合中的每个值都是唯一的,并且不为 NULL。通常用来唯一标识表中的每一行。
- FOREIGN KEY:定义表与其他表之间的关系,确保列的值必须在引用的表中的主键列中存在,以维持数据的参照完整性。
- UNIQUE:可以定义在一个或多个列的组合上,确保该列组合中的每个值都是唯一的。
- CHECK:可以定义在表级别,施加对表中多列的条件限制。例如,
CHECK (Sage >= 0 AND Sage <= 120)
可以确保表中的年龄值在合理范围内。
CREATE TABLE Enrollment (
Sno CHAR(9),
Cno CHAR(6),
Grade CHAR(2),
PRIMARY KEY (Sno, Cno), -- 表级主键约束
FOREIGN KEY (Sno) REFERENCES Student(Sno), -- 表级外键约束
CHECK (Grade IN ('A', 'B', 'C', 'D', 'F')) -- 表级检查约束
);
五.关系数据库标准语言SQL
SQL集数据查询,数据操纵,数据定义和数据控制功能为一体
1.SQL特点:综合统一,高度非过程化,面向集合的操作方式,以同一种语法结构提供多种使用方式,语言简洁,易学易用
2.SQL基本概念:一个关系对应一个基本表,一个或多个基本表对应一个存储文件,一个表可以带若干索引。
(外模式包括若干视图和部分基本表,模式包括若干基本表,内模式包括若干存储文件)
3.数据定义:关系数据库系统支持三级模式结构,其模式,外模式和内模式中的基本对象有模式,表,视图和索引。(SQL标准不提供修改模式定义和修改视图定义的操作)
操作对象 | 操作方式 | ||
---|---|---|---|
创建 | 删除 | 修改 | |
模式 | CREATE SCHEMA | DROP SCHEMA | |
表 | CREATE TABLE | DROP TABLE | ALTER TABLE |
视图 | CREATE VIEW | DROP VIEW | |
索引 | CREATE INDEX | DROP INDEX | ALTER INDEX |
一个关系数据库管理系统的实例中可以建立多个数据库,一个数据库中可以建立多个模式,一个模式下通常包括多个表,视图和索引等数据库对象。
4.模式的定义与删除
- 定义模式:CREATE SCHEMA <模式名> AUTHORIZATION <用户名>
eg:为用户WANG定义一个学生-课程模式S-T
CREATE SCHEMA "S-T" AUTHORIZATION WANG- 若是没有指定模式名,则模式名隐含为用户名
CREATE SCHEMA AUTHORIZATION WANG
定义模式实际上定义了一个命名空间,在该空间可进一步定义该模式包含的数据库对象,例如基本表,视图,索引
CREATE SCHEMA <模式名> AUTHORIZATION <用户名> [<表定义子句>|<视图定义子句>|<授权定义子句>]
删除模式:DROP SCHEMA <模式名> <CASCADE|RESTRICT>
选择CASCADE(级联),在删除模式的同时把该模式中所有的数据库对象全部删除
选择RESTRICT(限制),如果该模式中已经定义了下属的数据库对象(如表,视图等),拒绝该删除语句的执行,只有该模式下没有任何下属对象时才执行CREATE SCHEMA语句
DROP SCHEMA ZHANG CASCADE
该语句删除了模式ZHANG,同时模式中定义的表TAB1也被删除了
5.基本表的定义,删除与修改
定义基本表:创建了一个模式就建立了一个数据库的命名空间,一个框架。在该空间中首先要定义的就是该模式包含的数据库基本表
- CREATE TABLE<表名>(<列名><数据类型>[列级完整性约束条件]
[ ,<列名><数据类型>[列级完整性约束条件]]
......
[表级完整性约束条件])
eg1:建立一个“学生”表Student- CRESTE TABLE Student
(Sno CHAR(9) PRIMARY KEY, /*列级完整性约束条件,Sno是主码,9个字符的字符串*/
Sname CHAR (20) UNIQUE, /*Sname 取唯一值,20个字符的字符串*/
Ssex CHAR(2), /*存储性别*/
Sage SMALLINT, /*存储年龄,数据类型是SMALLINT
,适合存储小范围的整数*/
Sdept CHAR(20), /*列用于存储部门名称,最多 20 个字符*/
);
eg2:建立一个“课程”表Course
CREATE TABLE Course
(Cno CHAR(4) PRIMARY KEY, /*列级完整性约束条件 ,Cno是主码*/
Cname CHRA(40) NOT NULL,
Cpno CHAR(4), /*先修课*/
Ccredit SMALLINT,
FOREIGN KEY(Cpno) REFERENCES Course(Cno) /*表级完整性约束条件,Cpno是外码,被参照表是Course,被参照列是Cno*/
);
eg3:建立学生选课表SC
CREATE TABLE SC
(Sno CHAR(9),
Cno CHAR(4),
Grade SMALLINT,
PRIMARY KEY(Sno ,Cno),/*主码由两个属性构成,必须作为表级完整性条件进行定义*/
FOREIGN KEY(Sno) REFERENCES Student(Sno),
/*表级完整性约束条件,Sno是外码,被参照表是Student*/
FORENING KEY (Cno) REFERENCES Course(Cno)
/*表级完整性约束条件,Cno是外码,被参照表是Course*/