# pbf_analysis 数据库表功能说明

## 1. 目的

这份文档说明当前 `pbf_analysis` 数据库中各张 NavSea 相关表的用途、所处阶段、与当前工程的关系。

目标是让后续接手的人能快速回答这些问题：

- 哪些表是原始解析结果
- 哪些表是语义分类与归层结果
- 哪些表是规则注册表
- 哪些表是检测/碰撞/航行分析专题视图
- 哪些表是样式分析与渲染审计结果
- 哪些表是历史分析或中间产物

## 2. 总体分层

当前 `pbf_analysis` 里的表可以按用途分成 6 类：

1. 原始与基础解析层
2. 语义分类与归层层
3. 几何与空间支撑层
4. 规则注册与映射层
5. 样式分析与渲染审计层
6. 业务专题与异常分析层

说明：

- `BASE TABLE` 表示实体表
- `VIEW` 表示视图
- `table_rows` 为 MySQL 估计值，仅用于了解量级

## 3. 关键原则

当前数据库不是只存“最终结果”，而是同时承担四类职责：

- 保存原始解析和展平结果
- 保存分类和标准化结果
- 保存可追溯规则注册表
- 保存审计与专题查询结果

后续开发应优先遵循：

- 映射规则尽量收口到规则表
- 审计结果进专门审计表
- 原始值与标准值并存，避免不可逆覆盖

## 4. 表分组说明

### 4.1 原始与基础解析层

这些表主要用于把原始 `pbf` 解码成可查询的结构化数据。

#### `features`

- 类型：`BASE TABLE`
- 估计行数：`6653014`
- 关键字段：
  - `id, z, x, y, vt_layer, geom_type`
- 用途：
  - 保存原始瓦片的基础 feature 索引
  - 作为很多后续表的原始主干

#### `properties`

- 类型：`BASE TABLE`
- 估计行数：`22213975`
- 关键字段：
  - `feature_id, k, v`
- 用途：
  - 存原始属性键值对
  - 便于后续抽取 `fid`、`分類番号`、`名称` 等字段

#### `at_attributes`

- 类型：`BASE TABLE`
- 估计行数：`6674189`
- 关键字段：
  - `feature_id, k, v`
- 用途：
  - 拆分原始 `at` 属性集合
  - 为分类、渲染兼容、规则归纳提供细粒度字段来源

#### `feature_flat`

- 类型：`VIEW`
- 关键字段：
  - `feature_id, vt_layer, class_id, fid, at`
- 用途：
  - 对原始 feature 做便于分析的展平视图
  - 常用于快速查看对象分类号和 `fid`

#### `feature_semantic`

- 类型：`BASE TABLE`
- 估计行数：`6367524`
- 关键字段：
  - `feature_id, z, x, y, vt_layer, geom_type, class_name, shape_name, layer_name`
- 用途：
  - 原始对象语义的早期抽取层
  - 为后续 taxonomy 和 render 分析提供基础口径

#### `feature_geojson_lookup`

- 类型：`BASE TABLE`
- 估计行数：`6636967`
- 关键字段：
  - `z, x, y, feature_id, fid, vt_layer, geom_type`
- 用途：
  - 做 feature 与瓦片实例的查询映射
  - 便于回查到具体 tile

### 4.2 几何与空间支撑层

这些表负责把原始 feature 补成可空间分析的对象。

#### `feature_geometry_stage`

- 类型：`BASE TABLE`
- 估计行数：`13597637`
- 关键字段：
  - `feature_id, geometry_wkt`
- 用途：
  - 几何导入与中间转换阶段表
  - 为后续空间启用、几何核查服务

#### `navsea_feature_geometry`

- 类型：`BASE TABLE`
- 估计行数：`6685117`
- 关键字段：
  - `feature_id, geometry, geometry_source`
- 用途：
  - NavSea 当前正式使用的 feature 几何表
  - 支撑碰撞、空间专题和检测视图

#### `geometry_consistency`

- 类型：`BASE TABLE`
- 估计行数：`327`
- 关键字段：
  - `canonical_object_type, geometry_type, feature_count, geometry_consistency_status`
- 用途：
  - 统计某类对象的几何类型是否符合预期

#### `geometry_consistency_audit`

- 类型：`BASE TABLE`
- 估计行数：`331`
- 关键字段：
  - `canonical_object_type, geometry_type, feature_count, geometry_consistency_status`
- 用途：
  - 与 `geometry_consistency` 类似，用于审计记录与复核

#### `object_geometry_allowlist`

