This commit is contained in:
2026-05-08 15:09:07 +08:00
commit 042b626ccb
9 changed files with 282 additions and 0 deletions
+238
View File
@@ -0,0 +1,238 @@
# 项目梳理(第一轮)
## 1. 已确认的基础约束
- 技术方向:`Python + Flask` 后端,前端需要单独界面。
- 数据库:`PostgreSQL`
- 部署方式:前后端都部署在 NAS 上,并以 `Docker` 形式运行。
- 敏感信息:**不读取** `.env`,仅参考 `.env.example`
- 当前代码状态:项目基本还是空白,`main.py` 仍是 PyCharm 初始化示例。
## 2. 环境变量格式(来自 `.env.example`
当前已知 PG 连接相关变量格式如下:
- `PGHOST`
- `PGPORT`
- `PGUSER`
- `PGPASSWORD`
- `PGDATABASE`
- `APP_ENV`
- `APP_PORT`
说明:后续 Flask 项目可以直接按这一组变量读取数据库连接信息。
## 3. Excel 工作簿结构梳理
文件:`KSP Engine Tweak Chart.xlsx`
实际工作表如下:
1. `Engine Database`(核心)
2. `Communication`
3. `work area`(可忽略)
4. `Fuel Chart`
5. `Tank Chart`
6. `Launch Cost`
7. `KSP Vehicle Cost`
8. `Tube`(可忽略)
9. `TQ series`(可忽略)
## 4. 各表初步理解
### 4.1 `Engine Database`
- 规模:约 `478` 条数据。
- 核心程度最高,后续数据库设计应以此为中心。
- 表头如下:
1. `Engine`
2. `Fuel Type`
3. `Cycle`
4. `Work Env`
5. `SL-ISP`
6. `Vac-ISP`
7. `Min Thrust`
8. `Max Thrust`
9. `Mass`
10. `TWR`
11. `Throttle Range`
12. `TVC`
13. `Size`
14. `Price KD`
15. `entry Cost`
16. `Ignitions`
17. `Classification`
18. `Note`
19. `Name`
20. `Config Name`
21. `TechRequired`
22. `Config Note`
#### 观察
- `TWR` 基本是公式列,公式看起来是:`Max Thrust / 9.80665 / Mass`
- `Throttle Range` 基本也是公式列,公式看起来是:`Min Thrust / Max Thrust`
- 同一个 `Engine` 会有多条记录,代表不同配置/燃料/版本。
- `Name``Config Name``TechRequired` 有较多空值,说明这些字段并不是所有引擎都有。
- 仅用 `(Name, Config Name)` 作为唯一键 **不可靠**,发现有重复情况。
#### 目前推测
后续数据库大概率需要拆成两层:
- `engine_base`:存引擎主体信息(名称、来源、尺寸、分类等)
- `engine_variant`:存具体配置(燃料、ISP、推力、点火次数、科技树要求等)
但这需要你确认字段含义后再定。
---
### 4.2 `Communication`
- 规模:约 `50` 条数据。
- 主要记录天线/通信部件。
- 字段包括:部件名、显示名、质量、是否主动、是否可展开、类型、展开直径、通信距离、角度、速度、功耗、来源、成本、缩放信息等。
#### 观察
- `Range km` / `Range AU` / `Range Light year` 看起来是由 `Range Raw` 换算而来。
- `idle power watt` / `transmitting power watt` 也是公式列。
- `Tech` 列目前看起来全部为空,可能是未整理,或者本来不用。
- `Is Feeder``Is Deployable``Is Active` 是布尔型字段。
---
### 4.3 `Fuel Chart`
这是一个**换算工具型表**,目前并不像主数据表,更适合作为后端计算逻辑或前端小工具。
#### 当前看到的结构
- 第一行:燃料类型,如 `HTPB``Solid``PBAN``Kerolox``Hydrolox``Methalox``Hydrazine``MMH/NTO`
- 第二行:每升体积对应质量(看起来像密度/换算系数)
- 第三、四行:
- 输入体积(L)后,计算不同燃料的质量
- 输入质量(t)后,反推出不同燃料的体积
#### 目前判断
这个表不一定要入库;更适合实现为:
- 一个独立 API
- 或前端页面里的快速换算器
- 或后端的纯函数工具模块
---
### 4.4 `Tank Chart`
- 规模:约 `26` 条数据。
- 字段包括:
- `Tank`
- `Fuel Type`
- `Dry Mass`
- `Fuel Mass`
- `Wet Mass`
- `Tank Volume(L)`
- `Mass Ratio`
- `KL per ton`
- `Vehicle`
- `Source`
- `Note`
#### 观察
- `Wet Mass``Mass Ratio``KL per ton` 中很多是公式列。
- `Fuel Type` 当前主要是 `Kerolox` / `Hydrolox` / `Methalox`
- 这个表适合作为“燃料箱/级段参数资料表”。
---
### 4.5 `KSP Vehicle Cost`
- 规模:约 `10` 条数据。
- 字段比较简单:
- `Vehicle`
- `Launch Price`
- `Source`
#### 观察
- 有部分 `Launch Price` 为空,需确认是“未知”还是“待补充”。
## 5. 当前我整理出的数据建模方向(草案)
> 这里只是第一轮草案,等你确认字段含义后再正式定表结构。
### 核心主表建议
1. `engines` / `engine_base`
- 引擎基础信息
- 如:名称、来源/分类、尺寸、备注、内部标识等
2. `engine_variants`
- 引擎配置项
- 如:燃料类型、循环方式、适用环境、SL/Vac ISP、推力范围、质量、TVC、点火次数、价格、科技节点等
### 配套表建议
3. `communication_parts`
4. `tank_specs`
5. `vehicle_costs`
6. `fuel_conversion_rules`(不一定入库,也可能直接写成程序常量)
## 6. 第一轮需要你确认的问题
下面这些问题会直接影响数据库设计和前端表单设计:
### 关于 `Engine Database`
1. `Work Env` 的枚举含义是什么?
- 目前看到像 `Lower``Upper` 等,是否表示适用飞行环境/任务场景?
2. `Classification` 是什么语义?
- 是模组来源(如 `Squad``NFS``Ven``Real/...`
- 还是引擎分类标签?
3. `Name` 是不是游戏/模组里的**内部 part name**
- 如果是,为什么有相当多记录为空?
4. `Config Name` 是不是某个引擎的配置名/variant 名?
- 如果是,它显然不是全局唯一键;后续唯一标识你倾向于用什么?
- `Engine + Fuel Type + Config Name`?还是另有内部 ID
5. `Price KD` 是不是 Kerbal Dollars 的部件价格?
6. `entry Cost` 是不是科技树解锁成本 / 研发成本?
7. `TVC` 的单位是否是“度”(gimbal range)?
8. `Size` 的单位是否是米(或零件直径规格)?
9. `Ignitions` 为空时表示:
- 无限次?
- 未知?
- 不适用?
10. `Note``Config Note` 的区别是什么?
- 一个是引擎总体备注,一个是某个配置备注?
### 关于 `Fuel Chart`
11. 这个换算功能你希望最终怎么实现?
- 单独页面小工具
- 引擎/燃料箱录入时的辅助计算器
- 还是后端提供一个简单 API 即可
12. 第二行这些值,本质上是不是“燃料密度 / 升到吨的换算系数”?
- 如果是,我后续会直接把它们做成程序配置或数据库字典表。
### 关于 `KSP Vehicle Cost`
13. `Launch Price` 为空的行,是不是表示“暂无数据,允许为空”?
## 7. 下一步建议
等你回答上面的问题后,我建议立即进入下面阶段:
1. 先把 `Engine Database` 字段定义彻底确认
2. 画出数据库草图(PostgreSQL
3. 确定 Flask 后端模块划分
4. 确定前端页面:列表 / 搜索 / 详情 / 编辑 / 导入
5. 再开始初始化项目结构、Docker、数据库迁移、Excel 导入脚本