数据库原理及应用相关整理

数据库(DB; Database)

数据库是长期存储于计算机内,有组织且统一管理的相关数据的集合,在数据库中存储的是数据及数据间的联系.

数据模型(Data Model)可分为如下三类.

  • 概念模型(Conceptual Data Model):面向客观世界,独立于计算机系统;
  • 逻辑模型(Logical Data Model):面向数据库,主要用于数据库管理系统的实现;
  • 物理模型(Physical Data Model):描述数据存储的物理方式.

数据模型的基本组成如下.

  • 数据结构(Data Structure);
  • 操作(Manipulation);
  • 完整性(Integrity):一组规则,用于管理对数据结构的约束.

常见的数据模型如下.

  • 键-值存储(KVS; Key-Value Store):多见于缓存,具体实现有Redis和Memcached等;
  • MapReduce
  • 宽表存储(Wide Column Store):又称列式数据库(CDB; Column Database),具体实现有Apache Cassandra等;
  • 图数据库(GDB; Graph Database):具体实现有Neo4j等;
  • 关系数据库
  • 面向文档数据库(Document-Oriented Database):支持.xml.json等文件,具体实现有MongoDB等;
  • 向量数据库(VDB; Vector Database):用户可以使用查询向量以检索最匹配的数据库记录.

数据定义语言(DDL; Data Definition Language)

数据定义语言用于定义结构,如SQL中的CREATEDROP等语句.

数据操控语言(DML; Data Manipulation Language)

数据操控语言用于操控记录,如SQL中的INSERTDELETE等语句.

数据控制语言(DCL; Data Control Language)

数据控制语言用于权限控制,如SQL中的GRANTREVOKE等语句.

数据库系统(DBS; Database System)

数据库系统包括数据库管理系统数据库管理员、相关的硬件与应用程序和用户等.

数据库管理系统(DBMS; Database Management System)

数据库管理系统应用和操作系统间的一层管理软件,是应用与数据库的接口.

非关系数据库的数据库管理系统被称为NoSQL.

数据描述的形式称为模式(Schema),数据库管理系统的三级模式如下.

  • 外部模式(External Schema):又称用户模式(User Schema)或子模式(Subschema),是从用户和应用的角度来观察的数据库,其设计是通过设计应用程序所必要的数据来实现的;
  • 概念模式(Conceptual Schema):又称逻辑模式(Logical Schema),是确定数据库理论结构的阶段,一般情况下,模式指的就是概念模式,在关系模型中,其设计是通过E-R模型把握现实世界,进而规范化表格来实现的;
  • 内部模式(Internal Schema):又称存储模式(Storage Schema),是从计算机内部看到的数据库,是确定数据库物理构造的阶段,其设计通过设计数据库高速检索方法来实现.

映像(Mapping)指出模式的双方是如何进行转换的.

  • 外部/概念模式映像(External/Conceptual Schema Mapping):体现逻辑数据独立性;
  • 概念/内部模式映像(Conceptual/Internal Schema Mapping):体现物理数据独立性.

数据库管理员(DBA; Database Administrator)

数据库管理员负责控制数据整体结构.

关系数据库(RDB; Relational Database)

关系数据库建立在如实体-关系模型的关系模型上,借助关系代数对数据库进行操作.

关系数据库的键(Key)概念如下,键可以由多个属性复合而成,此时称为复合键(Composite Key).

  • 超键(Superkey):唯一标识元组的任何属性集;
  • 候选键(Candidate Key):唯一标识元组的最小属性集;
  • 主键(Primary Key):用户从候选键选定的属性;
  • 备用键(Alternate Key):候选键中未被选作主键的其他键;
  • 外键(Foreign Key):指向其他关系表主键或候选键的属性;
  • 代理键(Surrogate Key):当关系表的候选键都不适合作为主键时,使用无意义但唯一的字段代为主键,通常是自动递增的数字.

实体-关系模型(ERM; Entity-Relationship Model)

又称实体-关系图(Entity-Relationship Diagram),要素如下.

  • 实体(Entity):可被人们识别、客观存在且可用作区别的事物,用矩形表示;
  • 关系(Relationship):实体间的关系抽象,用菱形表示;
  • 属性(Attribute):实体或关系所具有的特征,用椭圆表示,属性的值称为分量(Component),其可取的范围称为域(Domain).

元数(Arity)即模型中属性的个数,元组(Tuple)即数据表的行.

