数据库原理及应用相关整理
数据库(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中的CREATE
、DROP
等语句.
数据操控语言(DML; Data Manipulation Language)
数据操控语言用于操控记录,如SQL中的INSERT
、DELETE
等语句.
数据控制语言(DCL; Data Control Language)
数据控制语言用于权限控制,如SQL中的GRANT
、REVOKE
等语句.
数据库系统(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)
关系代数的特点为基于集合操作.
令
关系代数的完备操作集即
假定
表格规范化(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 | CREATE TABLE Tbl( |
可以通过下例删除表.
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 | ALTER TABLE Tbl ADD [CONSTRAINT name] FOREIGN KEY(Attr1, ...) |
可以通过下例撤销外键定义.
1 | ALTER TABLE Tbl DROP CONSTRAINT name; |
1 | ALTER TABLE Tbl DROP FOREIGN KEY name; |
子查询(Subquery)又称嵌套查询(Nested Query),返回的记录有且仅有一条时,可使用=
进行筛选;返回记录不只有一条时,必须用IN
操作符进行筛选.