数据库系统基础教程复习

第1章 数据库系统世界

数据库(DB)

  • 从本质上讲数据库就是信息的集合。
  • 一般来说,数据库是指数据库管理系统(DBMS)管理的数据集合。

数据库管理系统(DBMS)

  • 数据定义语言(DDL)
  • 数据查询和操纵语言(DML)
  • 支持大容量数据的长期存储
  • 具有持久性
  • 支持数据共享

数据库系统(DMS)

数据库系统通常由软件、数据库和数据管理员组成。

  • 数据库(DB)
  • 数据库管理系统(DBMS)
  • 数据库管理员(DBA)
  • 数据库应用程序(APP)

数据库设计步骤

  • 需求收集和分析
  • 概念结构设计
  • 逻辑结构设计
  • 物理结构设计
  • 物理实现
  • 数据库运行和维护

第2章 关系数据模型

关系模型基础

数据模型

  • 数据结构
  • 数据操作
  • 数据上的约束

常用的数据模型:层次模型、网状模型、关系模型。

关系:数据以一张二维表格描述。

属性:关系的列,是关系特征的描述。

模式:关系名和其属性的集合。例如movies(title, year, length, genre)。

元组:除属性行外,关系的每一行对应一个元组。例如(红海行动, 2018, 138, 动作)。

:属性的数据类型即取值范围。

关系的性质

  • 不能出现相同的行
  • 不能出现相同的列名
  • 列是不可分割的最小数据项
  • 可以交换任意两行的顺序
  • 可以交换任意两列的顺序
  • 每一列的数据类型、取值范围必须一致

关系的操作

  • 关系代数的操作对象是关系
  • 关系代数的操作
    • 并、交、差
    • 选择、投影
    • 重命名

R ∪ S : 属 于 R 或 属 于 S 的 所 有 元 组 构 成 的 新 关 系 。 R ∩ S : 属 于 R 也 属 于 S 的 所 有 元 组 构 成 的 新 关 系 。 R − S : 属 于 R 且 不 属 于 S 的 所 有 元 组 构 成 的 新 关 系 。 R \cup S:属于R或属于S的所有元组构成的新关系。\\ R \cap S:属于R也属于S的所有元组构成的新关系。\\ R-S:属于R且不属于S的所有元组构成的新关系。 RS:RSRS:RSRS:RS

投影运算
π A 1 A 2 . . . A n ( R ) : 从 关 系 R 中 取 出 A 1 A 2 . . . A n 列 生 成 一 个 新 的 关 系 。 例 : π t i t l e , y e a r , s t u d i o N a m e ( M o v i e s 1 ) \pi_{A_1A_2...A_n}(R):从关系R中取出A_1A_2...A_n列生成一个新的关系。\\ 例:\pi_{title, year, studioName}(Movies1) πA1A2...An(R)RA1A2...Anπtitle,year,studioName(Movies1)
选择运算
σ c ( R ) : 从 关 系 R 中 取 出 满 足 条 件 c 的 元 组 生 成 一 个 新 的 关 系 。 例 : σ l e n g t h > 100 ( M o v i e s 1 ) σ c ( R ) 中 表 达 式 c 可 以 使 用 的 运 算 符 : 比 较 运 算 符 : < , ≤ , > , ≥ , = , ≠ 逻 辑 运 算 符 : ! , o r , a n d ( 非 、 或 、 与 ) \sigma_c(R):从关系R中取出满足条件c的元组生成一个新的关系。\\ 例:\sigma_{length>100}(Movies1)\\ \sigma_c(R)中表达式c可以使用的运算符:\\ 比较运算符:\lt, \le, \gt, \ge, =, \ne 逻辑运算符:!, or, and(非、或、与) σc(R)Rcσlength>100(Movies1)σc(R)c使<,,>,,=,=!,or,and()
选择和投影的组合运算

例:查询2019年以前拍的动作片的片名和年份。
π t i t l e , y e a r ( σ y e a r < 2019   a n d   g e n r e = ′ 动 作 ′ ( M o v i e s 1 ) ) \pi_{title, year}(\sigma_{year\lt2019 \, and \, genre='动作'}(Movies1)) πtitle,year(σyear<2019andgenre=(Movies1))

