2. 数据模型设计基础理论

数据模型是工程分析数据平台的骨架。一个健壮的数据模型,必须准确回答三个问题:描述什么对象(实体)、对象有哪些特征(属性)、对象之间如何关联(关系)。在此基础上,通过概念、逻辑、物理三个层次逐步细化,才能保证模型既贴合业务又具备高性能。

2.1 数据模型三要素

三要素是所有数据建模方法(ER、维度、NoSQL)的共同基础。下表从定义、符号、工程示例三个维度进行对比:

要素 定义 ER 图符号 工程分析平台示例
实体 业务中可独立标识的事物 矩形框 试验件、传感器、测试任务、数据文件
属性 实体拥有的特征或状态 椭圆框 试验件编号、传感器型号、采样频率
关系 实体之间的业务关联 菱形框 + 连线 试验件“包含”传感器(1:N)
工程避坑提示: 在工程分析平台中,属性最容易出现“大宽表”陷阱——将多个实体的属性合并到一张表中。例如把传感器校准参数直接塞进数据文件表,导致更新异常。正确的做法是:每个实体独立成表,通过关系关联。

2.2 概念模型:业务视角的“第一张图”

概念模型完全脱离技术实现,只关注业务领域中的核心实体和业务规则。它面向业务分析师和领域专家,使用实体-关系图(ERD)或UML 类图表达。

  • 目标:统一业务术语,消除歧义。
  • 产出物:实体清单、实体间业务关系描述、关键业务规则。
  • 工程分析平台示例:“一个试验项目包含多个测试任务,每个任务关联一组传感器,传感器产生原始数据文件。”
建模原则:概念模型阶段不要考虑主键、索引、存储引擎。如果业务专家看不懂,说明模型太“技术化”,需要重构。
概念模型示例:工程试验业务域 试验项目 测试任务 传感器 数据文件 包含 (1:N) 部署 (1:N) 产生 (1:N) 概念模型只表达业务关系,不包含主键、外键、数据类型等技术细节

2.3 逻辑模型:技术中立的“详细设计图”

逻辑模型在概念模型基础上,增加属性、主键、外键、数据类型、约束,但依然独立于具体的数据库产品。它是数据架构师与开发团队之间的“契约”。

  • 关键活动:属性规范化(达到 3NF)、定义候选键与主键、建立关系基数(1:1、1:N、M:N)。
  • 工程分析平台示例:“传感器实体包含 sensor_id(主键)、sensor_type、install_date、calibration_date;与测试任务通过 task_id 外键关联。”
对比维度 概念模型 逻辑模型
抽象层次 高(业务语义) 中(技术中立)
包含属性 仅关键属性 全部属性 + 数据类型
主键/外键 不体现 明确标识
规范化 不要求 通常 3NF
受众 业务专家 数据架构师、开发人员
常见误区:逻辑模型阶段过早引入数据库特性(如分区键、聚簇索引、引擎选择),会污染模型的中立性。逻辑模型应能在 MySQL、PostgreSQL、DuckDB 之间无缝切换。

2.4 物理模型:面向实现的“施工蓝图”

物理模型将逻辑模型映射到具体的数据库平台,考虑存储结构、索引策略、分区方案、数据压缩、物化视图等性能因素。它是 DBA 和运维团队的操作依据。

  • 工程分析平台典型物理设计:
    • 分区策略:按时间分区(如 test_date),便于历史数据归档。
    • 索引设计:对 sensor_id、task_id 建 B-tree 索引;对时间戳建 BRIN 索引(PostgreSQL)。
    • 存储引擎:高频写入场景使用列存引擎(ClickHouse、DuckDB);事务场景使用行存引擎。
性能与规范权衡:物理模型允许反规范化——例如在数据文件表中冗余存储传感器型号,避免每次查询都 JOIN。但必须通过文档或版本注释记录反规范化的理由,防止后续维护者误解。
数据模型分层设计递进关系 概念模型(Conceptual) 业务实体 + 关系 | 无技术细节 | 受众:业务专家 逻辑模型(Logical) 属性 + 主键 + 外键 + 约束 | 3NF | 受众:架构师/开发 物理模型(Physical) 索引 + 分区 + 存储引擎 + 压缩 | 受众:DBA / 运维 每层向下细化,上层变更必须同步影响下层,保持模型一致性

2.5 分层设计核心原则

  1. 逐层细化,不可跳跃:概念模型未评审通过,不进入逻辑模型;逻辑模型未定稿,不进入物理模型。
  2. 每层独立评审:概念模型由业务专家签字;逻辑模型由架构组评审;物理模型由 DBA 审核。
  3. 版本关联:三层模型使用同一版本号(如 v2.1.0),确保可追溯。
  4. 逆向同步:物理模型变更(如新增索引)必须回写到逻辑模型文档,避免模型与实现脱节。
工程分析平台最佳实践:使用 dbdocs 或 SchemaSpy 自动从物理 DDL 生成逻辑模型文档,再人工补充业务描述,实现“物理→逻辑”的半自动同步。