实体-关系模型的完整性规则(Integrity Rule)如下,其中实体完整性和参照完整性是必须满足的..

  • 实体完整性(Entity Integrity):主键值唯一且不可空;
  • 参照完整性(Referential Integrity):不允许关系中有不存在的实体引用,即外键须有效或空;
  • 领完整性(Domain Integrity):属性值遵循的某种信息规范,通常由用户自定义.

关系代数(Relational Algebra)

关系代数的特点为基于集合操作.

表示某种关系,选择(Selection)记为,是调取表中某行的运算;投影(Projection)记为,是调取表中某列的运算,常用于去重.

关系代数的完备操作集即

假定有三个属性,下例检索至少含两个属性2的元组的属性1.

关系代数的组合操作

由基本操作衍生的组合操作如下表.

组合操作 语法 替换 说明
交运算
(Intersection)

-
条件连接
(-Join)

(其中,的元数)
中,
挑选第分量和第分量
满足运算的元组;
等值连接(Equi Join)即的连接.
自然连接
(Natural Join)
须有值域相同的公共属性
经由操作使得连接后
每个公共属性只保留一列.
半连接
(Semi Join)
-
除法
(Division)
- 由在中不出现于的属性
中所有元组在中对应相同的元组构成.

表格规范化(Normalization)

即对关系模式不断分解,直到达到如下的某一范式(Normal Form)的过程.其中,分解必须遵循规范化原则即保持原有依赖关系和无损连接.依赖关系有如下几种.

  • 完全函数依赖(Full Functional Dependency):通过某(些)列的值才能确定其他列的数值;
  • 部分函数依赖(Partial Functional Dependency):通过某(些)列的一部分就足以确定其他列的数值;
  • 传递依赖(Transitive Dependency):通过某(些)列的值能间接地确定其他列的数值.

常见的范式如下.

  • 非范式(0NF; Zero Normal Form):没有去除重复数据的表格,关系型数据库不能使用非范式;
  • 第一范式(1NF; First Normal Form):分割、去重使一栏只有一个项目;
  • 第二范式(2NF; Second Normal Form):满足第一范式,且通过主键而非其部分的值确定其他列的数值,即消除主键的部分函数依赖;
  • 第三范式(3NF; Third Normal Form):满足第二范式,且只能通过主键直接确定其他列的数值,即消除主键传递依赖;
  • BC范式(BCNF; Boyce-Codd Normal Form):消除候选键的部分和传递函数依赖.

结构化查询语言(SQL; Structured Query Language)

结构化查询语言用于在关系数据库中处理数据,其语句对大小写不敏感.

可以通过下例创建新表.

其中,表只能有一个自动列,且该列必须为主键或唯一索引.

1
2
3
4
5
CREATE TABLE Tbl(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
PRIMARY KEY(id)
);

可以通过下例删除表.

1
DROP TABLE Tbl;

可以通过下例补充定义主键.

其中,name为键的标识符

1
ALTER TABLE Tbl ADD [CONSTRAINT name] PRIMARY KEY(Attr1, ...);

在SQL Server中,主键默认标识符为PK__Tbl,外键默认标识符为FK__Tbl__Attr;通过右击菜单的索引/键查看主键,而关系可查看外键.

可以通过下例撤销主键定义.

1
ALTER TABLE Tbl DROP CONSTRAINT name;
1
ALTER TABLE Tbl DROP PRIMARY KEY;

可以通过下例补充定义外键.

1
2
3
ALTER TABLE Tbl ADD [CONSTRAINT name] FOREIGN KEY(Attr1, ...)
REFERENCES RefTbl(Attr1, ...)
[ON DELETE Rule] [ON UPDATE Rule];

更新/删除的规则

更新/删除的规则如下表.

更新/删除规则 说明
CASCADE 级联,即子表同步更新/删除.
SET NULL 置空,即设置为空值.
RESTRICT / NO ACTION 不操作,若子表有匹配记录,则不允许操作.
SET DEFAULT 设置为默认值.

可以通过下例撤销外键定义.

1
ALTER TABLE Tbl DROP CONSTRAINT name;
1
ALTER TABLE Tbl DROP FOREIGN KEY name;

子查询(Subquery)又称嵌套查询(Nested Query),返回的记录有且仅有一条时,可使用=进行筛选;返回记录不只有一条时,必须用IN操作符进行筛选.