关系的重命名
ρ s ( R ) : 命 名 后 的 关 系 S 与 R 有 完 全 相 同 的 元 组 , 属 性 名 也 相 同 , 只 是 关 系 的 名 称 变 为 S 。 ρ s ( A 1 , A 2 , . . . A n ) ( R ) : 命 名 后 的 关 系 S 与 R 有 完 全 相 同 的 元 组 , 不 仅 关 系 的 名 称 变 为 S , 关 系 R 中 的 属 性 在 S 中 也 依 次 改 名 为 A 1 , A 2 , . . . , A n 。 \rho_s(R):命名后的关系S与R有完全相同的元组,属性名也相同,只是关系的名称变为S。\\ \rho_s(A1,A2,...An)(R):命名后的关系S与R有完全相同的元组,不仅关系的名称变为S,关系R中的属性在S中也依次改名为A_1,A_2,...,A_n。 ρs(R)SRSρs(A1,A2,...An)(R):SRSRSA1,A2,...,An

第3章 关系数据库设计理论

BC范式

关系R是BCNF的充要条件:每个非平凡FD的左边必定是超键。

任意一个二元关系是BCNF。

分解BCNF的方法:

  1. 找到R中任意一个BCNF违例FD

    A -> B

    设A = {A1A2…An}

    B = {B1B2…Bn}

    C = {C1C2…Cn}

    计算违例左边属性集的闭包:{A}+ = {A, B, C},其中C是推导出的属性集。

  2. 将关系R分解成两个关系:

    R1(A, B, C),即A闭包中的所有属性

    R2(A, R中除A, B, C之外的所有属性)

  3. 对R1和R2重复(1)、(2)的步骤,直到分解出来的所有关系均没有违例

例:关系R(A, B, C, D, E),含有FD:AB -> C,DE -> C 和 B->D。

判断关系R是否BCNF,如果不是,请分解成一系列BCNF关系集合。

从违例AB -> C开始分析:

  1. 确定键,通过求元素的闭包,得到键{ABE}

  2. 找出一个违例 AB -> C,计算{AB}+ = {ABCD}

  3. 将关系R分解为R1 (A,B,C,D) 和 R2 (A,B,E)

  4. 对R1和R2重复上述步骤

    R1的键是{AB},存在违例B -> D,将关系R1分解成R11(B, D),R12(B,A,C),R11和R12都是BCNF。

    R2的键是{ABE},R2是BCNF。

    所以,可以将关系R分解为R11(B,D),R12(B,A,C)和R2(A,B,E)三个关系。

从违例DE->C开始分析:

  1. 确定键,通过求元素的闭包,得到键{ABE}

  2. 分析违例DE -> C,计算{DE}+ = {DEC}

  3. 将关系R分解为R1(D,E,C)和R2(D,E,A,B)

  4. 对R1和R2重复上述步骤

    R1(D,E,C)的键是{DE},不存在违例,R1是BCNF。

    R2(D,E,A,B),{ABE}是键,B->D是违例,将R2分解为R21(B,D)、R22(B,A,E),{BAE}是键,R22是BCNF。

    所以,可以将关系R分解为R21(B,D),R22(B,A,E)和R1(D,E,C)三个关系。

3NF

条件:对于关系R上的任一非平凡FD:A -> B。满足A是超键或B由主属性组成(候选键中的属性统称为主属性),称关系R满足第三范式。

3NF与BCNF

  • 关系R若满足BCNF也一定满足3NF
  • 关系R若满足3NF不一定满足BCNF
  • BCNF是基于函数依赖的最高范式,但不是数据库模式设计的最高范式

第4章 高级数据库模型

E/R模型

三要素

  • 实体集
  • 属性
  • 联系

第5章 代数和逻辑查询语言

第6章 数据库语言SQL

在SQL中定义关系模式

使用CREATE TABLE定义关系模式

数据类型 长度 取值范围
NCHAR(n) 定长字符串,字符串长度规定为n 最多4000字符,个数由n决定
NVARCHAR(n) 由字符串实际长度决定最多不超过n个字符 最多4000字符,个数由n决定
NTEXT 存放文本,长度由字符实际个数决定 最多230-1个字符
INT 4字节 -230~231-1
SMALLINT 2字节 -215~215-1
BIT 1字节 1或0
DATETIME 8字节 1753-01-01~9999-12-31
SMALLDATETIME 4字节 1900-01-01~2079-06-06
FLOAT 8字节 表示近似的浮点数值
DECIMAL(n,m) 允许n位十进制数,小数部分占m位 表示精确的浮点数值
NUMERIC(n,m) 同上 同上
CREATE TABLE Movies (
    id INT IDENTITY(1,1)
	title NCHAR(50),
    year INT,
    length INT,
    genre NCHAR(10),
    studioName NVARCHAR(30),
    producerC# INT
);
CREATE TABLE Movies_1 (
	title NCHAR(50),
    date DATETIME,
    bookOffice DECIMAL(6,2),
    length INT,
    genre NCHAR(10),
    studioName NVARCHAR(30),
    producerC# INT
);

