数据库系统复习笔记
简单地复习一下数据库系统。重在思想,基本不会涉及到 SQL 语句,有需要可以在文末的参考资料中找到相应资料。
数据库简介
基于文件系统的局限根源
基于文件的系统存在的局限性(分离孤立、冗余、依赖性、文件格式不相容)可以归结为两个原因:
- 数据的定义被嵌入到应用程序中,而不是分开和独立地存储;
- 除了应用程序规定之外的那些数据访问和操作无法得到控制。
因此,引入数据库和数据库管理系统。
数据库与数据库管理系统
- 数据库:为满足某个组织机构的信息要求而设计的一个逻辑相关数据及其描述的共享集。
- 数据库是“逻辑相关的”,当分析一个组织需要的信息时,总是试图找出实体、属性和联系;
- 实体是组织中一个独立的、将要在数据库中体现出来的对象(人、地点、东西、概念、事件);
- 属性描述我们想要记录的对象的某一方面的特性;
- 联系描述实体之间的关联。
- 数据库管理系统(DBMS):一个支持用户对数据库进行定义、创建、维护及控制访问的软件系统。
- 允许用户定义数据库,通常是通过数据定义语言(DDL);
- 允许用户在数据库中对数据进行增删改查,通常通过数据操作语言(DML),最常见的查询语言是结构化查询语言(SQL)。
- 提供数据库的受控访问。
DBMS 的功能:
- 数据存储、检索和更新;
- 提供用户可访问的目录;
- 提供事务支持;
- 并发控制的服务;
- 恢复服务、授权服务、完整性服务;
- 提高数据独立性的服务;
- 支持数据通信。
DBMS 的优点:
- 受控的数据冗余;
- 数据一致性;
- 相同数据量表示更多信息;
- 数据共享;
- 增强的数据完整性;
- 增强的安全性;
- 强制执行标准;
- 经济合算的规模;
- 平衡各种需求冲突;
- 增强的数据可访问性和响应性;
- 提高的生产率;
- 通过数据的独立性增强可维护性;
- 提高的并发性;
- 增强的备份和恢复服务。
DBMS 的缺点:
- 复杂性高;
- 规模大;
- DBMS 的费用高;
- 需要附加的硬件费用;
- 转化费用大;
- 性能相对较低;
- 故障带来的影响较大。
数据库环境
ANSI-SPARC 三层体系结构
三层体系结构包括外部层、概念层和内部层:
- 外部层:数据库的用户视图。这一层描述与每一个用户相关的数据库部分。
- 概念层:数据库的整体视图。这一层描述了哪些数据被存储在数据库中,以及这些数据库之间的联系。
- 内部层:数据库在计算机上的物理表示。这一层描述数据是如何存储在数据库中的。
内部层之下的是物理层,物理层可能在 DBMS 的指导下受操作系统的控制。
三层体系结构的目的是将用户的数据库视图与数据库的物理描述分离开,以保证数据独立性。这意味着对较低层的修改不会对较高层造成影响。有两种类型的数据独立性:逻辑数据独立性和物理数据独立性:
- 逻辑数据独立性:指外部模式不受概念模式变化(例如添加或删除实体、属性或者联系)的影响;
- 物理数据独立性:指概念模式不受内部模式变化(例如使用不同的文件组织方式或者存储结构、使用不同的存储设备、修改索引或散列算法)的影响。
数据模型
数据模型是一组集成的概念,用于描述和操纵组织机构内的数据、数据间联系以及对数据的约束。其包含下列三个组件:
- 结构部分,由一组创建数据库的规则组成。
- 操纵部分,定义允许对数据进行的操作的种类;
- 一组完整性约束,确保数据的准确性。
数据模型的分类:
- 基于对象的数据模型:用到实体、属性和联系等概念
- 实体-联系(ER)模型
- 语义模型
- 函数模型
- 面向对象模型
- 基于记录的数据模型:数据库由不同类型的固定格式记录组成
- 关系数据模型
- 网状数据模型
- 层次数据模型
- 物理数据模型:描述数据如何存储在计算机中
关系模型
基本术语
关系数据结构
- 关系:由行和列组成的表;
- 属性:关系中命名的列;
- 域:一个或多个属性的取值集合;
- 元组:关系中的每一行;
- 维数:关系所包含的属性的个数;
- 基数:关系所包含的元组的个数;
- 关系模式:用一组属性和域名对定义的具名的关系。
关系关键字
- 超关键字(superkey):一个属性或属性集合,它能唯一地标识出关系中的每个元组;
- 候选关键字(candidate key):最小的超关键字;
- 主关键字(primary key):被选用于唯一标识关系中各元组的候选关键字。没有被选为主关键字的候选关键字称为可替换关键字(alternate key);
- 外部关键字(foreign key):当一个关系中的某个属性或属性集合与另一个关系(也可能就是自己)的候选关键字匹配时,就称这个属性或属性集合为外部关键字。
完整性约束
域约束:限定关系中各个属性的取值集合。
实体完整性:在基本关系中,主关键字的属性不能为空;
引用完整性:如果在关系中存在某个外部关键字,则它的值与主关系中某个元组的候选关键字取值相等(或者全为空)。
视图
在关系模型中,“视图”指虚关系或称导出关系,即无需单独存在,必要时可从一或多个基本关系中动态地将其导出。
需要视图机制的原因有:
- 通过对特定用户隐藏部分数据库信息,提供了一个强大而灵活的安全机制;
- 允许用户根据自己的需求自定义访问数据的方法;
- 可以简化对基本关系的复杂操作。
不是所有的视图都可更新。
事务管理
事务指由一个或多个 SQL 语句组成的逻辑操作单位,可视为一组操作,通过COMMIT
语句提交,通过ROLLBACK
语句回退。其满足 ACID 特性:
- 原子性(Atomicity):事务被视为不可分割的最小单元,要么全部执行,要么都不执行。
- 一致性(Consistency):数据库在事务执行前后都保持一致性状态。在一致性状态下,所有事务对一个数据的读取结果都是相同的。
- 隔离性(Isolation):事务的执行相互独立。未完成事务的中间结果对其它事务是不可见的。由并发控制子系统负责保证事务的隔离性。
- 持久性(Durability):成功完成(提交)的事务的结果要永久地记录在数据库中,不能因以后的故障而丢失。可以通过数据库备份和数据恢复来保证事务的持久性。
规范化
规范化的目的
规范化是一种能够生成一组既具有所期望的特性又能满足企业数据需求的关系的技术,也是一种依靠关键字和属性之间的函数依赖对关系进行验证的形式化技术。
数据冗余与更新异常
存在数据冗余的关系可能产生更新异常问题,更新异常可分为插入异常、删除异常和修改异常。
函数依赖
规范化的一个重要的概念是函数依赖,函数依赖描述了属性之间的联系。例如,加入 A 和 B 是关系 R 的属性(或属性组),如果 A 的每个值都仅与 B 中的一个值对应,那么 B 就函数依赖于 A(记为 A -> B)。函数依赖的决定方是位于箭头左端的属性或属性组。
完全函数依赖:假设 A 和 B 是某一关系的属性(组),若 B 函数依赖于 A,但不函数依赖于 A 的任一真子集,则称 B 完全函数依赖于 A。
传递依赖:假设 A、B、C 是某一关系的属性,若 A -> B,B -> C,则称 C 通过 B 传递依赖于 A(假设 A 并不函数依赖于 B 或 C)。
在规范化时使用的函数依赖具有以下特性:依赖左右两边的属性(组)之间具有一对一的联系,且恒成立,并且右边完全函数依赖于左边。
确定关系函数依赖集的主要目的是确定该关系必须满足的完整性约束集,从而确定候选关键字和主关键字。
规范化过程
非范式(UNF)是一个包含了一个或多个重复组的表
第一范式(1NF)是指每一行和每一列相交的位置有且仅有一个值的关系。
第二范式(2NF)是指已经是第一范式且每个非关键字属性都完全函数依赖于主关键字的关系。
第三范式(3NF)是满足第一范式和第二范式的要求且所有非关键字属性都不传递依赖于主关键字的关系。
参考资料
主要参考机械工业出版社《数据库系统–设计、实现与管理(基础篇)》。
其他参考资料: