数据库系统概述选择简答概念复习

目录

一、组成数据库的三要素

二、关系数据库特点

三、三级模式、二级映像

四、视图和审计提供的安全性

审计(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)

十二、共享锁、排他锁 

共享锁(S锁,Shared Lock)

排他锁(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通过不同级别的分解,帮助开发者理解系统的整体结构和细节,是系统分析和设计的重要工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/855280.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型系列:提示词管理

既然大模型应用的编程范式是面向提示词的编程&#xff0c;需要建立一个全面且结构化的提示词库&#xff0c; 对提示词进行持续优化也是必不可少的&#xff0c;那么如何在大模型应用中更好的管理提示词呢&#xff1f; 1. 提示词回顾 提示词在本质上是向大型语言模型&#xff08;…

基于Spring Boot的工具迭代

1. 申请git权限 2. git项目中点击我的-Settings-SSH Keys添加公钥 3. 公钥生成步骤 ssh-keygen -o -t rsa -b 4096 -C "your email" cd ~/.ssh/ cat id_rsa.pub 把公钥内容粘贴到SSH Keys 4. 创建本地分支git checkout -b branchname git远程仓库创建远程分支 …

stm32f103 HAL库 HC-SR04测距

目录 一、实现测距二、添加TIM3控制LED根据距离以不同频率闪烁三、观察时序Modebus协议12路超声波雷达设计方案1. 系统架构设计2. 硬件设计3. 软件设计4. 通信协议设计5. 用户接口6. 安全和冗余7. 测试和验证8. 电源和物理封装9. 文档和支持 一、实现测距 配置时钟 配置定时器…

vue部署宝塔nginx配置(获取用户ip地址、反代理访问api接口、websocket转发)

以下配置为我自己的需求&#xff0c;因人而异&#xff0c;如果只是单纯的前端非交互页面&#xff0c;可以不用修改配置。 代码及注释&#xff0c;如下&#xff1a; #解决vue-router设置mode为history&#xff0c;去掉路由地址上的/#/后nginx显示404的问题location / {proxy_htt…

多模态大模型通用模式

MM-LLMs&#xff08;多模态大模型&#xff09;是目前比较新的和实用价值越发显著的方向。其指的是基于LLM的模型&#xff0c;具有接收、推理和输出多模态信息的能力。这里主要指图文的多模态。 代表模型&#xff1a;GPT-4o、Gemini-1.5-Pro、GPT-4v、Qwen-VL、CogVLM2、GLM4V、…

Ptrade和QMT的区别,怎么获取合适的量化交易软件?

​Ptrade和QMT的适用人群 交易活跃用户 量化爱好者已经专业量化投资者 高净值个人或机构 Ptrade和QMT的区别 回测和交易频率 Ptrade回测和交易只支持分钟级和日线级别的频率&#xff0c;而QMT支持tick级、分钟级、5分钟级、10分钟级、日线、周线、月线等。 使用QMT进行回…

Docker overlay磁盘使用100%处理方法overlay 100%

一、问题描述 服务器上运行了几个docker容器,运行个一周就会出现overlay 100%的情况&#xff0c;经查找&#xff0c;是容器里生成了很多core.xxx的文件导致的。 二、解决方法 首先通过以下命令查看&#xff1a; df -h 可以看的overlay已经100%了&#xff0c;进入到/var/lib/d…

计算机网络实验(9):路由器的基本配置和单臂路由配置

一、 实验名称 路由器的基本配置和单臂路由配置 二、实验目的&#xff1a; &#xff08;1&#xff09;路由器的基本配置&#xff1a; 掌握路由器几种常用配置方法&#xff1b; 掌握采用Console线缆配置路由器的方法&#xff1b; 掌握采用Telnet方式配置路由器的方法&#…

Java | Leetcode Java题解之第148题排序链表

题目&#xff1a; 题解&#xff1a; class Solution {public ListNode sortList(ListNode head) {if (head null) {return head;}int length 0;ListNode node head;while (node ! null) {length;node node.next;}ListNode dummyHead new ListNode(0, head);for (int subL…

26 种 prompt 套路,驯服大模型

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、算法项目落地经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 总结链接如…

封装音视频编解码和渲染的动态链接库编译和测试

1.动态链接库的编译 生成了以下几个文件 我们把生成的lib文件复制到lib文件夹中 其余三个文件不变动 2.进行测试看是否可以用生成的xcodec.lib库文件里的接口函数 以上是重新创建的新项目&#xff0c;导入了xcodec.lib&#xff0c;其他配置同以前项目 库测试结果 运行显示我们…

qt登录和闹钟实现

qt实现登录 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);// 去掉头部this->setWindowFlag(Qt::FramelessWindowHint);// 去掉空白部分this->s…