- 类型：`BASE TABLE`
- 估计行数：`310`
- 关键字段：
  - `canonical_object_type, geometry_type, rule_source, is_allowed, notes`
- 用途：
  - 定义哪些对象类型允许哪些几何类型
  - 是 geometry 审计的规则依据之一

### 4.3 语义分类与归层层

这些表描述“对象是什么”和“应该归到哪一层”。

#### `object_catalog`

- 类型：`BASE TABLE`
- 估计行数：`319`
- 关键字段：
  - `layer_name, class_name, shape_name, vt_layer, geom_type, feature_count`
- 用途：
  - 原始对象目录
  - 手工 taxonomy 审查和统计的基础表

#### `object_type_candidates`

- 类型：`BASE TABLE`
- 估计行数：`6473314`
- 关键字段：
  - `feature_id, object_type_source, object_type, vt_layer, geom_type`
- 用途：
  - 某个 feature 可能属于哪些对象类型的候选集合
  - 是 taxonomy 判定前的候选层

#### `object_type_stats`

- 类型：`BASE TABLE`
- 估计行数：`255`
- 关键字段：
  - `object_type, geom_type, feature_count`
- 用途：
  - 对候选对象类型做统计

#### `canonical_object_rules`

- 类型：`BASE TABLE`
- 估计行数：`221`
- 关键字段：
  - `canonical_object_type, canonical_family, classification_basis, source_layer_scope, ...`
- 用途：
  - 旧版人工整理的对象级归类规则汇总表
  - 偏分析结果，不是最新规则注册表

#### `canonical_layer_rules`

- 类型：`BASE TABLE`
- 估计行数：`49`
- 关键字段：
  - `source_layer, semantic_granularity, canonical_family, render_strategy, ...`
- 用途：
  - 旧版人工整理的层级归并规则表
  - 用于理解老系统如何按层做语义合并

#### `feature_semantic`

- 已在基础层列出
- 同时也是对象语义候选的重要来源

#### `pbf_relayer_candidates`

- 类型：`BASE TABLE`
- 估计行数：`6547009`
- 关键字段：
  - `feature_id, z, x, y, source_layer, geom_type, ... canonical_object_type, canonical_family, semantic_key, detection_key, render_layer`
- 用途：
  - 当前构建 `pbf` 时最重要的结果表之一
  - 保存 feature 经过分类和归层后的候选结果
  - `navsea_tile_builder.py` 会结合该表与原始 `pbf` 一起输出新瓦片

#### `pbf_source_object_stats`

- 类型：`BASE TABLE`
- 估计行数：`215`
- 关键字段：
  - `source_layer, render_layer, canonical_family, canonical_object_type, geom_type, detection_key, semantic_key, feature_count`
- 用途：
  - 统计不同源层在重构后如何分布

#### `pbf_render_compatibility`

- 类型：`BASE TABLE`
- 估计行数：`58`
- 关键字段：
  - `source_layer, render_layer, canonical_family, semantic_granularity, style_bound, feature_count, canonical_object_types`
- 用途：
  - 评估重构后数据与旧样式兼容性的分析表

#### `pbf_detection_catalog`

- 类型：`BASE TABLE`
- 估计行数：`359`
- 关键字段：
  - `detection_key, canonical_family, canonical_object_type, geom_type, feature_count, source_layers`
- 用途：
  - 检测视角的对象目录
  - 支撑 detection_key 设计与校验

### 4.4 规则注册与映射层

这组表是现在最重要的“规则中心”，用于收口旧版到新版的映射逻辑。

#### `navsea_rule_bundle`

- 类型：`BASE TABLE`
- 估计行数：`1`
- 关键字段：
  - `bundle_id, bundle_version, status, effective_date, ...`
- 用途：
  - 规则包总表
  - 记录当前使用的是哪一套 taxonomy/render/source-layer/field-value 规则

#### `navsea_source_layer_rules`

- 类型：`BASE TABLE`
- 估计行数：`49`
- 关键字段：
  - `source_layer_jp, source_layer_std, semantic_granularity, canonical_family, render_strategy, ...`
- 用途：
  - 日文 `source-layer` 到标准层名的映射规则
  - 是 source-layer 可逆标准化的正式注册表

#### `navsea_field_name_rules`

- 类型：`BASE TABLE`
- 估计行数：`17`
- 关键字段：
  - `field_name_jp, field_name_std, field_group_name, keep_in_delivery, keep_in_engineering, ...`
- 用途：
  - 旧字段名到标准字段名的映射
  - 同时定义字段在哪种输出中保留

#### `navsea_field_value_rules`

