)
1. 数据建模方法1.1. 数据建模是一种高级概念技术用于设计数据库1.2. 涉及识别需要存储的数据然后创建这些数据及其之间关系的结构化表示并将其组织成表格和列1.3. 将这些表格和列视为数据库的逻辑表示而存储在这些表格和列中的物理数据可以位于关系数据库产品或数据湖中1.4. 将数据建模应用于任何类型的数据库关系型、维度型、非关系型等1.5. 将大量时间花在数据建模上以确保数据库逻辑性强、高效且易于使用从而最大限度地提高性能并使数据的检索和分析变得更加容易1.6. 没有一种模式可包打天下的。安全性、数据大小和性能等各种因素都可能造成模型的修改2. 关系建模2.1. 关系建模是由Edgar F.Codd于1970年开发的一种建模技术用于设计数据库2.1.1. 将数据组织成表并定义这些表之间的关系2.1.2. 每个表由行也称为记录或元组和列也称为字段或属性组成2.1.3. 每一行代表数据的一个唯一实例每一列代表有关数据的一项特定信息2.2. 键2.2.1. 在关系建模中可以使用主键和外键来定义表、行和列之间的关系2.2.2. 主键是表中每条记录的唯一标识符主键的值不能重复即任意两行数据不能具有相同的键值2.2.3. 外键是表中引用另一表中主键的列2.2.3.1. 用于在两个表之间建立关系以确保数据的完整性2.2.4. 自然键是表中已经存在且具有唯一性的字段2.2.4.1. 在关系建模中自然键通常用作主键2.3. 实体关系图2.3.1. 从实体关系(ER)图开始关系建模这是数据库的高层次视觉结构表示实体数据及它们之间的关系2.3.2. 实体关系图中使用框表示实体使用连接线表示关系2.4. 规范化规则和形式2.4.1. 应用规范化规则将复杂数据库分解为更小、更简单的表2.4.2. 可以最大限度地减少冗余和依赖性提高数据完整性并使数据库更加高效、更易于维护和管理2.4.3. 第一范式(1NF)2.4.3.1. 该表有一个主键2.4.3.2. 表中每个属性都只包含一个单一值而不是一个值列表2.4.3.3. 表中没有重复的列组2.4.4. 第二范式(2NF)2.4.4.1. 第一范式(1NF)2.4.4.2. 数据库记录中的每个细节非主键属性都必须完全依赖于其唯一标识符主键而不能依赖于任何其他细节2.4.5. 第三范式(3NF)2.4.5.1. 第一范式(1NF)2.4.5.2. 第二范式(2NF)2.4.5.3. 表中的每个非主键属性都应该直接与主标识符主键相关而不是通过另一个属性间接相关2.4.5.4. 大多数关系模型尤其是用于OLTP数据库的模型都符合第三范式2.4.6. 使用规范化的数据库模式数据存储在一个地方并组织到多个表中这些表之间有严格定义的关系2.4.7. 有助于确保数据的完整性但也可能会增加查询的时间因为数据库可能需要连接多个表以检索所需数据2.5. 跟踪变更2.5.1. 对于关系型建模的数据追踪其随时间的变化至关重要2.5.2. 为了保留过去的数据和变更记录通常会使用历史表2.5.3. 历史表通常是原始表的副本并添加了额外的列来追踪变更2.5.4. 历史表在审计、报告和数据恢复方面非常有用有助于确保数据的完整性并更容易理解数据是如何随着时间的推移而变化的3. 维度建模3.1. 始于1996年旨在通过将数据组织为事实和维度来支持高效的查询和分析3.2. 当基于关系模型的查询和报告变得过于缓慢或复杂时就需要使用维度模型3.3. 通常以关系模型作为数据源3.4. 事实3.4.1. 在维度建模中事实是指用于衡量某些事物的数据片段通常是数值3.4.2. 出于性能考虑事实可以被聚合或汇总3.4.3. 事实表包含度量值3.5. 维度3.5.1. 维度描述了数据的特征3.5.2. 通常表示为层次结构每个层次都提供了对数据更详细的描述3.5.3. 维度表包含事实表中度量值的属性3.6. 维度建模使用代理键代理键是专门创建通常是自动生成的人工值用作表的主键3.6.1. 当没有自然键或者自然键不适合用作主键时通常会使用代理键这种情况在维度建模中非常常见3.7. 自然键通常比代理键更有意义且更易于理解因此可以使数据库更易于使用和维护3.7.1. 与简单的代理键相比自然键往往更长更复杂因此在实际应用中会带来更多挑战3.7.2. 自然键通常包含敏感信息可能会引发隐私问题3.7.3. 自然键可能会由于潜在的重复和格式不统一而带来挑战3.7.4. 在合并或跨系统比较数据时重复可能会成为问题而格式不一致则进一步增加了集成过程的复杂性3.8. 跟踪变更3.8.1. 使用缓慢变化维(SCD)追踪对表的更改3.8.2. 类型13.8.2.1. SCD会用新数据覆盖现有数据并丢弃旧数据3.8.2.2. 是最简单、最常见的SCD类型通常用于数据的更改不太重要或者不再需要旧数据的情况3.8.3. 类型23.8.3.1. SCD会保留数据的多个版本新数据和旧数据的记录3.8.3.2. 当需要跟踪数据随时间的变化并保留旧数据记录时可以使用此类型的SCD3.8.4. 类型33.8.4.1. SCD针对每一次数据变更新增一个字段列仅保留有限的历史记录3.8.4.2. 是最复杂但也是最灵活的3.9. 关系建模中的历史表与缓慢变化维之间的一个关键区别在于它们的详细程度3.9.1. 历史表在单个记录的层次上跟踪数据变化而缓慢变化维在维度层次上跟踪变化3.9.2. 历史表通常用于跟踪任何类型数据的变化而缓慢变化维专门用于跟踪维度模型中维度表的变化3.10. 反规范化3.10.1. 即在多个表中包含数据的冗余副本这种做法减少了表的数量3.10.2. 在查询数据库时系统不需要连接太多表因此查询速度会快很多3.10.3. 减少连接也降低了最终用户创建报告的复杂性3.10.4. 意味着必须确保冗余数据副本的同步以确维护数据的完整性这需要小心仔细地维护3.10.5. 冗余数据也会占用更多的存储空间可能会略微增加成本3.11. 关系模型中的表越多维度模型的作用就越明显3.11.1. 关系模型中只有少数几张表可能就不需要维度模型3.12. 数据库模式是一个逻辑蓝图它概述了数据库中数据的结构、关系、约束以及其他元素说明了数据是如何组织和关联的3.12.1. 在维度建模中使用了许多类型的模式例如雪花模式和多事实表的模式3.12.2. 星型模式是一种维度建模技术它以一个中心事实表为核心周围环绕着多个维度表3.13. 关系模型捕捉的是部分业务运作方式的业务解决方案而维度模型捕捉的是业务所需的细节以回答有关业务运作情况的问题3.13.1. 如果源系统已经是关系型的则关系型模型更容易建立但对于业务用户来说维度模型更容易使用而且通常在分析查询时性能更好4. 通用数据模型4.1. 通用数据模型(CDM)是一种标准化的结构用于存储和组织数据通常在构建数据仓库解决方案时使用4.2. 提供了一种一致的方式来表示表内的数据和表间的关系使系统和应用程序易于理解数据4.3. 如果你自定义了一个新的模型就可以节省建模的时间降低风险并使组织内的所有应用程序都能使用通用语言访问数据5. 数据保险库5.1. 是由Daniel Linstedt于2000年创建的专门用于数据仓库和商业智能系统5.2. 主要目标是提供一种灵活、可扩展和标准化的方式来对历史数据进行建模和管理5.3. 中心表(Hub)5.3.1. 是模型中的核心业务实体代表客户或产品等关键业务概念5.3.2. 该表通常建模为一个表该表具有唯一标识符如主键和一组属性5.4. 链接表(Link)5.4.1. 是中心表之间关系的模型通常作为一个单独的表5.4.2. 包含了一组外键引用相关中心的主键5.5. 附属表(Satellite)5.5.1. 存储有关中心表或连接表的描述性属性如数据随时间的变化5.5.2. 通常被建模为单独的表并通过外键链接到中心表或链接表5.6. 基于数据仓库的模型可跟踪数据的流向、审计数据并执行规则和标准5.7. 通常与其他数据建模技术如维度建模结合使用以提供一个全面、灵活的数据架构并能与其他系统和应用程序轻松集成5.8. 数据保险库介于3NF数据和星型模式之间5.9. 非常适合数据量大、数据关系复杂的组织5.10. 缺点5.10.1. 复杂性5.10.1.1. 数据保险库建模实施和维护可能会很复杂特别是对于不熟悉该技术的组织5.10.1.2. 需要大量的资源和专业知识投入如果没有适当的文档理解和浏览数据模型会很困难5.10.2. 数据重复5.10.2.1. 通常会导致数据重复因为数据是Db5.10.2.2. 可能会增加存储成本并很难保证数据一致性5.10.3. 性能5.10.3.1. 可能带来大量表和关系从而降低查询性能5.10.3.2. 可能需要使用更复杂的查询和索引策略来实现可接受的性能5.10.4. 缺乏标准5.10.4.1. 一种相对较新且使用较少的技术缺乏标准化的方法5.10.4.2. 能够构建和维护的工程师很少