栈(Stack)

目录 一.栈&#xff08;Stack&#xff09; 1.概念 2.栈的使用 3.栈的模拟实现 二.栈相关习题 1.逆波兰表达式求值 &#xff08;1&#xff09;链接 &#xff08;2&#xff09;解析 &#xff08;3&#xff09;题解 2.括号匹配 &#xff08;1&#xff09;链接 &#xff…

计算机网络——传输层重要协议(TCP、UDP)

一、常见名词解释 IP地址&#xff1a;IP地址主要用于标识网络主机、其他网络设备&#xff08;如路由器&#xff09;的网络地址&#xff0c;即IP地址用于定位主机的网络地址&#xff1b; IP地址是一个32位的二进制数&#xff0c;通常被分割为4个 8位⼆进制数&#xff08;也就是…

构建基于 LlamaIndex 的RAG AI Agent

I built a custom AI agent that thinks and then acts. I didnt invent it though, these agents are known as ReAct Agents and Ill show you how to build one yourself using LlamaIndex in this tutorial. 我构建了一个自定义的AI智能体&#xff0c;它能够思考然后行动。…

京东618 :AI总裁数字人、京东Apple Vision Pro版亮相

2004年6月18日&#xff0c;刚刚转型电商才半年的京东&#xff0c;用最互联网的方式为忠实粉丝打造了一场价格降到“难以置信”的店庆促销活动&#xff0c;这场促销活动还有一个很具有当年网络小说特质的名字——“月黑风高”。 2024年京东618&#xff0c;早已成为一场亿万消费…

泛微开发修炼之旅--20关于Ecology中如何查询正文文件的物理文件,并修改正文中的内容的解决方案

文章链接地址&#xff1a;20关于Ecology中如何查询正文文件的物理文件&#xff0c;并修改正文中的内容的解决方案

Linux系统编程——网络编程

目录 一、对于Socket、TCP/UDP、端口号的认知&#xff1a; 1.1 什么是Socket&#xff1a; 1.2 TCP/UDP对比&#xff1a; 1.3 端口号的作用&#xff1a; 二、字节序 2.1 字节序相关概念&#xff1a; 2.2 为什么会有字节序&#xff1a; 2.3 主机字节序转换成网络字节序函数…

C语言程序设计-10 指针

指针是&#xff23;语言中广泛使用的一种数据类型。运用指针编程是&#xff23;语言最主要的风格之一。利用指针变量可以表示各种数据结构&#xff1b;能很方便地使用数组和字符串&#xff1b;并能象汇编语言一样 处理内存地址&#xff0c;从而编出精练而高效的程序。指针极大地…

C语言 指针——字符数组与字符指针:字符串的输入和输出

目录 逐个字符输入输出字符串 整体输入输出字符串 用scanf输入/输出字符串 用gets输入/输出字符串 用scanf输入/输出字符串 用gets输入/输出字符串 逐个字符输入输出字符串 #define STR_LEN 80 char str[STR_LEN 1 ]; 整体输入输出字符串 用scanf输入/输出字符串 用gets…