原子标签索引:[概念×16 | 机制×4 | 流程×5 | 分类×4 | 判据×5 | 数据×2 | 案例×2] 上游:第2章(计算机系统基础)、第5章(软件工程基础) 下游:第13章(层次式架构中的数据层设计)、第19章(大数据架构)
标准表述
- 数据是描述事物的符号记录;信息是现实世界事物存在方式或状态的反映;数据是信息的符号表示,信息是具有特定释义和意义的数据。
- 数据模型的三要素是:数据结构、数据操作、数据的约束条件。
- 数据管理技术的发展经历三个阶段:人工管理、文件系统、数据库系统。
- 数据库系统与文件系统的重要区别是:数据的充分共享、交叉访问、与应用程序的高度独立性。
- 数据的独立性包括物理独立性和逻辑独立性。
- 数据控制功能包括:安全性、完整性、并发控制、故障恢复。
- 故障恢复的原理是建立冗余数据。
- 数据库系统采用三级模式结构:外模式(用户模式/子模式)、概念模式(模式)、内模式(存储模式)。
- 概念模式不涉及存储结构、访问技术等细节,因此做到了"物理数据独立性"。
- 系统而严格提出关系模型的是 IBM 的 E.F.Codd,1970 年发表于 Communication of the ACM。
- 关系模型的完整性约束分三类:实体完整性、参照完整性(引用完整性)、用户定义完整性。
- 实体完整性要求主键属性唯一且非空;参照完整性要求外码取空值或等于被参照关系中某元组的主码值。
- 五种基本关系代数运算:并、差、笛卡尔积、投影、选择。
- 投影是垂直方向运算,选择是水平方向运算,除法同时从水平和垂直方向运算。
- 自然连接是特殊的等值连接:比较分量必须是相同属性组,且结果集中去掉重复属性列。
- 函数依赖是语义范畴的概念,只能根据语义来确定,不能凭某一时刻的关系实例断定。
- 若只考虑函数依赖,关系模式最高规范化程度是 BCNF;考虑多值依赖则是 4NF。
- 数据库设计分六个阶段:用户需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施、数据库运行和维护。
- 概念结构设计最常用方法是 P.P.S.Chen 于 1976 年提出的 E-R 方法;抽象方法有三种:分类、聚集、概括。
- 分 E-R 图合并的冲突有三类:属性冲突、命名冲突、结构冲突。
- 反规范化是加速读操作性能的方法,常见操作:冗余列、派生列、表重组、表分割(水平/垂直)。
- 数据库重组不改变逻辑和物理结构,只去除废弃空间和碎片;重构则修改表结构和视图。
- NoSQL 泛指非关系型数据库,不保证关系数据的 ACID 特性。
- NoSQL 整体框架分四层(由下至上):数据持久层、数据分布层、数据逻辑模型层、接口层。
蒸馏笔记
概念
- 数据/信息:数据是符号记录;信息是数据经解释后具有的意义。
- DBS:采用数据库技术的计算机系统,广义上包括 DBMS。
- DB:统一管理的、长期储存在计算机内的有组织的相关数据集合。
- DBMS:数据库系统的核心软件,主要功能:数据定义、数据操纵、运行管理、建立与维护。
- 数据模型三要素:数据结构(静态)、数据操作(动态)、约束条件(完整性规则集合)。
- 三级模式:概念模式=全体数据的逻辑结构(只涉"型");外模式=用户使用的部分数据描述;内模式=物理结构和存储方式描述。
- 型与值:型是结构和属性的说明;值是型的具体赋值(实例)。模式相对稳定,实例相对变动。
- 域:属性的取值范围;关系模型要求所有域是原子数据——即 1NF 条件。
- 目/度:关系中属性的个数。
- 候选码/主码:唯一标识元组的属性(组)为候选码;多个候选码中选定其一为主码。
- 主属性/非主属性:包含在任何候选码中的属性为主属性,否则为非主属性。
- 外码:不是本关系的码、却是其他关系的码的属性(组)。
- 全码:全部属性组共同构成候选码(如 R(T,C,S) 教师选课关系)。
- 函数依赖 X→Y:任何可能的关系 r 中,X 值相等则 Y 值必相等。
- 多值依赖 X→→Y:给定 (x,z) 值,有一组 Y 值只由 x 决定而与 z 无关。
- ORM:对象关系映射,用映射元数据(XML)描述对象-关系映射细节,负责实体域对象的持久化。
机制
- 人工管理阶段:数据面向应用、不保存、无软件管理 → 依赖强、冗余大。
- 文件系统阶段:数据可长期保存、逻辑/物理结构分离 → 但文件孤立,产生冗余、不一致、数据联系弱三缺点。
- 数据库系统阶段:数据面向全系统、经 DBMS 存取 → 冗余减少、独立性高、共享充分。
- 逻辑独立性来自外模式/概念模式映像;物理独立性来自概念模式/内模式映像 → 任一级改变不受另一级牵制。
- 反规范化:规范化→多表关联→查询性能下降 →(添加冗余/合并/分割)→ 读性能提升,代价是更新异常,需用应用程序同步、批量处理同步、触发器同步保持一致。
- 聚簇:按聚簇码物理相邻存放 →(聚簇码查询频繁)→ 提高查询效率;代价是增删改时元组搬动,维护成本大。
- 索引:减少检索的 CPU 和 I/O 服务时间 → 但频繁更新的表上索引过多反而降低存储操作性能。
流程
- 数据库设计六阶段: 1. 用户需求分析(信息要求/处理要求/系统要求) 2. 概念结构设计(E-R 图,独立于 DBMS) 3. 逻辑结构设计(E-R 图→数据模型→规范化→约束→视图) 4. 物理结构设计(数据分布、存储结构、访问方式) 5. 数据库实施(建库、数据加载、试运行) 6. 数据库运行维护(性能监测改善、备份恢复、重组重构)
- 概念结构设计三步:选择局部应用(选适当层次的数据流图)→ 逐一设计分 E-R 图 → E-R 图合并(解决三类冲突+消除冗余)。
- E-R 图转关系模式: 1. 实体→关系模式,实体标识符即码。 2. 1:1 联系:并入任一方实体,码不变。 3. 1:n 联系:并入 n 方实体,码不变。 4. m:n 联系:必须转为独立关系模式,码为双方码的组合。
- 逻辑设计规范化步骤:确定数据依赖 → 判定范式(是否达 3NF/BCNF)→ 不达标则分解 → 评价修正(必要时增加冗余)。
- 物理设计三步:确定数据分布(按应用/按处理要求)→ 确定存储结构(顺序/哈希/堆/B+树+索引)→ 确定访问方式(存取路径)。
分类体系
- 数据模型三代: | 代 | 模型 | 特征 | |---|---|---| | 第一代 | 层次模型 | 树形结构,非根结点有且仅有一个双亲 | | 第一代 | 网状模型 | 允许无双亲结点/多双亲;不能直接表示多对多,需引入联结记录 | | 第二代 | 关系模型 | 表格结构,描述一致性,关系模式集合 | | 第三代 | 面向对象/语义/XML/半结构化等 | 支持复杂数据类型,典型是 NoSQL 运动 |
- 层次/网状模型共同特点:支持三级模式、用存取路径表示数据联系、独立的数据定义语言、导航的数据操纵语言。
- 关系代数运算符四类:集合运算符、专门的关系运算符、算术比较符、逻辑运算符。
- 外连接三种:左外(左表不匹配元组+null 填右属性)、右外(反之)、全外(两者都做)。
- NoSQL 四类型:列式存储(Cassandra/HBase/Riak)、键值对(Redis/Voldemort/Tokyo Cabinet/Oracle BDB)、文档型(CouchDB/MongoDB/SequoiaDB)、图数据库(Neo4J/InfoGrid/Infinite Graph)。
- NoSQL 四层框架: | 层 | 内容 | |---|---| | 接口层 | Rest、Thrift、Map/Reduce、Get/Put、特定语言 API 五种选择 | | 数据逻辑模型层 | 数据的逻辑表现形式 | | 数据分布层 | CAP 支持、多数据中心、动态部署三种机制 | | 数据持久层 | 基于内存、硬盘、内存+硬盘、定制可插拔四种形式 |
- 应用程序与数据库交互四方式:库函数级接口(OCI)、嵌入式 SQL、通用数据接口标准(ODBC/DAO/RDO/ADO/ADO.NET/JDBC)、ORM(Hibernate/MyBatis/JPA)。
判据
- 2NF 判据:R∈1NF 且每个非主属性完全依赖于码(消除非主属性对码的部分函数依赖)。
- 3NF 判据:R∈2NF 且消除非主属性对码的传递函数依赖。
- BCNF 判据:R∈1NF,若 X→Y 且 Y⊄X 时 X 必含码(消除主属性对码的部分和传递依赖)。BCNF 三性质:非主属性对每个码完全依赖;无属性完全函数依赖于非码的属性组。
- 4NF 判据:每个非平凡多值依赖 X→→Y(Y⊄X)中 X 必含码。
- 范式包含关系:1NF ⊃ 2NF ⊃ 3NF ⊃ BCNF ⊃ 4NF ⊃ 5NF。
- 不宜建索引:表太小、频繁更新、属性值很少、过长属性、大文本/多媒体、很少出现在查询条件中的属性。
- 宜建索引:主码或外码、只读为主的表、范围查询、聚集函数或排序输出属性。
- 建聚簇三原则:聚簇码值相对稳定;表主要用于查询且按聚簇码访问/连接;每个聚簇码值的平均元组数既不太多也不太少。
- NoSQL 适用场景:数据模型简单;需灵活性强的 IT 系统;对性能要求高;不需要高度数据一致性;给定 key 易映射复杂值的环境。
数据
- 五种基本关系代数运算可导出其他运算:交=R-(R-S);θ连接=笛卡尔积+选择;自然连接=笛卡尔积+选择+去重复列。
- 笛卡尔积基数:R 有 K₁ 个元组、S 有 K₂ 个元组,R×S 有 K₁×K₂ 个元组,列为 n+m 目。
- 存储访问"80/20 规则":从数据库中检索的 80% 的数据由其中 20% 的数据项组成。
- 微软数据库接口演进:ODBC→DAO(Jet 引擎、桌面库)→RDO(封装 ODBC、远程)→ADO(访问关系+非关系库)→ADO.NET(.NET 类库)。
- Java 端:JDBC 规范客户端访问数据库;ORM 框架 Hibernate(全自动、笨重)、MyBatis(半自动)、JPA(JDK 注解/XML 描述映射,Java 自带)。
案例
- FIRST(Sno,Sname,Status,City,Pno,Qty) 分解:1NF 有冗余/修改不一致/插入异常/删除异常四问题 → 分出 FIRST₁(Sno,Sname,Status,City)∈2NF → 再分出 FIRST₁₁(Sno,Sname,Status)与 FIRST₁₂(Status,City)∈3NF(6.2.3 节)。
- R(Pno,Pname,Mname):候选码 (Pname,Mname) 或 (Pno,Mname),全主属性故为 3NF 但 Pname 传递依赖码,非 BCNF → 分解 R1(Pno,Pname)+R2(Pno,Mname) 达 BCNF(6.2.3 节)。
易错点 / 边界情况
- 网状模型"更普遍",层次模型是网状的特例;但网状模型也不能直接表示多对多联系。
- 函数依赖不能由某一时刻的实例断定(Sage 与 Sno 的反例);同名与否决定 Sname→Sage 是否成立。
- BCNF 已消除"主属性"对码的部分/传递依赖,3NF 只消除"非主属性"的——3NF 不一定是 BCNF。
- 3NF 的模式必是 2NF 的模式;产生冗余和异常的两个重要原因是部分依赖和传递依赖。
- 自然连接无重复属性时退化为笛卡尔积;自然连接同时做水平+垂直方向运算。
- 健壮性/容错性是鲁棒性的别称(第8章语境中注意区分可靠性内部的"容错")。
- 反规范化 ≠ 未标准化的数据库;反规范化必然引入冗余,需额外同步机制。
- 数据库重组(不动结构去碎片)与重构(改表结构/视图)区分,二者都由 DBA 在运行维护阶段完成。
- NoSQL "Not Only SQL"而非"反 SQL":1998 年 Carlo Strozzi 首用此词,2009 年 Eric Evans 再次提出并指非关系型分布式设计模式。