模块 A:数据库模型升级 (Database Schema Upgrade)
目标: 在现有 EngineeringNode 和 Tenant 基础上,增加财务、资源、分片路由字段,支持“双树模型”(任务树 + 资源树)和“多库分片”。
前置条件:
- 已安装 Node.js 18+
- 已运行 Docker 容器 (
docker compose up -d) - 熟悉 TypeORM 装饰器语法
负责人: 一龙 状态: 进行中
1. 数据模型变更清单
1.1 EngineeringNode 实体变更
文件: backend/src/entities/engineering-node.entity.ts
新增字段:
| 字段名 | 类型 | 说明 | 示例值 |
|---|---|---|---|
budget |
decimal | 预算金额 | 50000.00 |
actual_cost |
decimal | 实际花费 | 12500.50 |
resource_type |
enum | 资源类型 | 'money' | 'time' | 'energy' | 'material' |
db_shard_url |
string | 数据分片 URL (可选) | postgres://shard-01... |
template_id |
uuid | 来源模板 ID | 550e8400-e29b... |
is_root |
boolean | 是否为根工程节点 | true/false |
代码示例:
@Column('decimal', { precision: 12, scale: 2, nullable: true })
budget: number | null;
@Column('decimal', { precision: 12, scale: 2, nullable: true })
actual_cost: number | null;
@Column({
type: 'enum',
enum: ['money', 'time', 'energy', 'material'],
default: 'money'
})
resource_type: 'money' | 'time' | 'energy' | 'material';
1.2 Tenant 实体变更
文件: backend/src/entities/tenant.entity.ts
新增字段:
| 字段名 | 类型 | 说明 |
|---|---|---|
default_db_shard |
string | 默认分片 URL |
subscription_plan |
string | 订阅计划 (free/pro/enterprise) |
2. 执行步骤
Step 1: 修改实体文件
- 编辑
engineering-node.entity.ts,添加上述字段。 - 编辑
tenant.entity.ts,添加分片字段。 - 运行
docker compose restart api让 TypeORM 自动同步表结构 (synchronize: true)。
Step 2: 验证数据库变更
# 进入数据库容器
docker compose exec postgres psql -U postgres -d huixing_db
# 检查表结构
\d engineering_nodes
预期结果:能看到新增的 budget, actual_cost, resource_type 等列。
Step 3: 提交代码
- Git Commit:
feat: upgrade db schema for finance and sharding
3. 验收标准
- 数据库表
engineering_nodes中包含budget,actual_cost,resource_type列。 - API 创建节点时,可以传入这些新字段并成功保存。
- TypeORM 自动同步无报错。
4. 常见问题 (FAQ)
- Q: 为什么不用 Migration 而用
synchronize?- A: MVP 阶段追求速度,后期会切换为 Migration。
- Q: 分片 URL 存哪里?
- A: 暂时存在
db_shard_url字段,后期由 Meta DB 统一管理。
- A: 暂时存在
下一步:模块 B (种子数据生成器)