- 类型：`BASE TABLE`
- 估计行数：`20`
- 关键字段：
  - `rule_id, field_name_jp, legacy_value, standardized_field, standardized_value, ...`
- 用途：
  - 旧字段值到新标准字段值的映射
  - 例如灯色、表示位置等值映射

#### `navsea_taxonomy_rules`

- 类型：`BASE TABLE`
- 估计行数：`8`
- 关键字段：
  - `rule_id, priority, enabled, match_scope, match_expr_json, output_json, canonical_family, canonical_object_type, detection_key_template`
- 用途：
  - 正式 taxonomy 规则表
  - 定义 feature 在什么条件下被归成哪个 `canonical_object_type`

#### `navsea_render_rules`

- 类型：`BASE TABLE`
- 估计行数：`9`
- 关键字段：
  - `rule_id, priority, match_expr_json, output_json, chart_render_type, chart_symbol_code, chart_fill_style, ...`
- 用途：
  - 正式渲染语义规则表
  - 定义 feature 应输出哪些 `chart_* / hazard_* / area_*` 字段

#### `navsea_mapping_registry_vw`

- 类型：`VIEW`
- 用途：
  - 统一查看当前各类映射规则
  - 适合人工巡检和管理

#### `navsea_legacy_to_new_mapping_vw`

- 类型：`VIEW`
- 用途：
  - 从旧值查新值
  - 适合排查“旧字段为什么被映射成这个新字段”

#### `navsea_new_to_legacy_mapping_vw`

- 类型：`VIEW`
- 用途：
  - 从新值反查旧值
  - 适合可逆追述和规则审计

### 4.5 NavSea 对象字典与能力表

#### `navsea_object_taxonomy`

- 类型：`BASE TABLE`
- 估计行数：`127`
- 关键字段：
  - `canonical_object_type, object_family, detection_class, description`
- 用途：
  - NavSea 对象字典
  - 定义各 canonical object 的基础说明

#### `navsea_object_capabilities`

- 类型：`BASE TABLE`
- 估计行数：`259`
- 关键字段：
  - `canonical_object_type, capability`
- 用途：
  - 定义对象能力，例如是否用于碰撞、导航参考、缠绕风险等
  - 给下游专题视图提供能力标签

### 4.6 样式分析与渲染审计层

#### `style_layers`

- 类型：`BASE TABLE`
- 估计行数：`113`
- 关键字段：
  - `layer_id, source_layer, icon, line_color, fill_color, layer_type`
- 用途：
  - 解析旧样式后的 layer 清单

#### `style_mapping`

- 类型：`BASE TABLE`
- 估计行数：`42`
- 关键字段：
  - `layer_id, source_layer, layer_type, icon, line_color, fill_color, object_type, geom_type, feature_count`
- 用途：
  - 分析旧样式的 source-layer 消费关系

#### `style_render_equivalence`

- 类型：`BASE TABLE`
- 估计行数：`53`
- 关键字段：
  - `style_layer, feature_count_before, feature_count_after, difference, render_status`
- 用途：
  - 用于分析重构前后样式层渲染覆盖是否等价

#### `navsea_render_audit_run`

- 类型：`BASE TABLE`
- 估计行数：`1`
- 关键字段：
  - `audit_name, original_style_path, engineering_style_path, original_tile_root, engineering_tile_root, result_count, status_counts_json, ...`
- 用途：
  - 存放“最新一次”渲染审计的摘要
  - 当前约定只保留最新一轮结果

#### `navsea_render_audit_result`

- 类型：`BASE TABLE`
- 估计行数：`2357346`
- 关键字段：
  - `audit_name, object_instance_key, object_instance_id, object_id, fid_legacy, tile_z, tile_x, tile_y, source_layer, status, original_components_json, engineering_components_json`
- 用途：
  - 渲染审计结果明细表
  - 可按 `fid_legacy` 追查某个对象在原始样式和工程样式下的渲染差异

### 4.7 业务专题与异常分析层

这组表/视图偏业务消费和专题分析。

#### `navsea_detection_objects`

- 类型：`VIEW`
- 用途：
  - 检测对象总视图
  - 面向 detection 任务使用

#### `navsea_detection_objects_spatial`

- 类型：`VIEW`
- 用途：
  - 检测对象的空间分析视图

#### `navsea_collision_objects`

- 类型：`VIEW`
- 用途：
  - 碰撞相关对象视图

#### `navsea_grounding_objects`

- 类型：`VIEW`
- 用途：
  - 搁浅风险相关对象视图

#### `navsea_entangle_objects`

- 类型：`VIEW`
- 用途：
  - 缠绕风险相关对象视图

