一、核心概念:数据、数据库与DBMS
1. 数据 (Data) 与信息 (Information)
- 数据:对客观事物符号化的表示,是未经处理的原始事实(如数字、文本、图像)。
- 信息 :是经过加工处理、具有特定意义和上下文的数据。数据是信息的载体,信息是数据的内涵。
2. 数据库 (Database, DB)
- 定义 :长期存储在计算机内、有组织的、可共享的、统一管理的数据集合。
- 特点 :
- 数据结构化:数据按照某种数据模型(如关系模型)进行组织。
- 数据共享性高、冗余度低:可以被多个用户和应用共享,减少数据重复。
- 数据独立性高:数据的逻辑结构改变,不影响应用程序(逻辑独立性);数据的存储结构改变,不影响逻辑结构(物理独立性)。
3. 数据库管理系统 (Database Management System, DBMS)
- 定义 :位于用户和操作系统之间的一层数据管理软件 。它是数据库系统的核心。
- 主要功能 :
- 数据定义 :提供数据定义语言 (DDL),用于定义数据库结构(创建表、修改表等)。
- 数据操纵 :提供数据操纵语言 (DML),用于对数据进行增(INSERT)、删(DELETE)、改(UPDATE)、查(SELECT)。
- 数据库的运行管理 :核心功能 。包括并发控制 、安全性检查 、完整性约束 、故障恢复等。
- 数据组织、存储和管理:确定数据的存储结构和存取方式。
4. 数据库系统 (Database System, DBS)
- 定义 :由数据库 、数据库管理系统 (及其应用开发工具 )、应用程序 、数据库管理员 (DBA) 和用户共同构成的完整系统。
二、数据模型 (Data Model) - 数据库的蓝图
数据模型是现实世界数据特征的抽象,是用来描述数据、组织数据和操作数据的工具。它是数据库系统的核心和基础。
1. 概念模型 (Conceptual Model)
- 目的 :按用户的观点对数据和信息建模,用于数据库设计。与具体的DBMS无关。
- 主要工具 :实体-联系模型 (E-R Model) 。
- 实体 (Entity):客观存在并可相互区别的事物(如一个学生、一门课程)。
- 属性 (Attribute):实体的特性(如学生的学号、姓名)。
- 联系 (Relationship) :实体内部的联系(如班级班长)或实体之间的联系(如学生"选修"课程)。联系有1:1(一对一)、1:N(一对多)、M:N(多对多) 三种类型。
2. 逻辑模型 (Logical Model)
- 目的 :按计算机系统的观点对数据建模,直接面向DBMS。主要包括:
- 层次模型:用树形结构表示实体及其联系(如早期IMS)。
- 网状模型:用图结构表示实体及其联系。
- 关系模型 (Relational Model) :当前绝对主流。用二维表(关系)来组织数据。
- 面向对象模型:将实体定义为对象。
3. 物理模型 (Physical Model)
- 目的:描述数据在存储介质上的存储结构和存取方法(如索引、哈希)。
三、关系数据库 (Relational Database) - 重中之重
这是软考和当前实践中最主要的内容。
1. 关系模型的基本概念
- 关系 (Relation) :对应一张二维表。
- 元组 (Tuple) :表中的一行,也称为记录。
- 属性 (Attribute) :表中的一列,也称为字段。
- 主键 (Primary Key) :能唯一标识 一个元组的属性或属性组。其值不能为空(NOT NULL)且不能重复(UNIQUE)。
- 外键 (Foreign Key) :一个关系R中的某个属性(或属性组)是另一个关系S的主键,则该属性(组)是R的外键。用于维护参照完整性。
2. 关系完整性约束
- 实体完整性 :主键的值不能为空(NOT NULL)。
- 参照完整性 :外键 的值必须等于被参照关系(S)中某个元组的主键值,或者为空(NULL)。
- 用户定义完整性:用户针对具体应用定义的约束条件(如年龄必须大于0)。
3. 结构化查询语言 (SQL)
SQL是关系数据库的标准语言。
- 数据定义语言 (DDL) :
CREATE
(创建)、ALTER
(修改)、DROP
(删除)、TRUNCATE
(清空)。 - 数据操纵语言 (DML) :
SELECT
(查询)、INSERT
(插入)、UPDATE
(更新)、DELETE
(删除)。 - 数据控制语言 (DCL) :
GRANT
(授权)、REVOKE
(收权)。 - 事务控制语言 (TCL) :
COMMIT
(提交)、ROLLBACK
(回滚)。
SELECT
语句是核心中的核心 ,必须熟练掌握其语法和各种子句(WHERE
, GROUP BY
, HAVING
, ORDER BY
, JOIN
)。
四、数据库事务 (Transaction) 与并发控制
1. 事务的概念
- 定义 :用户定义的一个数据库操作序列 ,这些操作要么全做,要么全不做,是一个不可分割的工作单元。
- ACID 特性(必考) :
- 原子性 (Atomicity):事务的所有操作在数据库中要么全部反映,要么全部不反映。
- 一致性 (Consistency):事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
- 隔离性 (Isolation):一个事务的执行不能被其他事务干扰。
- 持久性 (Durability):一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
2. 并发控制与锁机制
当多个事务并发执行时,可能会破坏数据的一致性。DBMS通过并发控制来解决。
- 并发问题 :
- 丢失修改:两个事务读入同一数据并修改,后提交的结果覆盖了先提交的结果。
- 不可重复读:事务T1读取数据后,T2修改了该数据,T1再次读取时得到不同值。
- 读"脏"数据:事务T1修改了数据,T2读取了该数据,之后T1被回滚,T2读到的就是"脏"数据。
- 锁的类型 :
- 排他锁 (X锁,写锁):若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。
- 共享锁 (S锁,读锁):若事务T对数据对象A加上S锁,则T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。
- 封锁协议 :两段锁协议 (2PL) 是保证可串行化调度的充分条件。事务分为扩展阶段 (只能获得锁)和收缩阶段(只能释放锁)。
3. 事务隔离级别
为了解决并发性能和一致性之间的矛盾,SQL标准定义了4个隔离级别(从低到高):
- 读未提交 (Read Uncommitted):可能读取到未提交的数据(脏读)。
- 读已提交 (Read Committed):只能读取到已提交的数据(解决脏读)。
- 可重复读 (Repeatable Read):保证在同一事务中多次读取同一数据的结果是一致的(解决不可重复读)。
- 可串行化 (Serializable):最高级别,强制事务串行执行(解决幻读)。
级别越高,一致性越强,但并发性能越低。架构师需要根据业务场景选择最合适的隔离级别。
五、数据库规范化 (Normalization) - 设计高质量数据库
规范化的目的是消除数据冗余和插入/删除/更新异常,使数据库设计更合理。
- 第一范式 (1NF) :属性不可再分。即每个属性都是原子性的。
- 第二范式 (2NF) :在1NF基础上,消除非主属性对主键的 部分函数依赖**。(即所有非主属性必须完全依赖于整个主键)。
- 第三范式 (3NF) :在2NF基础上,消除非主属性对主键的传递函数依赖。(即非主属性不能依赖于其他非主属性)。
- 巴斯-科德范式 (BCNF) :在3NF基础上,消除主属性对主键的部分和传递函数依赖。是3NF的增强。
范式越高,冗余越低,但查询可能越复杂(需要更多连接) 。在实际设计中,通常会进行反规范化 (Denormalization),以空间换时间,提高查询性能。
六、数据库新技术与发展(架构师视野)
1. NoSQL 数据库
为应对Web 2.0时代海量数据和高并发读写的挑战而出现。
- 特点:非关系型、分布式、不保证ACID、模式灵活。
- 主要类型 :
- 键值 (Key-Value) 数据库:如Redis,适用于缓存、会话存储。
- 文档 (Document) 数据库:如MongoDB,存储半结构化文档(如JSON),适用于内容管理。
- 列族 (Column-Family) 数据库:如HBase,Cassandra,适用于分布式存储和数据分析。
- 图 (Graph) 数据库:如Neo4j,适用于社交网络、推荐系统等关系密集型应用。
2. NewSQL 数据库
试图结合NoSQL的可扩展性和传统关系数据库的ACID特性。如Google Spanner,TiDB。
3. 数据仓库 (Data Warehouse) 与 OLAP
- OLTP (联机事务处理) :传统关系数据库,处理大量简单的在线交易,增删改查频繁。面向操作人员。
- OLAP (联机分析处理) :数据仓库,处理复杂分析查询,数据批量加载,查询量大。面向决策人员。
- 特点 :数据仓库是面向主题的、集成的、相对稳定的、反映历史变化的数据集合。
七、软考考点总结与应用
-
选择题:
- 直接考查基本概念(DB、DBMS、DBS的区别;主键、外键;ACID特性)。
- 考查E-R图、关系模型转换(特别是M:N联系的转换)。
- 考查SQL语法,特别是复杂查询。
- 考查范式判断(给出一个表结构,判断它属于第几范式)。
- 考查事务隔离级别和并发问题。
- 区分OLTP和OLAP。
-
案例分析题:
- 给出一个E-R图或需求描述,要求设计关系模式(写出表结构,标明主外键)。
- 分析现有数据库设计存在的问题(如数据冗余、更新异常),并提出规范化改进方案。
- 分析系统性能瓶颈,要求提出数据库优化方案(如索引优化、SQL优化、读写分离、引入缓存)。
- 为特定业务场景(如高并发、海量数据、复杂关系)选择合适的数据库类型(关系型 vs. NoSQL)。
-
论文题:
- 可能围绕"论数据库系统的设计与优化 "、"高并发网站的数据层架构设计 "、"NoSQL技术在某某项目中的应用"等主题。
- 写作时,可以详细论述你如何根据业务需求进行数据库选型、如何进行表结构设计和索引规划以优化性能、如何处理分布式环境下的数据一致性问题等。
总结
对于软考架构师,掌握数据库知识的关键在于:
- 夯实理论基础:深刻理解关系模型、事务、范式等核心概念。
- 具备设计能力:能够将现实需求转化为高质量的数据库逻辑模型和物理模型。
- 掌握优化技巧:理解索引、SQL、架构(读写分离、分库分表)等层面的性能优化方法。
- 拓展技术视野:了解NoSQL/NewSQL等新技术及其适用场景,能在架构设计中做出合理的技术选型。