还剩48页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
设计和维护数据库欢迎来到《设计和维护数据库》课程!在这个数字化时代,数据已成为企业和组织最宝贵的资源之一本课程将带领大家深入理解数据库的设计原理、实现方法和维护技巧,帮助你掌握这一关键技能无论你是初学者还是希望提升技能的专业人士,本课程都将为你提供系统化的学习路径和实用的操作指南我们将从基础概念出发,逐步深入到高级应用,确保你能够全面掌握数据库设计和维护的核心知识让我们一起踏上这段学习旅程,探索数据的奥秘!数据库的基本概念数据库的定义核心术语解析数据库是一个按照数据结构来组织、存储和管理数据的仓库它数据客观事物的符号记录,是信息的载体,如学生的学号、姓不仅仅是数据的简单集合,更是一个能够高效检索和管理数据的名等系统数据库设计良好的特点包括数据独立性高、冗余度低、信息经过处理后具有特定含义的数据,能够减少人们的不确定一致性强、安全性好性知识对信息的进一步提炼和总结,具有可复用性和指导意义常见数据库类型关系型数据库非关系型数据库()NoSQL基于关系模型的数据库,使用表格存储数据,通过语句操不使用关系模型的数据库,适用于特定场景主要类型包括SQL作代表产品包括开源、轻量、应用广泛文档型,适合存储半结构化数据•MySQL•MongoDB企业级应用首选,功能全面键值型,高性能缓存和计数器•Oracle•Redis微软产品,与系统集成性好列存储,适合大数据分析•SQL ServerWindows•HBase数据库的历史与发展年代11960层次数据库和网状数据库开始出现,如的系统,但数据依赖性强,结构IBM IMS复杂年代21970提出关系模型,奠定了现代数据库理论基础开发,E.F.Codd IBMSystem R成为首个实现的关系数据库系统SQL年代31980-1990商业关系数据库蓬勃发展,、等产品逐渐成熟,关系数据库成为主Oracle DB2流年代至今42000数据库兴起,应对大数据挑战出现,结合传统关系数据库和NoSQL NewSQL优点云数据库服务普及,数据库即服务模式流行NoSQL DBaaS现实中的数据库应用案例银行结算系统电商订单管理微信公众号后台银行的核心业务系统依赖于高性能、高可电商平台需要处理高并发的订单创建和查微信公众号平台需要管理海量的内容和用靠性的数据库这类系统需要支持数千万询请求,特别是促销活动期间订单数据户互动数据此类系统通常采用混合数据笔每日交易,确保数据一致性和安全性,库通常使用分片技术来水平扩展,结合缓库架构,使用关系型数据库存储结构化数同时提供毫秒级的响应时间通常采用存系统减轻数据库压力主流电商平台常据,同时借助等文档数据库处理MongoDB、等企业级数据库,配合多级采用集群和缓存的组合架构富媒体内容,实现高效的内容管理和分发Oracle DB2MySQL Redis备份和灾备系统数据库系统与数据库管理系统用户与应用程序通过接口与数据库交互数据库管理系统DBMS控制数据的存储和访问数据库实际存储的数据集合数据库管理系统是一种系统软件,用于创建和管理数据库它提供了一个接口,允许用户和应用程序与数据库进行交互,同时负责数DBMS据的组织、存储和检索的核心功能包括数据定义、数据操作、数据完整性控制、事务管理、并发控制和安全管理等DBMS常见的功能模块包括查询处理器、事务管理器、存储管理器、日志管理器和缓冲区管理器等这些模块协同工作,确保数据的有效管DBMS理和安全访问,同时优化系统性能和资源利用数据库设计总流程需求分析收集并分析用户需求,确定数据库的目标和范围识别关键实体、属性和业务规则,为后续设计阶段奠定基础概念结构设计根据需求分析结果,创建实体关系图图,定义实体、属性和实体间-ER的关系,形成独立于具体的抽象数据模型DBMS逻辑结构设计将概念模型转换为逻辑数据模型,如关系模式确定表结构、主键、外键和规范化要求,但不考虑物理存储细节物理结构设计基于逻辑模型,考虑特定的特性,设计物理存储结构包括索引DBMS设计、存储过程、分区策略和性能优化等需求分析用户需求收集需求梳理与分析功能与数据需求收集用户需求是数据库设计的第一步,也收集到的原始需求通常杂乱无章,需要进功能需求定义了系统需要支持的各种操作,是最关键的一步常用方法包括用户访谈、行分类和梳理设计人员应区分功能性需如数据录入、查询、统计等数据需求则问卷调查、观察记录和文档分析等在这求和非功能性需求,前者关注系统应该做包括需要存储的数据项、数据量、增长预个阶段,设计人员需要与业务人员密切沟什么,后者关注系统应该如何做期、数据间的关联关系等这两类需求共通,理解业务流程和数据处理需求同决定了数据库的结构和性能要求概念结构设计实体与属性关系(模型)ER实体是现实世界中可区分的对象,如学生、课程或订单每个实关系描述了不同实体之间的联系,是模型的核心常见的关系ER体具有多个属性,描述其特征,如学生有姓名、学号和年龄等属类型包括性属性可分为简单属性和复合属性,以及单值属性和多值属性一对一关系如学生和学生证•一对多关系如班级和学生•在概念设计阶段,需要识别所有关键实体及其相关属性,并确定多对多关系如学生和课程•每个实体的唯一标识符(如主键)这一步骤要求设计人员具备业务领域知识和抽象思维能力关系可以具有属性,如学生选修课程的关系可能有选修时间和成绩等属性设计良好的关系模型能够准确反映现实世界中对象之间的复杂联系逻辑结构设计确定数据表定义键与约束将图中的实体和多对多关系转换为关系模ER确定主键、外键和各种约束条件型中的表关系模型评估4规范化处理验证逻辑设计是否满足需求应用数据库范式理论,消除数据冗余逻辑结构设计是将概念模型转换为特定数据模型(通常是关系模型)的过程在这个阶段,设计人员需要决定如何将抽象的实体关系图映射到具体的-数据表,并应用规范化理论优化表结构关系模型中,外键是实现表间关联的重要机制一个表的外键指向另一个表的主键,建立了两个表之间的引用完整性通过合理设计主键和外键,可以确保数据的一致性和完整性物理结构设计存储介质选择表空间规划根据性能需求和预算,选择合适的存储硬件,如、或混合理规划表空间和文件组,分配存储资源大型数据库可以将不同SSD HDD合存储高频访问的数据可放在快速存储上,历史数据可存储在更特性的表分布在不同的文件组中,优化性能I/O经济的介质上索引策略设计分区与分表根据查询需求设计索引,权衡查询性能和维护成本索引对读操作对大型表实施水平或垂直分区策略,提高查询效率和可维护性常有显著提升,但会降低写操作性能,需要平衡设计见分区方式包括按日期、地区或值范围进行划分设计工具介绍数据库设计工具可大致分为两类专业的数据库建模工具和通用图形设计工具前者如、和PowerDesigner ERwinMySQL,提供完整的数据库设计功能,支持从概念模型到物理模型的转换,甚至可以直接生成脚本Workbench SQL通用工具如则更注重图形绘制功能,适合创建概念层面的图此外,近年来涌现了许多在线数据库设计工具,如Microsoft VisioER和,它们提供了协作功能,方便团队共同设计和讨论数据库模型dbdiagram.io draw.io实体联系模型(模型)详解-ER模型基础概念强弱实体集区别ER模型是由在年提出的,用于描述现实世界在模型中,实体集可分为强实体集和弱实体集ER PeterChen1976ER的概念模型它通过三个基本概念构建实体、属性和联系ER强实体集存在独立于其他实体的实体集,拥有自己的主键属性,模型的优势在于它直观、易于理解,能够有效地进行需求沟通可以独立标识例如,学生实体集以学号作为主键实体现实世界中可区分的事物,如学生、教师•弱实体集依赖于其他实体存在的实体集,无法通过自身属性唯属性实体的特性,如姓名、年龄•一标识,需要借助与其他实体的关系例如,家属实体可能依赖联系实体之间的关联,如学生选修课程•于员工实体识别弱实体需要特殊考虑其依赖关系图基本符号与画法ER矩形实体椭圆属性菱形联系矩形用于表示实体集椭圆用于表示实体的属菱形用于表示实体之间实体集是同类实体的集性属性可以连接到实的联系联系名称写在合,如学生、教师体或关系单值属性用菱形内部联系的类型等在图中,实体名单线椭圆表示,多值属(如一对
一、一对多、ER称通常写在矩形内部性用双线椭圆表示派多对多)通常在连接线强实体集用单线矩形表生属性(可由其他属性上标注联系也可以有示,而弱实体集则用双计算得到的)用虚线椭自己的属性,使用椭圆线矩形表示,以区分它圆表示主键属性通常连接到菱形上表示弱们的依赖性质用下划线标示实体集与其依赖的强实体集之间的关系用双线菱形表示典型案例图书馆管理系统图ER图书馆管理系统涉及多个关键实体和复杂的业务关系主要实体包括图书、读者、借阅记录、图书分类和出版社等每本图书有、ISBN书名、作者、出版日期等属性,而读者则有读者号、姓名、联系方式等属性核心关系主要有读者借阅图书(多对多关系,带有借阅日期、归还日期等属性);图书属于特定分类(多对一关系);图书由出版社出版(多对一关系)此外,还可能包括预约关系,表示读者对当前不可借阅的图书进行预约在实际设计中,需要考虑图书馆的具体业务规则,如借阅期限、续借规则、超期罚款等,这些都会影响图的设计细节和后续的逻辑模ER型转换关系模型基础表(关系)二维表格结构,由行和列组成元组(记录)表中的每一行,代表一个实体实例属性(字段)表中的每一列,描述实体的特征键(主键、外键)用于唯一标识和建立表间关系关系模型是数据库领域最成功的数据模型,由在世纪年代提出它将数据表示为关系(即二维表)的集合,每个关系由多个元组(行)组成,每个元组E.F.Codd2070包含多个属性(列)的值在关系模型中,主键是唯一标识每条记录的属性或属性组合候选键是能够唯一标识记录的最小属性集,一个关系可以有多个候选键,其中一个被指定为主键外键则用于建立表之间的关联,维护引用完整性关系模型三大性操作性关系模型提供了一组明确的操作,用于检索和操作数据这些操作包括关系代数(选择、投影、连接等)和关系演算结构性这些操作可以组合使用,形成复杂的查关系模型将数据组织为二维表格(关询作为标准查询语言,实现了这SQL系)每个关系由多个元组(行)组成,些操作功能每个元组包含固定数量的属性(列)1所有属性值都是原子的,不可再分表完整性与表之间通过公共属性(通常是主键和关系模型定义了三类完整性约束实体外键)建立联系,形成完整的数据结构完整性(主键非空且唯一)、参照完整性(外键值必须是被参照表中存在的值或为空)和用户定义的完整性(满足特定业务规则的约束)这些约束确保数据的一致性和有效性表的设计要点合理选择字段类型命名规范根据数据的实际特性选择最合适的字段类采用一致的命名约定,提高可读性和维护型,既要确保数据完整性,也要考虑存储性效率例如表名和字段名使用有意义的英文名称•数值型数据使用、等•INT DECIMAL多词组合使用下划线或驼峰命名法•类型避免使用保留字和特殊字符•日期时间使用、等•DATE DATETIME专用类型文本数据根据长度选择、•CHAR或VARCHAR TEXT设计适当冗余虽然范式理论强调消除冗余,但实际应用中,适当的冗余可以提高查询效率频繁查询但很少更新的数据可考虑冗余存储•统计值和派生数据可以预先计算存储•历史记录表可以保留冗余数据以便于查询•主键与唯一约束主键的作用主键类型选择主键是表中的一个特殊字段或字段组合,用于唯一标识表中的每常见主键类型包括一条记录主键的设计直接影响数据库的性能和可维护性良好自然主键使用业务数据中本身唯一的属性作为主键,如身份证的主键应具备以下特性号、等优点是有业务意义,缺点是可能变更或结构复杂ISBN唯一性在表中不存在两条记录具有相同的主键值•非空性主键值不允许为•NULL代理主键使用与业务无关的值作为主键,通常是自增整数或稳定性一旦确定,不应频繁变更•优点是稳定简单,缺点是无业务含义UUID简单性结构简单,便于索引和连接操作•复合主键由多个字段组合形成的主键适用于多对多关系表或某些特殊业务场景,但会增加索引和连接操作的复杂性外键与参照完整性外键定义参照完整性约束级联操作外键是表中的一个字段或字段组合,它引参照完整性约束确保外键值必须是被引用为了灵活处理参照完整性,数据库系统提用另一个表的主键,建立两个表之间的关表中存在的主键值,或者为空(如果允供了几种级联选项级联更新、级联删除、联关系外键是实现数据库引用完整性的许)当尝试插入一条外键值在主表中不设置为、设置为默认值等这些选项NULL主要机制,确保相关表之间的数据一致性存在的记录时,数据库会拒绝操作同样,决定了当主表记录发生变化时,相关外键外键可以是单列或多列,但必须与被引用当尝试删除被其他表引用的主表记录时,记录应如何处理选择合适的级联选项需的主键结构匹配也会受到约束要根据具体业务逻辑和数据安全性要求来确定数据库范式及其应用意义第三范式()3NF第二范式()2NF第三范式要求满足的基础上,所有非主键2NF第一范式()1NF第二范式要求满足的基础上,所有非主键字段都必须直接依赖于主键,而不能依赖于其他1NF第一范式要求表中的每个字段都是原子性的,不字段都必须完全依赖于整个主键,而不是仅依赖非主键字段这消除了传递依赖,提高了数据一可再分这意味着每个单元格只能包含单一值,于主键的一部分这主要适用于有复合主键的表致性例如,如果客户表中包含城市和省份字段,不允许有重复组或数组值例如,一个联系人表例如,如果订单明细表的主键是订单产品而省份依赖于城市(而不是直接依赖于客户ID,中不应该有一个电话号码字段包含多个电话号,那么产品名称只依赖于产品,就不满足),就不满足,应该将地址相关字段分ID ID ID3NF码,而应该将其拆分为多个字段或创建单独的电,应该被移到产品表中离到单独的表中2NF话号码表具体范式推导案例初始表设计分析1考虑一个学生选课信息表,包含字段学号、学生姓名、系别、课程号、课程名称、学分、成绩这个表存在多种异常问题一个学生选多门课程会导致学生信息重复;课程信息也会因为多个学生选修同一课程而重复;系别名称变更需要修改多条记录应用第一范式2检查初始表,确认所有字段都是原子性的,不可再分此例中各字段已经满足原子性要求,因此已符合但表中仍存在数据冗余和潜在的更新异常问题,需要进一步规范化1NF应用第二范式3分析发现,如果将学号课程号作为复合主键,则学生姓名和系别只依赖于学号,课程名,称和学分只依赖于课程号,而不是完全依赖于整个主键应拆分为学生表学号学生姓名,,系别、课程表课程号课程名称学分和选课表学号课程号成绩,,,,应用第三范式4进一步分析发现,在学生表中,系别名称依赖于系别代码而非直接依赖于学号,存在传递依赖应再次拆分为学生表学号学生姓名系别代码和系别表系别代码系别名称最终,,,形成规范化的四个表,消除了冗余和异常建立数据库与数据表创建数据库创建数据表使用语句创建新数据库是数据库管理的基本操作基本语法如下创建表的基本语法如下SQL SQLCREATE DATABASE database_name CREATE TABLE table_name[CHARACTER SETcharset_name]column1datatype[constraints],[COLLATE collation_name];column2datatype[constraints],...,[table_constraints];其中指定字符集,指定排序规则例如,创建一个使用字符CHARACTER SETCOLLATE UTF-8集的数据库例如,创建一个学生表CREATEDATABASEschool_managementCHARACTER SETutf8mb4COLLATE utf8mb4_unicode_ci;CREATE TABLEstudents student_id INTPRIMARY KEYAUTO_INCREMENT,name VARCHAR50NOT NULL,gender CHAR1,birth_date DATE,email VARCHAR100UNIQUE,department_id INT,FOREIGN KEYdepartment_idREFERENCES departmentsdept_id;常用字段类型SQL整型和浮点型整型包括、、、等,根据存储范围不同而选择浮点型包括TINYINT SMALLINTINT BIGINT、和,其中适用于要求精确计算的场景,如财务数据FLOAT DOUBLEDECIMAL DECIMAL选择数值类型时,应考虑数据范围、精度要求和存储空间日期时间型包括(日期)、(时间)、(日期时间)和(时间戳)DATE TIMEDATETIME TIMESTAMP和的主要区别在于时区处理和存储范围会随时区变DATETIME TIMESTAMPTIMESTAMP化而自动调整,而则保持固定值DATETIME字符串类型是固定长度字符串,适合长度恒定的数据如性别代码是可变长度字CHARn VARCHARn符串,节省空间但查询略慢类型适用于存储大量文本,如文章内容类型用于存TEXT BLOB储二进制数据,如图片或文档其他特殊类型允许从预定义列表中选择一个值,如状态字段类似但允许选择多个值类ENUM SETJSON型支持存储和查询格式数据类型适用于生成全局唯一标识符不同支持的JSON UUIDDBMS类型可能有所不同数据完整性约束SQL数据库约束是维护数据完整性的重要机制,确保数据库中的数据符合预定规则常见的约束包括约束确保字段不能接受值,如学生姓名字段应设为约束指定字段的默认值,当插入记录时如未明NOT NULLNULL NOTNULL DEFAULT确提供该字段值,则使用默认值约束定义字段值必须满足的条件,如年龄值必须大于且小于CHECK0120除了上述基本约束,还有约束(确保字段值唯一,可以有多个)、约束(字段值唯一且非空,每表只能有一个)UNIQUE NULLPRIMARY KEY和约束(确保字段值在另一表中存在)这些约束可在语句中定义,也可通过语句后续添加FOREIGN KEYCREATETABLEALTER TABLE数据插入、更新与删除操作类型基本语法使用场景添加新记录到表中INSERT INSERTINTO table_namecolumn1,column2,...VALUES value1,value2,...;修改表中已有记录的值UPDATE UPDATEtable_name SETcolumn1=value1,column2=value2WHERE condition;从表中删除满足条件的记录DELETE DELETE FROM table_nameWHERE condition;快速删除表中所有记录TRUNCATE TRUNCATE TABLEtable_name;数据操作语言是的重要组成部分,用于对数据库中的数据进行操作语句用于向表中添加新DML SQLINSERT记录,可以一次插入一行或多行数据语句用于修改表中现有记录的数据,通常与子句配合UPDATE WHERE使用以限定要更新的记录范围语句用于删除表中的记录,同样常与子句一起使用以指定删除条件语DELETE WHERETRUNCATETABLE句则用于快速删除表中的所有记录,它比更高效,因为不会生成回滚日志在执DELETEFROMtable_name行这些操作时,尤其是更新和删除操作,应格外小心子句的条件,避免误操作导致数据丢失WHERE查询操作与语句SELECT基本查询结构语句是中最复杂也最强大的语句,用于从一个或多个表中检索数据基本语法包括SELECT SQL(指定要检索的列)、(指定数据源表)、(指定筛选条件)、SELECT FROMWHERE GROUP BY(分组)、(分组筛选)、(排序)和(限制结果数量)等子句HAVING ORDER BY LIMIT条件筛选子句用于筛选满足特定条件的记录可以使用比较运算符()、逻辑运算WHERE=,,,=,=,!=符()、、、、等操作符构建复杂的筛选条件例如,AND,OR,NOT INBETWEEN LIKEIS NULL查找年龄在到岁之间的学生1825WHERE ageBETWEEN18AND25多表连接操作用于基于相关字段的关系将多个表中的行组合起来主要连接类型包括(内连JOIN INNERJOIN接,只返回两表中匹配的行)、(左连接,返回左表所有行和右表匹配行)、LEFT JOINRIGHT(右连接)和(全连接)例如JOIN FULLJOIN SELECTstudents.name,courses.course_name FROMstudents JOINenrollments ONstudents.id=enrollments.student_id JOINcourses ONenrollments.course_id=courses.id分组与聚合子句用于将查询结果按一个或多个列进行分组,常与聚合函数(GROUP BYCOUNT,SUM,AVG,)一起使用子句用于筛选分组后的结果例如,查找平均成绩超过分的课程MAX,MIN HAVING85SELECT course_id,AVGscore asavg_score FROMscores GROUPBY course_id HAVINGavg_score85索引()的设计与作用Index索引的基本概念索引类型与应用场景索引是数据库中用于提高查询性能的数据结构,类似于书籍的目主要索引类型包括录它们允许数据库系统快速定位特定值或值范围的记录,而无主键索引最重要的索引,确保记录唯一性和高效访问•需扫描整个表合理使用索引可以显著提升查询速度,但会增加唯一索引确保字段值唯一,但允许值写操作(插入、更新、删除)的开销和存储空间•NULL普通索引提高查询效率但不保证唯一性•索引存储了键值及其对应记录的指针,按照特定的数据结构组织,复合索引基于多个列的组合创建的索引•最常见的是树和树结构这些结构允许数据库通过少量的磁B B+全文索引用于全文搜索,提高文本字段的搜索效率盘操作就能定位到目标数据,大大减少了磁盘访问次数•I/O空间索引用于地理空间数据的高效查询•索引应该创建在经常用于查询条件的字段、经常用于连接的字段、经常用于或的字段上ORDERBYGROUPBY索引优化实例树索引原理覆盖索引优势最左前缀原则B+树是关系型数据库中最覆盖索引是指查询的所有复合索引遵循最左前缀原B+常用的索引结构,它将所字段都包含在索引中,这则,即查询条件必须从索有数据存储在叶子节点,样数据库可以直接从索引引的最左列开始,不能跳非叶子节点只存储索引键中获取所需数据,而无需过中间列例如,对a,b,c值这种结构使得范围查回表查询实际的数据行的复合索引,可以加速的询非常高效,因为所有叶覆盖索引可以显著提高查查询条件包括、、a a,b子节点构成一个有序链表询性能,特别是对大表的、(只有列能a,b,c a,c a的存储引查询例如,如果有一个用到索引),但不包括单MySQL InnoDB擎默认使用树索引,其的复合索引,独的或理解这一原则B+name,age bc中主键索引(聚集索引)查询对于设计和使用复合索引SELECT name,age的叶子节点存储完整记录,至关重要,可以避免创建FROM usersWHERE而二级索引的叶子节点存张三就可以直接不必要的索引并确保查询name=储主键值从索引中获取结果能够有效利用现有索引视图()与其应用View视图的基本概念视图的安全优势简化复杂查询视图是一个虚拟表,它基于查询的结果集视图可以作为一种安全机制,限制用户对底层视图可以封装复杂的查询逻辑,使日常查询更SQL视图不存储实际数据,而是在每次查询视图时表的访问通过视图,可以让用户只能看到和简单对于需要多表连接、聚合函数和复杂过执行定义视图的语句视图可以包含来自操作他们需要的数据,而隐藏敏感字段或记录滤条件的查询,可以创建视图一次,然后像查SQL一个或多个表的部分行和列,甚至可以包含聚例如,可以创建一个只包含非敏感用户信息的询普通表一样查询视图这不仅提高了开发效合函数和复杂的连接操作的结果创建视图的视图,而将完整用户表(包含密码等敏感信息)率,还提高了代码的可维护性例如,可SQL基本语法是保护起来,只对特定管理员开放访问权限以创建一个包含学生成绩统计信息的视图,简CREATE VIEWview_name AS化成绩分析报告的生成SELECT columnsFROM tablesWHEREconditions存储过程与触发器存储过程基础触发器应用存储过程是保存在数据库中的一组预编译语句,可以接受参数、执行操作并返回结触发器是在表上执行特定操作(插入、更新或删除)时自动触发的一组语句触发SQL SQL果它们类似于其他编程语言中的函数或方法存储过程的主要优势包括器可以在操作前()或操作后()执行,用于实现复杂的数据完整性BEFORE AFTER规则或自动化数据维护任务提高性能预编译执行,减少网络传输•触发器应用场景包括封装业务逻辑在数据库层面实现复杂操作••提高安全性可以控制对底层表的直接访问•自动更新关联表如商品减库存时同步更新库存记录•代码重用避免在应用程序中重复编写相同的SQL代码•数据审计记录表的变更历史复杂完整性约束实现不能通过简单约束表达的规则创建存储过程的基本语法•自动计算如更新订单商品时自动更新订单总金额•CREATE PROCEDUREprocedure_name创建触发器的基本语法parameter1datatype,parameter2datatypeBEGINCREATE TRIGGERtrigger_nameSQL statements;{BEFORE|AFTER}{INSERT|UPDATE|DELETE}ON table_nameEND;FOR EACHROWBEGINSQL statements;END;并发控制与事务原子性Atomicity事务是不可分割的工作单位,要么全部执行,要么全部不执行一致性Consistency事务执行前后,数据库从一个一致状态变到另一个一致状态隔离性Isolation事务执行不受其他事务干扰,互相隔离持久性Durability4事务完成后,其结果永久保存在数据库中在多用户数据库环境中,并发控制是保证数据一致性和完整性的关键机制当多个事务同时访问同一数据时,可能出现以下并发问题脏读读取到其他未提交事务的数据;不可重复读同一事务内多次读取同一数据得到不同结果;幻读同一事务内多次查询,后一次查询发现前一次未见的行;丢失更新两个事务的更新操作互相覆盖,导致其中一个更新丢失事务隔离级别读未提交READ UNCOMMITTED最低隔离级别,允许脏读、不可重复读和幻读读已提交READ COMMITTED防止脏读,但允许不可重复读和幻读可重复读REPEATABLE READ防止脏读和不可重复读,但允许幻读串行化SERIALIZABLE最高隔离级别,防止所有并发问题数据库系统通过实现不同的事务隔离级别来平衡数据一致性和系统性能较高的隔离级别提供更强的数据一致性保证,但会增加锁定资源,降低并发性能;较低的隔离级别则提供更高的并发性能,但可能导致数据不一致问题大多数数据库系统默认使用读已提交或可重复读隔离级别例如,默认使用读已提交,而的引擎默认使用可重复读应根据应用需求选择OracleMySQL InnoDB合适的隔离级别,在数据一致性和系统性能之间找到平衡点用户权限与安全管理用户与角色管理权限授予数据库安全模型通常基于用户和角色的概念语句用于授予用户或角色对数据库对象GRANT用户是能够连接到数据库的个体实体,每个用的特定权限语法示例户都有自己的认证信息(通常是用户名和密授予表权限•GRANT SELECT,INSERT码)角色是权限的集合,可以分配给多个用ON table_name TO username;户,简化权限管理授予所有权限•GRANT ALL创建用户•CREATE USERusernamePRIVILEGES ONdatabase_name.*TOIDENTIFIED BYpassword;u授s予er权na限m并e;允许其转授•GRANT创建角色•CREATE ROLErole_name;SELECT ON table_name TO将角色分配给用户•GRANT role_name usernameWITH GRANTOPTION;TOusername;权限回收语句用于撤销先前授予的权限语法示例REVOKE回收特定权限•REVOKE INSERTONtable_name FROM username;回收所有权限•REVOKE ALLPRIVILEGES ONdatabase_name.*FROMusername;回收角色•REVOKE role_name FROMusername;数据库备份与恢复完整备份增量备份恢复流程完整备份是对整个数据库的完全复制,包括所增量备份只保存自上次备份以来发生变化的数数据恢复是在数据丢失、损坏或需要回滚到特有数据、架构、存储过程等对象它是最基本据,因此比完整备份快且占用空间小它依赖定时间点时将数据库还原到可用状态的过程的备份形式,提供了数据的完整快照,但需要于事务日志或变更跟踪机制来识别变化的数据恢复策略取决于备份类型和故障性质基本恢较长时间和较大存储空间使用进行完增量备份通常在完整备份之间执行(如每天一复流程包括确定恢复点目标、准备备份数据、MySQL整备份的典型命令是,例如次),与完整备份结合形成备份策略恢复时,停止受影响的服务、恢复基础备份、应用增量mysqldump需要先恢复最近的完整备份,然后按顺序应用备份或日志、验证恢复结果、重启服务应定mysqldump-u username-p完整备份通常所有后续的增量备份期测试恢复流程,确保在实际紧急情况下能够database_namebackup.sql作为周期性(如每周一次)的基础备份成功恢复日志文件与数据一致性事务发生写入重做日志数据库接收到修改操作请求变更先记录到事务日志中更新数据文件日志同步到磁盘4实际数据文件稍后更新确保日志持久化存储数据库管理系统使用各种类型的日志来维护数据一致性并支持恢复操作主要的日志类型包括重做日志()记录对数据页的修改,用于在系统崩溃后恢复已提交的事务当数据库崩溃时,可能有些已提交事务的修改尚未写入数据文件,通过重做日志可以Redo Log重新应用这些修改撤销日志()记录事务修改前的数据状态,用于回滚未提交的事务和实现事务隔离归档日志()完整的重做日志副本,用于时间点恢复和灾难Undo LogArchive Log恢复二进制日志()记录所有修改数据的语句,用于复制和基于时间点的恢复Binary LogSQL性能优化常用手段查询优化使用分析执行计划,识别低效查询优化策略包括添加合适的索引、避免EXPLAIN SQL、优化条件、限制结果集大小、使用覆盖索引减少回表操作、优化子查询和避SELECT*JOIN免使用条件等定期分析慢查询日志,找出需要优化的语句OR SQL服务器配置优化根据服务器硬件资源和工作负载调整数据库参数关键参数包括缓冲池大小、日志缓冲区大小、最大连接数、排序缓冲区大小等不同的应用场景需要不同的配置优化策略,如系OLTP统注重事务处理效率,而系统注重复杂查询性能OLAP分区与分表将大表分割成更小、更易管理的部分水平分区(按行划分)适用于大量数据的均匀分布,如按时间或区域划分垂直分区(按列划分)适用于将不常用列分离,减少分区可以提高查I/O询效率、简化管理并支持并行操作缓存机制利用多级缓存减少数据库负载数据库内部缓存(如缓冲池)缓存热点数据和索引应InnoDB用层缓存(如、)缓存查询结果和会话数据合理设计缓存更新策略,平衡Redis Memcached数据新鲜度和性能需求监控与诊断工具数据库监控与诊断工具是数据库管理员的重要助手,帮助识别性能瓶颈和潜在问题慢查询日志记录执行时间超过特定阈值的语句,DBA SQL是优化数据库性能的宝贵资源通过分析慢查询日志,可以识别需要优化的语句和索引中可以通过设置和SQL MySQLslow_query_log参数启用慢查询日志long_query_time命令显示数据库服务器的统计信息,如连接数、查询缓存命中率、临时表使用情况等命令显示当前正SHOW STATUSSHOW PROCESSLIST在执行的查询,有助于识别长时间运行的查询和锁定问题性能模式是中的高级监控工具,提供关于服务器内Performance SchemaMySQL部执行的详细信息第三方监控工具如、等,提供了更全面的监控和Prometheus+Grafana PerconaMonitoring andManagementPMM可视化功能分布式数据库与集群主从复制分片与分布式事务主从复制是最基本的数据库扩展架构,包含一个主()数数据分片是将数据水平分割到多个独立数据库(分片)的技术master据库和一个或多个从()数据库主数据库处理所有写操作,每个分片只包含数据的一个子集,如按用户哈希分片或按地理slave ID并将变更记录到二进制日志()从数据库连接到主数据位置分片分片可以显著提高写入性能和总体容量,但增加了复binlog库,复制并应用这些变更,保持数据同步杂性复制过程包括三个主要步骤主库记录变更到二进制日志;从库分布式事务是跨多个分片的事务,确保所有分片要么全部提交,的线程将二进制日志复制到本地中继日志;从库的线程要么全部回滚,维护数据一致性典型的分布式事务实现包括两I/O SQL执行中继日志中的事件,应用变更这种架构提高了读性能和可阶段提交()协议,但会增加延迟现代分布式数据库系统2PC用性,但主库仍可能成为瓶颈,且需要处理复制延迟问题如和使用共识算法和全局时间戳Google SpannerCockroachDB来协调分布式事务,提供强一致性保证高可用架构设计业务连续性确保关键业务不中断自动故障转移故障发生时自动切换到备用系统数据冗余在多个位置保存数据副本资源隔离4避免单点故障影响整个系统高可用性()是现代数据库系统的关键需求,特别是对于支持关键业务应用的数据库高可用架构的核心是冗余和自动故障转移机制,确保在主系统发生故障时,业HA务可以无缝切换到备用系统,最小化停机时间和数据丢失常见的高可用架构包括主从复制集群(带自动故障转移)、多主复制集群、共享存储集群和地理分布式集群等实现高可用性需要考虑多个方面同步复制异步复制vs的权衡;集群成员之间的心跳机制;分布式共识算法(如、);自动恢复和再平衡机制;跨数据中心容灾能力高可用架构还应包括全面的监控系统,实时Paxos Raft检测问题并触发警报或自动修复操作数据库迁移与升级迁移前评估迁移流程升级注意事项数据库迁移前的评估是成功迁移的关键需要典型的数据库迁移流程包括多个阶段环境准数据库版本升级需要特别谨慎,因为不同版本评估的要点包括源数据库和目标数据库的架备(配置目标数据库环境)、架构迁移(创建间可能存在不兼容变化主要注意事项包括构差异、数据量和增长趋势、业务影响和停机表、视图、存储过程等对象)、数据迁移(复创建完整的备份和回滚计划;在测试环境中先窗口、性能需求、安全和合规要求等通过详制实际数据)、验证和测试(确保数据完整性行验证升级流程;检查语法和功能的变更;SQL细的评估,可以制定合适的迁移策略,预估所和功能正确性)、切换(将应用程序指向新数评估性能影响;更新应用程序以适应新版本特需资源和时间,识别潜在风险并提前准备缓解据库)和后续优化根据业务需求和环境复杂性;规划适当的维护窗口;准备详细的升级步措施性,可以选择大爆炸式迁移(一次性完成)或骤清单和应急处理流程增量迁移(分阶段完成)策略数据清洗与一致性校验数据检测识别数据中的错误、重复和缺失值数据清洗修正或删除不正确、不完整的数据数据标准化统一数据格式和表示方式数据验证确认清洗后的数据符合质量标准数据清洗是提高数据质量的关键步骤,特别是在数据迁移、系统整合或数据仓库建设过程中常见的数据问题包括重复记录(如客户信息多次录入)、格式不一致(如日期格式混乱)、值域错误(如年龄为负数)、缺失值、拼写错误和过时数据等数据一致性校验工具帮助识别和纠正这些问题(提取、转换、加载)工具如、和ETL InformaticaTalend提供了强大的数据清洗功能数据质量工具如和专注SQL ServerIntegration ServicesTrillium DataFlux于数据标准化和验证此外,自定义脚本和存储过程也常用于特定的数据清洗任务,如查找重复记录、SQL验证外键完整性和检查数值范围等新兴数据库技术数据库云原生数据库NewSQL是一类新型数据库系统,旨在结合传统关云原生数据库是专为云环境设计和优化的数据库服务NewSQL系数据库的事务处理能力和数据库的可扩展主要特点包括NoSQL性核心特性包括弹性扩展根据需求自动扩缩容•分布式架构支持水平扩展,处理大规模数据•按需计费根据实际使用量支付费用•事务保持强一致性,支持复杂事务•ACID高可用性内置复制和故障恢复机制•兼容使用标准接口,降低学习成本•SQL SQL自动化管理简化备份、升级和优化•无共享架构独立节点,减少全局锁定•代表服务包括、Amazon AuroraAzure SQL代表产品包括、和和等Google SpannerCockroachDB DatabaseGoogle CloudSpanner等TiDB图数据库图数据库专为存储和查询高度互联数据设计,适用于社交网络、推荐系统和知识图谱等场景主要优势包括自然表示关系直接存储实体间的关系•高效关系查询快速遍历复杂关系网络•灵活的数据模型易于添加新的关系类型•直观的可视化便于理解数据间的联系•代表产品包括、和等Neo4j JanusGraphAmazon Neptune大数据与数据库NoSQL(文档数(键值存储)(列族存MongoDB RedisCassandra据库)储)是一个开源的内存数Redis是一种流行的文据结构存储系统,可以用是一MongoDB ApacheCassandra档型数据库,使用作数据库、缓存和消息中个高度可扩展的分布式NoSQL(二进制)格间件它的主要特点包括数据库,设计用于BSON JSONNoSQL式存储数据它的主要特极高的性能,支持每秒数处理大量数据它的主要点包括灵活的模式设计,十万次读写操作;丰富的特点包括高可用性,无支持嵌套文档和数组;丰数据类型,包括字符串、单点故障;线性可扩展性,富的查询语言,支持复杂哈希、列表、集合等;持能够处理级数据;强大PB查询;内置分片和复制,久化机制,支持数据快照的数据模型,基于列族概提供高可用性和水平扩展;和日志;支持主从复念;支持跨数据中心复制;AOF适用于需要灵活模式但仍制和自动分区;适用于缓一致性可调节,平衡性能需要相对复杂查询的应用,存、会话存储、排行榜、和一致性;适用于时间序如内容管理系统、实时分实时计数器等场景列数据、产品目录、消息析和移动应用系统等需要高吞吐量写入的应用场景案例电商平台订单库设计1订单主表设计订单明细表设计记录订单基本信息,如订单号、用户、记录每个订单中的商品明细,如商品、ID ID总金额、支付状态、创建时间等数量、单价、小计等支付记录表设计物流信息表设计记录订单的支付流水,支持多次支付和记录订单的配送信息,如收货地址、物退款场景流单号、配送状态等电商平台订单系统是典型的高并发、高可用数据库应用场景在设计时需要特别注意使用唯一订单号作为主键,通常采用时间戳随机+数或分布式生成算法;建立适当的索引,如用户索引(查询用户订单)、创建时间索引(按时间筛选)、状态索引(按状态筛选)IDID等;考虑数据分区策略,通常按时间或订单号范围分区,提高查询效率案例高校教务系统数据库2核心数据模型关系表设计高校教务系统是典型的多对多关系建模案例核心实体包括为了实现多对多关系,需要设计中间关系表学生表()存储学生基本信息,如学号、姓名、性选课表()连接学生和课程,记录学生选•student•student_course别、入学日期等课信息和成绩课程表()存储课程信息,如课程编号、名称、学分、教课表()连接教师和课程,记录教师授•course•teacher_course课时等课信息教师表()存储教师信息,如工号、姓名、职称、•teacher这些关系表通常使用复合主键(如和的组student_id course_id所属院系等合),并设置外键约束,确保参照完整性此外,选课表还需要记录成绩、学期、选课状态等信息,支持成绩管理和学分统计功这些实体间存在复杂的多对多关系一个学生可选修多门课程,能一门课程可被多个学生选修;一个教师可教授多门课程,一门课程可由多个教师共同教授团队协作中的数据库维护数据模型文档化数据库版本控制变更管理流程良好的文档是团队协作的基础数据库文档应与应用代码一样,数据库结构也需要版本控制规范的变更管理流程是保障数据库稳定性的关包括图和表关系图,清晰展示实体间关系;和等工具可以帮助管理数据库键典型流程包括变更申请,明确变更目的ER LiquibaseFlyway详细的表结构说明,包括每个字段的名称、类变更,它们通过变更脚本来记录数据库结构的和影响范围;同行评审,检查语句的正确SQL型、约束和业务含义;索引设计说明,包括索演进这些工具的主要功能包括自动执行变性和性能影响;测试环境验证,确认变更效果引目的和预期效果;存储过程和触发器的功能更脚本,确保所有环境一致;维护变更历史,和潜在风险;变更审批,由相关负责人批准;说明和参数解释文档应保持更新,并在版本支持回滚操作;生成数据库差异报告;支持多执行窗口安排,选择适当时间执行变更;变更控制系统中管理,确保团队成员能够访问最新分支开发环境使用这些工具可以减少人为错执行和验证,确保变更成功并记录结果这个版本误,简化部署流程,提高团队协作效率流程应该与公司的或实践相集成ITIL DevOps常见数据库维护难题与对策数据膨胀问题死锁处理随着时间推移,数据库表可能因大量更新和删除操作而产生膨胀,导致空间浪死锁是指两个或多个事务互相等待对方释放资源的情况,导致所有相关事务都费和性能下降对策包括定期进行表重组或重建,回收空间;实施归档策略,无法继续执行对策包括调整事务设计,确保一致的资源访问顺序;减少事将历史数据移至归档表或系统;使用分区表,方便定期清理旧分区;设置自动务大小和持续时间;使用合适的隔离级别,减少锁竞争;设置死锁检测和超时清理()参数,及时回收无效空间参数,自动解决死锁;监控和分析死锁日志,识别根本原因autovacuum表结构变更性能突然下降在生产环境中修改大表结构是一项高风险操作,可能导致锁表和服务中断对数据库性能可能因多种原因突然恶化,如查询计划变化、资源竞争或数据分布策包括使用在线架构变更工具,如或;变化对策包括使用性能监控工具,建立基准并设置警报;定期更新统计信Gh-ost pt-online-schema-change采用分步变更策略,如先添加非必填字段,后调整约束;利用双写技术,创建息,确保优化器使用准确数据;控制查询计划变化,考虑使用计划固化技术;新表结构并同步数据;选择低峰期执行变更,并准备回滚方案;考虑使用零停分析等待事件,识别资源瓶颈;引入查询审计,识别和优化高消耗查询机迁移技术,如蓝绿部署未来发展与职业前景总结与答疑4数据库设计阶段从需求分析到物理设计的完整流程3数据库范式保证数据一致性的规范化理论5关键优化领域索引、查询、配置、分区和缓存7维护核心任务备份、监控、优化、安全、升级、扩展和故障恢复在本课程中,我们系统地学习了数据库设计和维护的核心知识从基本概念到高级应用,我们探讨了数据库系统的各个方面,包括设计方法论、基SQL础、性能优化技术和运维实践等数据库是信息系统的基础,掌握这些知识对于开发高质量、高性能的应用系统至关重要希望通过本课程的学习,大家不仅掌握了技术细节,还建立了数据库思维,能够从数据角度思考问题和设计解决方案请记住,数据库设计和维护是一个持续学习的过程,技术和最佳实践不断演进,保持学习的热情和好奇心至关重要。
个人认证
优秀文档
获得点赞 0