#### `navsea_boundary_reference_objects`

- 类型：`VIEW`
- 用途：
  - 边界参考对象视图

#### `navsea_route_reference_objects`

- 类型：`VIEW`
- 用途：
  - 航路参考对象视图

#### `navsea_navigation_mark_objects`

- 类型：`VIEW`
- 用途：
  - 航标专题对象视图

#### `anomaly_navigation_geom`

- 类型：`BASE TABLE`
- 估计行数：`0`
- 用途：
  - 导航相关几何异常对象表

#### `anomaly_reef_geom`

- 类型：`BASE TABLE`
- 估计行数：`13`
- 用途：
  - 鱼礁/礁石类几何异常对象表

#### `spatial_anomalies`

- 类型：`BASE TABLE`
- 估计行数：`693`
- 关键字段：
  - `anomaly_type, affected_feature_count, region_hint, severity`
- 用途：
  - 空间异常摘要

#### `classification_validation`

- 类型：`BASE TABLE`
- 估计行数：`177`
- 用途：
  - 分类结果验证摘要

#### `detection_catalog_integrity`

- 类型：`BASE TABLE`
- 估计行数：`343`
- 用途：
  - 检测目录完整性校验

#### `semantic_validation_summary`

- 类型：`BASE TABLE`
- 估计行数：`1`
- 用途：
  - 语义验证总摘要

### 4.8 密度与覆盖统计层

#### `tile_density`

- 类型：`BASE TABLE`
- 估计行数：`65467`
- 关键字段：
  - `z, x, y, feature_count`
- 用途：
  - 每个 tile 的 feature 密度统计

#### `tile_density_top100`

- 类型：`BASE TABLE`
- 估计行数：`100`
- 用途：
  - feature 最密的 top100 tile

#### `tile_layer_density`

- 类型：`BASE TABLE`
- 估计行数：`207315`
- 关键字段：
  - `z, x, y, vt_layer, feature_count`
- 用途：
  - 按 tile 和 layer 分解的密度统计

## 5. 当前工程最重要的表

如果只看当前构建与审计链路，最重要的是这些：

### 构建时必看

- `pbf_relayer_candidates`
- `navsea_rule_bundle`
- `navsea_source_layer_rules`
- `navsea_field_name_rules`
- `navsea_field_value_rules`
- `navsea_taxonomy_rules`
- `navsea_render_rules`
- `navsea_feature_geometry`

### 审计时必看

- `navsea_render_audit_run`
- `navsea_render_audit_result`
- `style_layers`
- `style_mapping`
- `style_render_equivalence`

### 数据理解时必看

- `object_catalog`
- `pbf_source_object_stats`
- `pbf_detection_catalog`
- `navsea_object_taxonomy`
- `navsea_object_capabilities`

## 6. 当前推荐使用方式

### 想查某个对象为什么被分类成某个新对象

优先查：

- `pbf_relayer_candidates`
- `navsea_taxonomy_rules`
- `navsea_legacy_to_new_mapping_vw`

### 想查某个对象为什么被渲染成某种 `chart_*`

优先查：

- `navsea_render_rules`
- `navsea_mapping_registry_vw`
- 工程版 `pbf` 中对应 feature 的输出字段

### 想查某个对象原始版和工程版渲染是否一致

优先查：

- `navsea_render_audit_result`
- `navsea_render_audit_run`

### 想做碰撞、搁浅、航路专题分析

优先查：

- `navsea_collision_objects`
- `navsea_grounding_objects`
- `navsea_route_reference_objects`
- `navsea_navigation_mark_objects`

## 7. 维护建议

当前数据库里同时有“旧分析表”和“新规则注册表”，后续维护建议如下：

- 正式规则源以 `tasks/pbf/mappings/*.yaml` 为主
- 数据库规则表作为运行时注册中心
- 不要再把同一套逻辑分散写进多个临时分析表
- 新增规则时优先更新：
  - `navsea_rule_bundle`
  - `navsea_source_layer_rules`
  - `navsea_field_name_rules`
  - `navsea_field_value_rules`
  - `navsea_taxonomy_rules`
  - `navsea_render_rules`

## 8. 与 Git 管理的关系

建议把下面这些内容一起纳入项目 Git：

- 本文档
- `tasks/pbf/` 下的规范文档
- `tasks/pbf/mappings/` 下的规则源文件
- `navsea_mapping_registry_sync.py`
- `navsea_tile_builder.py`
- `navsea_render_audit.py`

这样数据库中的规则、代码中的构建逻辑、审计流程就能形成完整闭环。