定义主键约束

  • 有多个主键时
CREATE TABLE Movies (
    title NCHAR(50),
    year INT,
    length INT,
    genre NCHAR(10),
    studioName NVARCHAR(30),
    producerC# INT,
    PRIMARY KEY(title, year)
);
  • 只有一个主键时
CREATE TABLE MovieStars (
	name NCHAR(30) PRIMARY KEY,
    address NVARCHAR(255),
    gender CHAR(1),
    birthdate DATETIME
);

定义唯一值约束

CREATE TABLE MovieStars(
	name NCHAR(30) PRIMARY KEY,
    address NVARCHAR(255) UNIQUE,
    gender CHAR(1),
    birthdate DATETIME
);

UNIQUE约束:在该列的取值必须唯一,但可以取空值。

PRIMARY KEY约束:在该列的取值必须唯一,不能取空值。

定义空值约束NULL

CREATE TABLE MovieStars(
	name NCHAR(30) PRIMARY KEY,
    address NVARCHAR(255) UNIQUE NOT NULL,
    gender CHAR(1),
    birthdate DATETIME
);

NULL约束:除了主键外,默认都是可以取空值的。

NOT NULL约束:表示该列不能取空值。

基于属性的CHECK约束

CREATE TABLE MovieStar(
	name NCHAR(30) PRIMARY KEY,
    address NVARCHAR(255) UNIQUE NOT NULL,
    gender CHAR(1) CHECK(gender in ('F', 'M')),
    birthdate DATETIME
);
CREATE TABLE MovieStars(
	name NCHAR(30) PRIMARY KEY,
	address NVARCHAR(255) UNIQUE NOT NULL,
	gender CHAR(1),
	birthdate DATETIME,
	CONSTRAINT gender_ck CHACK(gender in ('F', 'M'))
);

基于元组的CHECK约束

CREATE TABLE MovieStars(
	name NCHAR(30) PRIMARY KEY,
    address NVARCHAR(255),
    gender CHAR(1),
    birthdate DATETIME,
    CONSTRAINT gender_ck CHECK(gender='F' OR address IS NOT NULL)
);

设置默认值

CREATE TABLE MovieStars(
	name NCHAR(30) PRIMARY KEY,
    address NVARCHAR(255),
    gender CHAR(1) DEFAULT 'M',
    birthdate DATETIME DEFAULT '0000-00-00'
);

修改关系模式

DROP TABLE MovieStars
ALTER TABLE MovieStars ADD mobile NCHAR(11) DEFAULT 'unlisted';
ALTER TABLE MovieStars DROP mobile;

SQL中的简单查询

SELECT…FROM…WHERE

SELECT *
FROM Movies
WHERE studioName='Disney' AND year=2019

SQL中的投影

SELECT title, length
FROM Movies
WHERE studioName='Disney' AND year=2019

投影同时更改属性名

SELECT title AS name, length duration
FROM Movies
WHERE studioName='Disney' AND year=2019

用表达式取代属性

SELECT title name, length/60 lengthInHoues
FROM Movies
WHERE studioName='Disney' AND year=2019

用常量表达式取代属性

SELECT title name, length/60.0 lengthInHoues, 'hrs' inHours
FROM Movies
WHERE studioName='Disney' AND year=2019

查询1980年到1990年间出生的男演员。

SELECT name
FROM MovieStars
WHERE gender = 'M' AND birthdate BETWEEN '1980-01-01' AND '1990-12-31'

拷贝表 SELECT INTO 和 INSERT INTO SELECT的区别

第7章 约束与触发器

第8章 视图与索引

第9章 服务器环境下的SQL

附录 中英文词汇对照

中文 英文
key
超键 candidate key
主键 primary key
超键 superkeys
外键 foreign key
违例 violation
约束 constraint

第10章 关系数据库的新课题

第11章 半结构化数据模型

第12章 XML程序设计语言

猜你喜欢

转载自blog.csdn.net/Eimhin_Tang/article/details/103903672