Files
starRiverProperty/docs/superpowers/specs/2026-05-01-database-schema-reference-design.md
hpd840321 7b2bd307f1 Initial commit: reorganized source tree
- backend/: 13 Maven modules (cw-elevator-application, cloudwalk-cloud, intelligent-cwoscomponent, ninca-crk, etc.)
- frontend/: 4 Vue projects (elevator-front, cwos-portal, alarm-front, front_acs) + decompiled + scripts
- scripts/: build, test-env, tools (Docker Compose, service templates, API parity)
- docs/: AGENTS.md, superpowers specs, architecture docs
- .gitignore: standard Java/Maven exclusions

Moved from legacy maven-*/ root layout to backend/ organized structure.
2026-05-09 09:56:45 +08:00

309 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 数据库表结构参考手册 — 设计说明
**文档性质**:设计说明(非最终产物)
**产物路径**`docs/superpowers/specs/2026-05-01-database-schema-reference.md`(待生成)
**设计日期**2026-05-01
**状态**:待评审
---
## 1. 目标与范围
走查代码和 .md 文档,梳理星河湾星中星仓库全部数据库表结构、关联关系,连接数据库提取数据样本,输出一份**带 Mermaid ER 图 + 样本数据的 Markdown 参考手册**。
### 1.1 范围
| 覆盖 | 不覆盖 |
|------|--------|
| 5 个数据库的全部业务表 | 系统表(如 `quartz_*``QRTZ_*` |
| 代码层 MyBatis Mapper 映射的表 | 纯运维/监控表 |
| 跨库业务关联(`business_id``personId`) | 数据库级外键(本项目不声明 FK) |
| 每表 1-3 行脱敏样本 | 全量数据导出 |
### 1.2 涉及数据库
| 数据库 | 主机 | 模块 | 采集方式 |
|--------|------|------|----------|
| `component-organization` | 192.168.3.12:3307 | 组织服务(独立微服务) | 🔗 直连查询 |
| `cw-elevator-application` | 192.168.3.12:3307 | maven-cw-elevator-application | 🔗 直连查询 |
| `ninca_crk_std` | 10.128.123.108:3306 | maven-ninca-crk | 📄 代码推导 |
| `alarm_deploy` | 10.128.161.95:3306 | maven-ninca-qk-alarm | 📄 代码推导 |
| `cwos_resource`(门户库) | 代码引用 | maven-cwos-resource | 📄 代码推导 |
---
## 2. 产物结构
文件:`docs/superpowers/specs/2026-05-01-database-schema-reference.md`
```
# 星河湾星中星 — 数据库表结构参考手册
## 1. 数据库概览
- 5 库表格:库名、主机、引擎版本、表数量、采集方式
## 2. 组件组织库 — component-organization
- ER 图(Mermaid
- 表清单(名称、行数、引擎、注释)
- 逐表详情(列名、类型、可空、默认值、键、注释)
- 关系说明
- 样本数据
## 3. 电梯应用库 — cw-elevator-application
- (同上结构)
## 4. 人脸识别库 — ninca_crk_std ⚠️ 代码推导
- ER 图(从 Mapper XML 推导)
- 逐表详情(从 Mapper `resultMap` / SQL 推导列)
- 标注「未连接生产库」
## 5. 报警库 — alarm_deploy ⚠️ 代码推导
- (同上结构)
## 6. 门户资源库 — cwos_resource ⚠️ 代码推导
- (同上结构)
## 7. 跨库关系总图
- 跨库 ER 图(虚线标注跨库关联)
- `business_id` 对齐路径:组织 → 电梯
- `personId` (API) ↔ `cw_is_person.ID` ↔ `image_rule_ref.person_id`
- Feign 调用链中的库切换点
## 8. 代码-表映射索引
- MyBatis Mapper XML → 表名
- Java DAO/DTO → 表名
- SQL DDL 文件位置
## 9. 附录
- 完整 INFORMATION_SCHEMA 原始输出(折叠)
- 脱敏样本数据完整集(折叠)
- 验证 SQL 模板
```
---
## 3. 数据采集策略
### 3.1 三步并行流程
```
Step 1 (并行) Step 2 (并行)
┌──────────────────┐ ┌─────────────────────┐
│ 连接 192.168.3.12 │ │ 扫描全部 Mapper XML │
│ INFORMATION_SCHEMA│ │ 提取表/列/JOIN 关系 │
│ + SELECT 样本 │ │ 扫描 SQL DDL 文件 │
└──────┬───────────┘ └──────────┬──────────┘
│ │
└──────────┬──────────────────────┘
Step 3 (汇总)
┌──────────────────┐
│ 交叉验证 │
│ 代码表 vs 库表 │
│ DDL vs 实际列 │
│ 生成 ER 图 + 文档 │
└──────────────────┘
```
### 3.2 Step 1:直连查询(可连库)
`component-organization``cw-elevator-application` 执行:
```sql
-- 表清单
SELECT TABLE_NAME, TABLE_ROWS, ENGINE, TABLE_COMMENT
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = ?
ORDER BY TABLE_NAME;
-- 列定义
SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT,
COLUMN_KEY, EXTRA, COLUMN_COMMENT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ?
ORDER BY ORDINAL_POSITION;
-- 索引
SELECT INDEX_NAME, COLUMN_NAME, NON_UNIQUE
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ?;
-- 样本(每表 3 行)
SELECT * FROM <table> ORDER BY 1 DESC LIMIT 3;
```
### 3.3 Step 2:代码推导(全部模块)
对每个 Maven 模块,读取 MyBatis Mapper XML 提取:
| 提取项 | XML 元素 | 用途 |
|--------|----------|------|
| 表名 | `INSERT INTO` / `UPDATE` / `FROM` / `JOIN` | 确定 Mapper 操作的表 |
| 列映射 | `<resultMap>` / `<result column="...">` | 列名与 Java 字段对应 |
| JOIN 关系 | SQL 中的 `JOIN ... ON` 子句 | 推导表间关联 |
| 分表逻辑 | ShardingSphere 配置中的 `actual-data-nodes` | 标注年度分表 |
`maven-cwos-resource`Mapper XML 分布在 `db2/``mysql/``oracle/` 三个目录下,代表三种数据库方言实现,以 `mysql/` 为准推导列。
### 3.4 不可达库的标注
`ninca_crk_std``alarm_deploy``cwos_resource`(无法从 192.168.3.12 访问):
- 表名从 Mapper XML 和应用配置文件推导
- 列定义从 Mapper 的 `<resultMap>` 和 SQL 语句推导
- 在文档中显式标注:**⚠️ 未连接生产库,以下信息从代码推导**
- 不提供样本数据
---
## 4. ER 图绘制规范
### 4.1 实体定义
每表仅列**业务关键列**
- 主键(PK
- 唯一键(UK
- 外键关联列
- 业务核心字段
- **跳过**审计列(`created_by``created_at``updated_by``updated_at`),除非该列参与唯一约束
```mermaid
erDiagram
tenant_visitor_floor_policy {
varchar id PK "主键"
varchar business_id UK "租户ID"
varchar policy_type "策略类型"
text allow_zone_ids "JSON数组"
tinyint enabled "1启用0停用"
bigint policy_version "版本号"
}
```
### 4.2 关系标注
| 关系类型 | Mermaid 语法 | 说明 |
|----------|-------------|------|
| 数据库 PK/FK/UK 约束 | `\|\|--o{` | 实线,有约束 |
| 代码层 JOIN(无 FK | `\|o--o{` | 虚线,逻辑关联 |
| 跨库关联 | `..` 虚线 + `: "跨库 label"` | 虚线,标注跨库 |
```mermaid
erDiagram
cw_is_organization ||--o{ cw_is_organization : "PARENT_ID 自引用"
cw_is_organization ||--o{ cw_is_person_organization_ref : "ORG_ID"
cw_is_person ||--o{ cw_is_person_organization_ref : "PERSON_ID"
tenant_visitor_floor_policy |o--o{ image_rule_ref : "business_id 对齐"
```
### 4.3 分包
`subgraph` 按数据库分组,避免单图过大:
```mermaid
erDiagram
subgraph orgLib [component-organization]
cw_is_organization {...}
cw_is_person {...}
cw_is_person_organization_ref {...}
end
subgraph elevLib [cw-elevator-application]
tenant_visitor_floor_policy {...}
image_rule_ref {...}
end
```
### 4.4 跨库关系图
第七节单独一张图,用虚线标出跨库对齐路径:
- `cw_is_organization.BUSINESS_ID``tenant_visitor_floor_policy.business_id`
- `cw_is_person.ID``image_rule_ref.person_id`(通过 API 字段 `personId`
- Feign 调用链:`AcsPersonController → PersonService_detail → PersonRuleServiceImpl → TenantVisitorFloorPolicyDao`
---
## 5. 样本数据规范
### 5.1 采集
每表执行 `SELECT * FROM <table> ORDER BY 1 DESC LIMIT 3;`
### 5.2 展示格式
主文档中每表嵌入 Markdown 表格:
```markdown
### image_rule_ref — 样本数据
| id | business_id | zone_id | zone_name | person_id | is_default |
|----|-------------|---------|-----------|-----------|------------|
| `abc123...` | `25246398...` | `60556054...` | 28F | `def456...` | 1 |
_共 3 行 × 15 列(12 列省略,完整数据见 §9 附录)_
```
### 5.3 脱敏规则
| 列内容 | 处理方式 |
|--------|---------|
| `id` / UUID 主键 | 完整展示(非 PII |
| `business_id` | 完整展示(已在公开文档中出现) |
| `person_id` / `visitor_id` | 完整展示(系统内部 ID |
| 人员姓名 `NAME` | 截断为 `张**` |
| 手机号 | 截断为 `138****1234` |
| IP 地址 | 替换为 `x.x.x.x` |
| 密码 / token | **跳过该列**SELECT 时排除) |
| Unix 毫秒时间戳 | 转换为 `2026-04-30 14:30:00` |
### 5.4 数据量
- 主文档每表 ≤ 3 行
- 附录完整样本(折叠块)≤ 500 行总计
- 不可达库不提供样本数据
---
## 6. 质量校验
### 6.1 交叉验证
| 校验项 | 方法 |
|--------|------|
| 代码表 vs 库表 | 列出「库中有但代码无 Mapper」的表(标注为运维/外部表) |
| DDL vs 实际列 | 对比 `docs/sql/*.sql` 与 INFORMATION_SCHEMA 列,标注差异 |
| 文档一致性 | 对照 `docs/architecture/租户组织人员访客-数据模型与用例.md` 中的列定义 |
### 6.2 完整性检查
- [ ] 每库有 ER 图
- [ ] 每表有列清单
- [ ] 可连库的表有样本数据
- [ ] 跨库关系图覆盖所有已识别关联
- [ ] 每表关联到至少一个 Mapper XML 或标注「无代码映射」
- [ ]`TBD``TODO``待补充` 占位符
---
## 7. 文件清单
| 文件 | 说明 |
|------|------|
| `docs/superpowers/specs/2026-05-01-database-schema-reference.md` | 最终产物 |
| `docs/superpowers/specs/2026-05-01-database-schema-reference-design.md` | 本设计说明 |
| `data/schema_raw/`(产物中引用) | INFORMATION_SCHEMA 原始 JSON 缓存 |
---
## 8. 已知风险
| 风险 | 缓解 |
|------|------|
| 192.168.3.12 不可达 | 降级为全代码推导,标注「库不可达」 |
| 分表(ShardingSphere `2020..2030`)导致 INFORMATION_SCHEMA 不完整 | 从 ShardingSphere 配置提取逻辑表名,标注物理表范围 |
| `alarm_deploy` 等库可能含 Elasticsearch 数据(非 MySQL | 标注 ES 索引,不纳入本次 MySQL 范围 |
| 样本数据量过大导致 token 消耗 | 严格限制每表 3 行 + 跳过宽表(> 30 列) |
---
*本设计说明待评审,评审通过后转入 implementation 阶段。*