EagleBear2002 的博客

这里必须根绝一切犹豫,这里任何怯懦都无济于事

关系型数据库的价值

阻抗失谐

基于关系代数(relational algebra),关系模型把数据组织成关系(relation)和元组(tuple)。元组是由键值对(name-value pair)构成的集合,而关系则是元组的集合。

SQL 操作所使用及返回的数据都是关系元组不能包含嵌套记录(nested record)或列表(list)等任何结构。而内存中的数据结构则无此限制,它可以使用的数据组织形式比关系更丰富。

关系模型和内存中的数据结构之间存在差异。这种现象通常称为阻抗失谐

阅读全文 »

事务

事务(Transaction,缩写 txn)是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。

事务是恢复和并发控制的基本单位。

事务的 ACID 特性:

  • 原子性(Atomicity):事务是数据库的逻辑工作单位,事务中包括的诸操作要么都做,要么都不
  • 一致性(Consistency)
  • 隔离性(Isolation)
  • 持续性(Durability)
阅读全文 »

数据库设计概述

数据库设计六个阶段:

  1. 需求分析
  2. 概念结构设计
  3. 逻辑结构设计
  4. 物理结构设计
  5. 数据库实施
  6. 数据库运行和维护

需求分析和概念设计独立于 DBMS,逻辑设计和物理设计与 DBMS 密切相关。

阅读全文 »

关系模式及范式

关系模式由五部分组成,是一个五元组: \(R(U, D, \textup{DOM}, F)\)

  1. 关系名 \(R\) 是符号化的元组语义
  2. \(U\) 为一组属性
  3. \(D\) 为属性组 \(U\) 中的属性所来自的域
  4. \(\textup{DOM}\) 为属性到域的映射
  5. \(F\) 为属性组 \(U\) 上的一组数据依赖

由于 \(D\)\(\textup{DOM}\) 与模式设计关系不大,因此可以把关系模式看作一个三元组:$R U, F $

作为二维表,关系要符合一个最基本的条件:每个分量必须是不可分开的数据项。满足了这个条件的关系模式就属于第一范式(1NF)。

阅读全文 »

实体完整性

参照完整性

用户定义的完整性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# [例 5.7] Student 表的 Ssex 只允许取“男”或“女”。
CREATE TABLE Student
(
Sno CHAR(9) PRIMARY KEY,
Sname CHAR(8) NOT NULL,
Ssex CHAR(2) CHECK (Ssex IN ('男', '女')), /*性别属性 Ssex 只允许取'男'或'女' */
Sage SMALLINT,
Sdept CHAR(20)
);

# [例 5.8] SC 表的 Grade 的值应该在 0100 之间。
CREATE TABLE SC
(
Sno CHAR(9),
Cno CHAR(4),
Grade SMALLINT CHECK (Grade >= 0 AND Grade <= 100), /*Grade 取值范围是 0 到 100*/
PRIMARY KEY (Sno, Cno),
FOREIGN KEY (Sno) REFERENCES Student (Sno),
FOREIGN KEY (Cno) REFERENCES Course (Cno)
);

# [例 5.9]当学生的性别是男时,其名字不能以 Ms.打头。
CREATE TABLE Student
(
Sno CHAR(9),
Sname CHAR(8) NOT NULL,
Ssex CHAR(2) CHECK (Ssex IN ('男', '女')),
Sage SMALLINT,
Sdept CHAR(20),
PRIMARY KEY (Sno),
CHECK (Ssex = '女' OR Sname NOT LIKE 'Ms.%') /*定义了元组中 Sname 和 Ssex 两个属性值之间的约束条件*/
);

# [例 5.10]建立学生登记表 Student,要求学号在 90000~99999 之间,姓名不能取空值,年龄小于 30,性别只能是“男”或“女”。
CREATE TABLE Student
(
Sno NUMERIC(6) CONSTRAINT C1 CHECK (Sno BETWEEN 90000 AND 99999),
Sname CHAR(20) CONSTRAINT C2 NOT NULL,
Sage NUMERIC(3) CONSTRAINT C3 CHECK (Sage < 30),
Ssex CHAR(2) CONSTRAINT C4 CHECK (Ssex IN ( ‘男’,'女')),
CONSTRAINT StudentKey PRIMARY KEY (Sno)
);

# [例 5.11]建立教师表 TEACHER,要求每个教师的应发工资不低于 3000 元。应发工资是工资列 Sal 与扣除项 Deduct 之和。
CREATE TABLE TEACHER
(
Eno NUMERIC(4) PRIMARY KEY, /*在列级定义主码*/
Ename CHAR(10),
Job CHAR(8),
Sal NUMERIC(7, 2),
Deduct NUMERIC(7, 2),
Deptno NUMERIC(2),
CONSTRAINT TEACHERFKey FOREIGN KEY (Deptno)
REFERENCES DEPT (Deptno),
CONSTRAINT C1 CHECK (Sal + Deduct >= 3000)
);

# [例 5.12]去掉例 5.10 Student 表中对性别的限制。
ALTER TABLE Student
DROP CONSTRAINT C4;
# [例 5.13] 修改表 Student 中的约束条件,要求学号改为在 900000~999999 之间,年龄由小于 30 改为小于 40 可以先删除原来的约束条件,再增加新的约束条件
ALTER TABLE Student
DROP CONSTRAINT C1;
ALTER TABLE Student
ADD CONSTRAINT C1 CHECK (Sno BETWEEN 900000 AND 999999);
ALTER TABLE Student
DROP CONSTRAINT C3;
ALTER TABLE Student
ADD CONSTRAINT C3 CHECK (Sage < 40);

完整性约束命名子句

阅读全文 »

SQL 结构化查询语言,是关系数据库的标准语言。集数据定义语言(DDL),数据操纵语言(DML),数据控制语言(DCL)功能于一体。

仅有 9 个动词:CREATE, DROP, ALTER, SELECT, INSERT, UPDATE, DELETE, GRANT, REVOKE

SQL 与关系数据库

基本表是本身独立存在的表。一个关系对应一个基本表,一个或多个基本表对应一个存储文件,一个表可以带若干索引。

阅读全文 »

概念:域、笛卡尔积、关系、元组、属性、码。

候选码:若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码

主码:若一个关系有多个候选码,则选定其中一个为主码

主属性与非主属性候选码的诸属性称为主属性。不包含在任何侯选码中的属性称为非主属性或非码属性

数据库完整性

阅读全文 »

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

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

数据库是长期储存在计算机内、有组织的、可共享的大量数据的集合。

数据库系统的构成:数据库、数据库管理系统(DBMS,及其应用开发工具),应用程序,数据库管理员(DBA)。

数据管理方式

阅读全文 »