目录
一、组成数据库的三要素
二、关系数据库特点
三、三级模式、二级映像
四、视图和审计提供的安全性
审计(Auditing)
视图(Views)
五、grant、revoke
GRANT
REVOKE
六、三种完整性
实体完整性
参照完整性
自定义完整性
七、事务的特性ACDI
原子性(Atomicity)
一致性(Consistency)
持续性(Durability)
隔离性(Isolation)
八、故障的种类
事务内部的故障(Transaction Failures)
系统故障(System Failures)
介质故障(Media Failures)
计算机病毒(Computer Viruses)
九、恢复技术
1. 日志记录(Logging)
2. 检查点(Checkpoint)
3. 备份与还原
4.海量存储
5.增量存储
十、活锁与死锁
死锁(Deadlock)
活锁(Livelock)
十一、封锁(Locking)
十二、共享锁、排他锁
排他锁(X锁,Exclusive Lock)
十三、并发操作带来的数据不一致性体现
丢失修改(Lost Update)
不可重复读(Non-repeatable Read)
读“脏”数据(Dirty Read)
一、组成数据库的三要素
1. 数据结构,数据结构描述数据库的组成对象以及对象之间的联系。
2. 数据操纵,数据操纵是指对数据库中的各种对象(型)的实例(值)允许执行的操作的集合,包括操作及有关的操作规则。数据库主要有查询和更新(包括插入、删除、修改)两大类操作。
3. 完整性约束,完整性约束是一组完整性的规则。完整性规则是给定数据模型中的数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效和相容。
二、关系数据库特点
数据以二维表形式存储,关系数据库中的数据以表格形式存储,每个表格被称为一个“关系”。
列和行:行列可交换,表格由列(属性或字段)和行(记录或元组)组成。每列包含了相同类型的数据,而每行则代表一个数据项。
三、三级模式、二级映像
(1)外模式:外模式描述的是数据的局部逻辑结构,对于同一个模式,可以有任意多个外模式。对于每一个外模式,数据库系统都有一个 外模式/模式映像 来定义该外模式与模式之间的对应关系
(2)模式映像:当模式改变时(如增加新的关系、新的属性,改变属性的数据类型等),由数据库管理员对各个 外模式/模式 的映像做相应改变,可以使外模式保持不变。应用程序是依据数据的外模式编写的,因而应用程序不必修改,一个数据库中只有一个模式映像,保证了数据与程序之间的逻辑独立性,简称数据的逻辑独立。
(3)模式:模式定义了数据库全局逻辑结构与存储结构之间的对应关系,数据库只有一个模式,也只有一个内模式,所以 模式/内模式映像 是唯一的。
(4)内模式映像:当数据库的存储结构改变时,由数据库管理员对 模式/内模式映像 做相应改变,可以使模式保持不变,因而应用程序也不必改变,保证了数据与程序的物理独立性。
四、视图和审计提供的安全性
审计(Auditing)
审计是一个过程,用于记录和监控数据库中发生的所有操作,包括谁、何时、对哪些数据进行了何种操作。这不仅帮助确保数据的安全性和合规性,还能在发生安全事件时提供重要的信息,用于问题的调查和解决。
视图(Views)
视图是基于SQL查询的虚拟表。它们提供了一种机制,允许用户查询特定的数据集,而无需直接访问底层的物理表。视图可以用来简化复杂的查询,限制对敏感数据的访问,并提供定制的数据表示。
五、grant、revoke
GRANT
grant 命令用于向用户或角色授予数据库对象的访问权限。这些权限可以包括读取(SELECT)、修改(INSERT、UPDATE、DELETE)等操作权限。grant命令还可以用来授予用户执行存储过程的权限,或者赋予用户管理其他用户权限的能力。
基本语法:
GRANT 权限列表 ON 对象 TO 用户或角色 [WITH GRANT OPTION];
权限列表:希望授予的权限,如SELECT、INSERT、UPDATE等。
对象:权限将应用于的数据库对象,如表或视图。
用户或角色:将获得权限的数据库用户或角色。
WITH GRANT OPTION:(可选)允许被授权者将其所获得的权限再授权给其他用户。
例如:
GRANT SELECT, INSERT ON Employees TO UserA WITH GRANT OPTION;
这个命令给UserA授予了对Employees表的SELECT和INSERT权限,并且UserA可以把自己获得的的权限授权给其他用户。
REVOKE
revoke 命令用于撤销之前通过GRANT命令授予的权限。如果用户或角色不再需要访问某个数据库对象,或者不应该有权限执行某些操作时,应使用REVOKE命令。
基本语法:
REVOKE 权限列表 ON 对象 FROM 用户或角色;
权限列表:希望撤销的权限。
对象:权限应用的数据库对象。
用户或角色:将失去权限的数据库用户或角色。
示例:
REVOKE INSERT ON Employees FROM UserA;
这个命令撤销了UserA对Employees表的INSTER权限。
六、三种完整性
实体完整性
实体完整性是关于数据库表主键的约束。它确保主键的每个值都是唯一的,且非空(即,不允许重复和空值)。这个约束保证了表中的每一行都可以被唯一地识别,从而防止了数据的不一致性。实体完整性是数据库中最基本的完整性约束之一,通常在创建表时通过定义主键来实现。
简单来说,实体完整性通过主码实现。
参照完整性
参照完整性,又称为外键完整性,确保了数据库中两个表之间的关系的逻辑一致性。当一个表的字段(称为外键)引用另一个表的主键时,参照完整性约束确保了外键的每个值都必须在被引用的表的主键中存在(或者是空值,如果允许的话)。这种约束防止了悬空引用和孤立记录的出现,确保了数据之间的关联性和准确性。
简单来说,参照完整性通过外码实现。
自定义完整性
自定义完整性,又称为域完整性或用户定义的完整性,是指根据业务规则对数据库表中的数据进行的额外限制。这些规则可以包括数据类型约束、值范围约束(例如,年龄字段必须在0到120之间)、唯一性约束(除了主键之外的其他字段的唯一性)、以及更复杂的业务逻辑约束(如复杂的校验规则)。自定义完整性约束确保了数据满足特定的业务需求和规则,从而提高了数据的质量和可用性。
简答来说,自定义完整性通过check实现。
CREATE TABLE Persons (ID int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Age int,CHECK (Age>=18 AND Age<=65)/*CHECK约束保证Persons表中的Age列的值必须在18到65之间。*/
);CREATE TABLE Employees (EmpID int NOT NULL,Name varchar(255) NOT NULL,Salary decimal NOT NULL,CHECK (Salary > 3000)/*CHECK约束确保Employees表中的Salary列的值必须大于3000。*/
);
七、事务的特性ACDI
原子性(Atomicity)
原子性意味着事务中的所有操作要么全部完成,要么全部不完成。如果事务中的某个操作失败,整个事务将被回滚(撤销),数据库状态回到事务开始之前的状态。这保证了事务是不可分割的单元。
一致性(Consistency)
一致性确保事务从一个一致的状态转移到另一个一致的状态。在事务开始和完成时,数据库的完整性约束不被破坏。
持续性(Durability)
持续性意味着一旦事务被提交,它对数据库的修改就是永久性的,即使发生系统故障也不会丢失。数据库系统通过将事务日志记录到非易失存储介质来保证事务的持续性。
隔离性(Isolation)
隔离性保证了并发执行的事务是彼此隔离的,事务的执行不会被其他事务的操作干扰。
八、故障的种类
事务内部的故障(Transaction Failures)
事务内部的故障指的是事务在执行过程中遇到的问题,导致事务不能继续进行。这类故障可能是由于逻辑错误、数据不一致、违反完整性约束或资源限制(如死锁)等原因造成的。数据库管理系统通常通过事务回滚机制来处理这种故障,以确保数据的一致性和系统的稳定性。
系统故障(System Failures)
系统故障通常指的是操作系统、硬件或软件组件的故障,这会导致正在运行的事务丢失或系统停止工作。例如,电源故障、系统崩溃或网络中断都属于系统故障。为了应对系统故障,数据库系统通常会使用日志文件和检查点(checkpoint)技术来恢复到最近一次一致的状态。
介质故障(Media Failures)
介质故障指的是存储介质(如硬盘驱动器)的物理损坏,这可能会导致存储在介质上的数据部分或全部丢失。对于介质故障,恢复数据通常需要使用备份文件和/或磁盘镜像技术,以复制丢失的数据。
计算机病毒(Computer Viruses)
计算机病毒是一种恶意软件,它可以复制自身并感染其他计算机文件,可能会损坏数据、窃取信息、破坏系统功能或者使系统资源消耗殆尽。
九、恢复技术
1. 日志记录(Logging)
这是最常用的恢复技术之一。通过在事务执行过程中记录所有更改的日志,如果系统崩溃,可以使用这些日志来重做(Redo)或撤销(Undo)事务,从而恢复数据库到一致状态。日志通常包括事务的开始、每个操作(如修改数据)、以及事务的结束(提交或回滚)。
2. 检查点(Checkpoint)
检查点是在数据库中定期设置的恢复点,用于减少恢复时间。当设置检查点时,系统会确保所有在该点之前提交的事务都已经将它们的改动写入到物理数据库中,而所有的缓存(未提交的事务)则被写入到日志。在发生故障时,系统只需要从最近的检查点开始恢复,而不是从头开始。
3. 备份与还原
定期备份数据库是防止数据丢失的重要策略。在发生灾难性故障时,如硬盘损坏或数据中心损毁,可以使用最近的备份来恢复数据库。备份可以是完全备份、增量备份或差异备份,根据备份的频率和范围有所不同。
(海量存储和增量存储本身不直接属于恢复技术,但它们与数据恢复和数据管理密切相关,各有其作用和应用场景。)
4.海量存储
海量存储是指能够存储和管理大规模数据集的系统或技术。随着数据量的快速增长,尤其是在大数据和云计算的背景下,对于能够有效存储、处理和检索海量数据的技术需求日益增加。海量存储系统通常需要有高效的数据组织和管理机制,包括数据压缩、分布式文件系统、数据库分片、数据索引和查询优化等技术,以支持快速的数据访问和处理。
5.增量存储
增量存储是一种数据备份策略,只备份自上一次备份之后发生变化(新增或修改)的数据。与全量备份相比,增量备份能够节省存储空间和缩短备份时间,因为它不需要重复备份未发生变化的数据。增量存储通常用于定期备份,以减少数据丢失的风险,并提高备份效率。
十、活锁与死锁
死锁(Deadlock)
死锁是指两个或多个进程在执行过程中,因争夺资源而造成的一种僵局。在这种情况下,每个进程都持有一些资源同时等待其他进程释放它们所需的资源。如果没有外部干预,这些进程将无法向前推进,因为它们互相等待对方释放资源,形成了一个闭环。
例如,进程A持有资源1并请求资源2,同时进程B持有资源2并请求资源1,这就形成了一个死锁。
活锁(Livelock)
活锁与死锁类似,但区别在于处于活锁状态的进程实际上是在不断地改变状态,尝试解决冲突,但这些尝试始终无法推进整个系统的状态。简而言之,尽管进程在运行,但是系统作为一个整体却没有任何进展。
一个典型的活锁例子是两个进程互相“礼让”,比如进程A在持有资源1的同时需要资源2,进程B持有资源2的同时需要资源1。当进程A意识到与进程B的冲突时,它释放资源1并稍后重新尝试,同时进程B也采取了相同的行为。结果是,两个进程都在不断尝试解决冲突,但都无法成功,因为它们的行为是对称的。
十一、封锁(Locking)
封锁就是事务T在对某个数据对象操作之前先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。
十二、共享锁、排他锁
共享锁(S锁,Shared Lock)
共享锁是指当一个事务想要读取数据库中的数据时,它会在这些数据上设置共享锁。共享锁允许多个读事务同时访问同一资源,因为读操作不会改变数据,所以多个事务可以安全地同时进行读取。然而,如果一个事务对数据加了共享锁,其他事务就不能对这些数据加排他锁(即不能写入),直到所有的共享锁都被释放。
也就是说,如果事务T对数据加了共享锁,那么所有事务(包括第一个对该数据加锁的事务)对于该数据可读不可写,而且所有事务不能对该数据加排它锁(因为加共享锁的作用就是让所有事务可读不可写,再加排他锁就破坏了共享锁的功能,无实际意义),但所有事务都可以对数据加共享锁。
排他锁(X锁,Exclusive Lock)
排他锁是指当一个事务想要更新或删除数据库中的数据时,它会在这些数据上设置排他锁。排他锁确保没有其他事务可以同时读取或写入被锁定的数据。如果一个数据项被加上排他锁,其他任何事务都不能对其加任何类型的锁。排他锁保证了事务可以安全地更改数据,不会产生丢失修改、不可重复读或脏读等问题。注意的是加排他锁的事务可以对数据进行读取和写入,但其他事务则不行,更不能加锁。
十三、并发操作带来的数据不一致性体现
丢失修改(Lost Update)
丢失修改发生在两个或更多的事务读取同一数据后,其中一个事务的写操作被另一个事务的写操作覆盖,导致第一个事务的更改丢失。这通常发生在没有适当锁机制或并发控制机制的情况下。
示例:假设两个事务T1和T2同时读取了一个账户余额为100。T1将余额更新为150,而T2将余额更新为200。如果T2的更新在T1之后发生,那么T1的修改就会丢失,结果只反映了T2的更新。
不可重复读(Non-repeatable Read)
不可重复读是指一个事务中的两次相同的查询返回了不同的结果集,这是因为另一个并发事务在两次查询间更新了数据。这种现象说明一个事务无法两次读取到同样的数据。
示例:事务T1读取了一个账户的余额为100。在T1没有完成之前,另一个事务T2将该账户的余额更新为200并提交了事务。如果T1再次读取该账户余额,它将会读到200,与它第一次读到的100不一致。
读“脏”数据(Dirty Read)
读“脏”数据是指一个事务读取了另一个事务未提交的数据。如果那个事务失败回滚,读到的数据将是无效的,这可能导致错误的决策和计算。
示例:事务T1修改了一个账户余额为200,但还没有提交事务。这时,事务T2读取了这个账户的余额,结果是200。如果T1因为某些原因回滚了修改,T2读到的200就是一个“脏”数据。
十四、数据字典、数据流图
数据字典(Data Dictionary, DD)
数据字典是关于数据库中数据的详细描述和信息的集合。它是数据库管理的一个重要组成部分,用于存储关于数据库结构的元数据,例如表格名称、列(字段)名称、数据类型、约束条件等。数据字典有助于标准化数据的定义和使用,确保数据的一致性和准确性。
主要内容包括:
数据元素的定义:如列(字段)名、数据类型、是否允许为空等。
数据结构的描述:如表格、视图的结构描述。
关系和约束:包括主键、外键、索引等信息。
使用信息:数据的使用说明和访问权限等。
数据字典通常由数据库管理系统(DBMS)自动维护,为数据库设计者、开发者和维护者提供重要的参考信息。
数据流图(Data Flow Diagram, DFD)
数据流图是一种图形化的工具,用于表示信息系统中数据的流动和处理过程。通过DFD,可以展示系统中各个组件之间的数据流向和数据处理的逻辑关系,帮助分析和设计系统的功能和数据处理过程。
DFD主要组成元素:
外部实体(External Entity):系统外部的数据源或目的地,例如用户或其他系统。
数据流(Data Flow):表示数据在系统中的移动方向。
处理过程(Process):数据处理的活动或功能模块。
数据存储(Data Store):系统中存储数据的地方,可以是数据库或文件。
DFD通过不同级别的分解,帮助开发者理解系统的整体结构和细节,是系统分析和设计的重要工具。