a
This commit is contained in:
@@ -0,0 +1,393 @@
|
||||
# 数据库模式
|
||||
|
||||
<cite>
|
||||
**本文档引用的文件**
|
||||
- [数据库字段修改记录.txt](file://DB/数据库字段修改记录.txt)
|
||||
- [database_modify.xml](file://Install/Geomative Studio/database_modify.xml)
|
||||
- [Project.h](file://h/Project.h)
|
||||
- [Project.cpp](file://cpp/ProblemZone/Project.cpp)
|
||||
- [Device.cpp](file://cpp/ProblemZone/Device.cpp)
|
||||
- [IOManager.cpp](file://cpp/Managers/IOManager.cpp)
|
||||
- [TdManager.cpp](file://cpp/Managers/TdManager.cpp)
|
||||
- [Script.cpp](file://cpp/ProblemZone/Script.cpp)
|
||||
- [TdRecord.cpp](file://cpp/ProblemZone/TdRecord.cpp)
|
||||
- [GeoMative.rc](file://GeoMative.rc)
|
||||
- [Resource.h](file://Resource.h)
|
||||
</cite>
|
||||
|
||||
## 目录
|
||||
1. [引言](#引言)
|
||||
2. [核心实体表结构](#核心实体表结构)
|
||||
3. [数据库关系与ER图](#数据库关系与er图)
|
||||
4. [关键字段业务含义与验证规则](#关键字段业务含义与验证规则)
|
||||
5. [数据库版本演进历史](#数据库版本演进历史)
|
||||
6. [结论](#结论)
|
||||
|
||||
## 引言
|
||||
|
||||
本文档旨在全面描述Geomative Studio软件所使用的Access数据库的结构。基于`DB/数据库字段修改记录.txt`文件的详细记录,本文档将深入分析项目、设备、脚本、测量数据等核心实体的表结构,包括字段名称、数据类型、主键/外键约束、索引和默认值。文档将解释各表之间的关系(如一对多、多对多等)并提供实体关系图(ER图)进行可视化表示。此外,文档还将包含数据库版本的演进历史和字段变更记录,并说明不同版本间的兼容性处理策略。
|
||||
|
||||
**Section sources**
|
||||
- [数据库字段修改记录.txt](file://DB/数据库字段修改记录.txt)
|
||||
|
||||
## 核心实体表结构
|
||||
|
||||
本节详细描述数据库中核心实体的表结构。信息主要来源于`IOManager.cpp`文件中创建数据库表的代码,以及`Project.cpp`、`Device.cpp`等文件中查询数据的SQL语句。
|
||||
|
||||
### 项目 (Project) 表
|
||||
|
||||
`project`表存储了工程项目的元数据。
|
||||
|
||||
**表结构:**
|
||||
| 字段名称 | 数据类型 | 是否可为空 | 说明 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| `ID` | AutoNumber | 否 | 主键,自增ID |
|
||||
| `CN` | 文本 (40) | 否 | 项目ID |
|
||||
| `PRname` | 文本 (20) | 否 | 项目名称 |
|
||||
| `PRdesc` | 文本 (50) | 是 | 备注 |
|
||||
| `location` | 文本 (50) | 是 | 位置 |
|
||||
| `PRdate` | 日期/时间 | 是 | 日期 |
|
||||
| `duration` | 长整型 | 是 | 持续时间(天) |
|
||||
| `PS` | 文本 (20) | 是 | 项目主管 |
|
||||
| `CS` | 文本 (20) | 是 | 现场经理 |
|
||||
| `PM` | 文本 (20) | 是 | 项目经理 |
|
||||
| `QAS` | 文本 (20) | 是 | QA |
|
||||
| `standard` | 文本 (20) | 是 | 标准 |
|
||||
|
||||
**Section sources**
|
||||
- [IOManager.cpp](file://cpp/Managers/IOManager.cpp#L227-L237)
|
||||
- [Project.cpp](file://cpp/ProblemZone/Project.cpp#L30)
|
||||
- [GeoMative.rc](file://GeoMative.rc#L3835-L3850)
|
||||
|
||||
### 设备 (Device) 表
|
||||
|
||||
`device`表存储了设备的硬件和配置信息。
|
||||
|
||||
**表结构:**
|
||||
| 字段名称 | 数据类型 | 是否可为空 | 说明 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| `ID` | AutoNumber | 否 | 主键,自增ID |
|
||||
| `DEname` | 文本 (20) | 否 | 设备名称 |
|
||||
| `modelNO` | 文本 (20) | 否 | 型号 |
|
||||
| `SN` | 文本 (20) | 否 | 序列号 |
|
||||
| `HWV` | 文本 (20) | 否 | 硬件版本 |
|
||||
| `SWV` | 文本 (20) | 否 | 软件版本 |
|
||||
| `Mdate` | 日期/时间 | 是 | 生产日期 |
|
||||
| `Mbatch` | 文本 (20) | 是 | 批次号 |
|
||||
| `GPS` | 文本 (50) | 是 | GPS信息(2017.9.18新增) |
|
||||
|
||||
**Section sources**
|
||||
- [IOManager.cpp](file://cpp/Managers/IOManager.cpp#L366-L375)
|
||||
- [Device.cpp](file://cpp/ProblemZone/Device.cpp#L135)
|
||||
|
||||
### 脚本 (Script) 表
|
||||
|
||||
`scon`表(在代码中常被称为`script`)存储了测量任务的配置脚本。
|
||||
|
||||
**表结构:**
|
||||
| 字段名称 | 数据类型 | 是否可为空 | 说明 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| `ID` | AutoNumber | 否 | 主键,自增ID |
|
||||
| `CN` | 文本 (40) | 否 | 脚本ID |
|
||||
| `Sname` | 文本 (20) | 否 | 阵列名称 |
|
||||
| `Eamount` | 整型 | 是 | 电极数量 |
|
||||
| `CHamount` | 整型 | 是 | 通道数量 |
|
||||
| `TPamount` | 整型 | 是 | 点数 |
|
||||
| `definer` | 文本 (20) | 是 | 操作员 |
|
||||
| `DEdate` | 日期/时间 | 是 | 创建日期 |
|
||||
| `SCdesc` | 文本 (50) | 是 | 备注 |
|
||||
| `Rect` | 文本 | 是 | 矩形大小(2015.6.12新增) |
|
||||
| `RectLoc` | 文本 | 是 | 矩形位置(2015.6.12新增) |
|
||||
| `PoleDistance` | 文本 | 是 | 电极间距(2015.6.12新增) |
|
||||
| `PoleStep` | 文本 | 是 | 电极步长(2015.6.12新增) |
|
||||
|
||||
**Section sources**
|
||||
- [IOManager.cpp](file://cpp/Managers/IOManager.cpp#L564-L586)
|
||||
- [Script.cpp](file://cpp/ProblemZone/Script.cpp#L18)
|
||||
|
||||
### 测量数据 (Measurement Data) 表
|
||||
|
||||
`td`表是存储测量任务的核心表,它与多种具体测量数据表(如`td1dcon`, `td2dcon`, `td3dcon`)存在一对多关系。
|
||||
|
||||
**表结构:**
|
||||
| 字段名称 | 数据类型 | 是否可为空 | 说明 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| `ID` | AutoNumber | 否 | 主键,自增ID |
|
||||
| `TDname` | 文本 (20) | 否 | 任务名称 |
|
||||
| `Tlocation` | 文本 (50) | 是 | 测区位置 |
|
||||
| `DESN` | 文本 (20) | 否 | 设备序列号 |
|
||||
| `SCCN` | 文本 (40) | 否 | 脚本ID |
|
||||
| `Sname` | 文本 (20) | 否 | 阵列名称 |
|
||||
| `Stype` | 整型 | 是 | 阵列类型 |
|
||||
| `Ttype` | 整型 | 是 | 测试方法 |
|
||||
| `Tmode` | 整型 | 是 | 测试模式 |
|
||||
| `Eamount` | 整型 | 是 | 电极数量 |
|
||||
| `TPamount` | 整型 | 是 | 点数 |
|
||||
| `CHamount` | 整型 | 是 | 通道数量 |
|
||||
| `N` | 整型 | 是 | 堆叠次数 |
|
||||
| `TRwave` | 整型 | 是 | 发射波形 |
|
||||
| `TRfrequency` | 整型 | 是 | 发射频率 |
|
||||
| `Ifrequency` | 整型 | 是 | 发射频率 |
|
||||
| `SAfrequency` | 整型 | 是 | 采样频率 |
|
||||
| `Clayout` | 整型 | 是 | 装置类型 |
|
||||
| `Espace` | 文本 | 是 | 电极间距(2015.6.12由数字改为文本) |
|
||||
| `Edistance` | 文本 | 是 | 电极距离(2015.6.12由数字改为文本) |
|
||||
| `weather` | 整型 | 是 | 天气 |
|
||||
| `WDIR` | 整型 | 是 | 风向 |
|
||||
| `temperature` | 整型 | 是 | 温度 |
|
||||
| `height` | 整型 | 是 | 高度 |
|
||||
| `humidity` | 整型 | 是 | 湿度 |
|
||||
| `Cdate` | 日期/时间 | 是 | 创建日期 |
|
||||
| `Ctime` | 日期/时间 | 是 | 创建时间 |
|
||||
| `Tdate` | 日期/时间 | 是 | 测试日期 |
|
||||
| `Ttime` | 日期/时间 | 是 | 测试时间 |
|
||||
| `Rdirection` | 整型 | 是 | 电阻率方向 |
|
||||
| `CRtime` | 整型 | 是 | 堆叠时间 |
|
||||
| `PM` | 文本 (10) | 是 | 项目经理 |
|
||||
| `OP` | 文本 (10) | 是 | 操作员 |
|
||||
| `QA` | 文本 (10) | 是 | QA |
|
||||
| `rect` | 文本 | 是 | 矩形大小(2015.6.12新增) |
|
||||
| `rect_loc` | 文本 | 是 | 矩形位置(2015.6.12新增) |
|
||||
| `SkipCable` | 整型 | 是 | 跳过电缆(2017.9.18新增) |
|
||||
| `IsAutoGenerate` | 整型 | 是 | 是否自动生成(2017.9.25新增) |
|
||||
| `TZID` | 长整型 | 是 | 测区ID(外键) |
|
||||
|
||||
**Section sources**
|
||||
- [IOManager.cpp](file://cpp/Managers/IOManager.cpp#L369-L397)
|
||||
- [TdManager.cpp](file://cpp/Managers/TdManager.cpp#L438-L440)
|
||||
|
||||
### 测量数据详情表
|
||||
|
||||
`td1dcon`, `td2dcon`, `td3dcon`等表存储了具体的测量数据点,与`td`表通过`TCHID`或`TSN`关联。
|
||||
|
||||
**通用字段结构 (以td2dcon为例):**
|
||||
| 字段名称 | 数据类型 | 是否可为空 | 说明 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| `ID` | AutoNumber | 否 | 主键,自增ID |
|
||||
| `TSN` | 整型 | 否 | 任务序列号 |
|
||||
| `TCHID` | 长整型 | 否 | 通道ID |
|
||||
| `V` | 单精度浮点型 | 是 | 电压 |
|
||||
| `I` | 单精度浮点型 | 是 | 电流 |
|
||||
| `R0` | 单精度浮点型 | 是 | 电阻 |
|
||||
| `SP` | 单精度浮点型 | 是 | 自电 |
|
||||
| `bUse` | 是/否 | 是 | 记录是否有效(2015.6.2新增) |
|
||||
| `Vrawdata` | 备注 | 是 | 原始电压数据 |
|
||||
| `Irawdata` | 备注 | 是 | 原始电流数据 |
|
||||
|
||||
**Section sources**
|
||||
- [IOManager.cpp](file://cpp/Managers/IOManager.cpp#L410-L435)
|
||||
- [TdRecord.cpp](file://cpp/ProblemZone/TdRecord.cpp#L55-L57)
|
||||
|
||||
## 数据库关系与ER图
|
||||
|
||||
根据对代码的分析,数据库中的核心实体存在以下关系:
|
||||
|
||||
* **项目 (Project)** 与 **测区 (Tz)** 之间存在一对多关系。一个项目可以包含多个测区。
|
||||
* **测区 (Tz)** 与 **测量任务 (Td)** 之间存在一对多关系。一个测区可以包含多个测量任务。
|
||||
* **设备 (Device)** 与 **测量任务 (Td)** 之间存在一对多关系。一台设备可以执行多个测量任务。
|
||||
* **脚本 (Scon)** 与 **测量任务 (Td)** 之间存在一对多关系。一个脚本可以被多个测量任务使用。
|
||||
* **测量任务 (Td)** 与 **测量数据详情 (Td1dcon, Td2dcon, Td3dcon)** 之间存在一对多关系。一个测量任务包含多个数据点。
|
||||
|
||||
```mermaid
|
||||
erDiagram
|
||||
PROJECT {
|
||||
AutoNumber ID PK
|
||||
string CN UK
|
||||
string PRname
|
||||
string PRdesc
|
||||
string location
|
||||
datetime PRdate
|
||||
long duration
|
||||
string PS
|
||||
string CS
|
||||
string PM
|
||||
string QAS
|
||||
string standard
|
||||
}
|
||||
DEVICE {
|
||||
AutoNumber ID PK
|
||||
string DEname
|
||||
string modelNO
|
||||
string SN UK
|
||||
string HWV
|
||||
string SWV
|
||||
datetime Mdate
|
||||
string Mbatch
|
||||
string GPS
|
||||
}
|
||||
SCON {
|
||||
AutoNumber ID PK
|
||||
string CN UK
|
||||
string Sname
|
||||
int Eamount
|
||||
int CHamount
|
||||
int TPamount
|
||||
string definer
|
||||
datetime DEdate
|
||||
string SCdesc
|
||||
string Rect
|
||||
string RectLoc
|
||||
string PoleDistance
|
||||
string PoleStep
|
||||
}
|
||||
TZ {
|
||||
AutoNumber ID PK
|
||||
string CN
|
||||
string TZname
|
||||
string location
|
||||
datetime Cdate
|
||||
datetime Ctime
|
||||
long PROID FK
|
||||
}
|
||||
TD {
|
||||
AutoNumber ID PK
|
||||
string TDname
|
||||
string Tlocation
|
||||
string DESN FK
|
||||
string SCCN FK
|
||||
string Sname
|
||||
int Stype
|
||||
int Ttype
|
||||
int Tmode
|
||||
int Eamount
|
||||
int TPamount
|
||||
int CHamount
|
||||
int N
|
||||
int TRwave
|
||||
int TRfrequency
|
||||
int Ifrequency
|
||||
int SAfrequency
|
||||
int Clayout
|
||||
string Espace
|
||||
string Edistance
|
||||
int weather
|
||||
int WDIR
|
||||
int temperature
|
||||
int height
|
||||
int humidity
|
||||
datetime Cdate
|
||||
datetime Ctime
|
||||
datetime Tdate
|
||||
datetime Ttime
|
||||
int Rdirection
|
||||
int CRtime
|
||||
string PM
|
||||
string OP
|
||||
string QA
|
||||
string rect
|
||||
string rect_loc
|
||||
int SkipCable
|
||||
int IsAutoGenerate
|
||||
long TZID FK
|
||||
}
|
||||
TD1DCON {
|
||||
AutoNumber ID PK
|
||||
int TSN
|
||||
long TCHID
|
||||
float V
|
||||
float I
|
||||
float R0
|
||||
float SP
|
||||
boolean bUse
|
||||
memo Vrawdata
|
||||
memo Irawdata
|
||||
}
|
||||
TD2DCON {
|
||||
AutoNumber ID PK
|
||||
int TSN
|
||||
long TCHID
|
||||
float V
|
||||
float I
|
||||
float R0
|
||||
float SP
|
||||
boolean bUse
|
||||
memo Vrawdata
|
||||
memo Irawdata
|
||||
}
|
||||
TD3DCON {
|
||||
AutoNumber ID PK
|
||||
int TSN
|
||||
long TCHID
|
||||
float V
|
||||
float I
|
||||
float R0
|
||||
float SP
|
||||
boolean bUse
|
||||
memo Vrawdata
|
||||
memo Irawdata
|
||||
}
|
||||
PROJECT ||--o{ TZ : "包含"
|
||||
TZ ||--o{ TD : "包含"
|
||||
DEVICE ||--o{ TD : "执行"
|
||||
SCON ||--o{ TD : "使用"
|
||||
TD ||--o{ TD1DCON : "包含"
|
||||
TD ||--o{ TD2DCON : "包含"
|
||||
TD ||--o{ TD3DCON : "包含"
|
||||
```
|
||||
|
||||
**Diagram sources **
|
||||
- [IOManager.cpp](file://cpp/Managers/IOManager.cpp)
|
||||
- [Project.cpp](file://cpp/ProblemZone/Project.cpp)
|
||||
- [TdManager.cpp](file://cpp/Managers/TdManager.cpp)
|
||||
|
||||
## 关键字段业务含义与验证规则
|
||||
|
||||
本节列举核心表中关键字段的业务含义和可能的数据验证规则。
|
||||
|
||||
### 项目 (Project) 表
|
||||
|
||||
* **`CN` (项目ID):** 项目的唯一标识符。业务规则要求其在系统内必须唯一。
|
||||
* **`PRname` (项目名称):** 项目的名称,用于用户识别。不能为空。
|
||||
* **`PRdate` (日期):** 项目创建的日期,用于时间排序和报告生成。
|
||||
* **`PS`, `CS`, `PM`, `QAS` (人员):** 记录项目相关人员,用于责任追溯。
|
||||
|
||||
### 设备 (Device) 表
|
||||
|
||||
* **`SN` (序列号):** 设备的唯一硬件标识符。业务规则要求其在系统内必须唯一。
|
||||
* **`Mdate` (生产日期):** 设备的生产日期,用于设备生命周期管理。
|
||||
|
||||
### 脚本 (Scon) 表
|
||||
|
||||
* **`CN` (脚本ID):** 脚本的唯一标识符。业务规则要求其在系统内必须唯一。
|
||||
* **`Eamount` (电极数量):** 定义了测量阵列中使用的电极总数。必须为正整数。
|
||||
* **`CHamount` (通道数量):** 定义了测量任务中使用的通道数量。必须为正整数。
|
||||
|
||||
### 测量任务 (Td) 表
|
||||
|
||||
* **`TDname` (任务名称):** 测量任务的名称,用于用户识别。不能为空。
|
||||
* **`Ttype` (测试方法):** 一个整型代码,通过`cm`表(代码映射表)关联到具体的测试方法名称(如“电阻率”、“激电”等)。
|
||||
* **`Clayout` (装置类型):** 一个整型代码,通过`cm`表关联到具体的装置名称(如“温纳”、“施伦贝谢”等)。
|
||||
* **`Espace` / `Edistance` (电极间距/距离):** 存储为文本类型,可能包含单位信息(如"5m"),提供了更大的灵活性。
|
||||
|
||||
**Section sources**
|
||||
- [IOManager.cpp](file://cpp/Managers/IOManager.cpp)
|
||||
- [Project.cpp](file://cpp/ProblemZone/Project.cpp)
|
||||
- [Device.cpp](file://cpp/ProblemZone/Device.cpp)
|
||||
- [TdManager.cpp](file://cpp/Managers/TdManager.cpp)
|
||||
|
||||
## 数据库版本演进历史
|
||||
|
||||
根据`DB/数据库字段修改记录.txt`文件,数据库经历了多次重要的结构变更。以下是按时间顺序整理的版本演进历史:
|
||||
|
||||
| 日期 | 变更内容 | 变更类型 | 兼容性说明 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| 2015年6月2日 | 在`td1dcon`, `td2dcon`, `td3dcon`表中增加`bUse`字段,用于标记记录是否有效。 | 新增字段 | 向后兼容。旧数据的`bUse`字段默认为`True`(有效)。 |
|
||||
| 2015年6月12日 | 1. 在`Td`表中增加`rect`和`rect_loc`字段。<br>2. 将`Td`表的`Espace`和`Edistance`字段从数字类型改为文本类型。<br>3. 在`scon`表中增加`Rect`, `RectLoc`, `PoleDistance`, `PoleStep`字段,并删除旧的`X0\Y0\X1\Y1`字段。 | 新增字段<br>修改字段类型<br>新增/删除字段 | 向后兼容。旧数据的`rect`和`rect_loc`为空。`Espace`和`Edistance`的数值被转换为字符串。旧的坐标字段被废弃。 |
|
||||
| 2016年12月2日 | 1. 在`ac`, `acds`, `td_spc_attr`表中新增10个时窗的信息。<br>2. 在`cm`表中加入发射频率为9(0.03125Hz)。 | 新增字段<br>新增数据 | 向后兼容。新时窗字段在旧数据中为空。 |
|
||||
| 2017年9月12日 | 在`project`以及`tz`表中加入默认的工程和默认测区。 | 新增数据 | 向后兼容。不影响现有数据。 |
|
||||
| 2017年9月18日 | 1. 在`device`表中增加`GPS`字段。<br>2. 在`desetting`表中增加`CableType`, `LowPowerAlarm`, `AutoStack`字段。<br>3. 将`gr`表中的`ECODE`属性从文本改成整型。<br>4. 在`td`表中增加`SkipCable`字段。<br>5. 将`td`表中的`DESN`属性从必填改为非必填。 | 新增字段<br>修改字段类型<br>修改字段约束 | 向后兼容。`GPS`等新字段在旧设备记录中为空。`ECODE`的文本值被转换为对应的整型代码。`DESN`字段可为空。 |
|
||||
| 2017年9月23日 | 新增`task_timer`表。 | 新增表 | 向后兼容。该表用于新功能,不影响旧数据。 |
|
||||
| 2017年9月25日 | 在`td`表中添加`IsAutoGenerate`字段。 | 新增字段 | 向后兼容。旧任务的该字段为`False`。 |
|
||||
| 2017年9月26日 | 在`timer_task`表中增加`PLCID`字段。 | 新增字段 | 向后兼容。 |
|
||||
| 2017年9月28日 | 将`td1d/2d/3ddcon`表中的`V,I,R0,SP`的字段属性都改为非必填字段。 | 修改字段约束 | 向后兼容。允许存储不完整的测量数据。 |
|
||||
| 2019年7月4日 | `medium`表新增加强梯度装置。 | 新增数据 | 向后兼容。 |
|
||||
| 2019年7月14日 | 1. `medium`表新增跨孔装置。<br>2. 新增`TTaskInfoCoordinetes`表,用于保存电极坐标信息。 | 新增数据<br>新增表 | 向后兼容。 |
|
||||
| 2019年12月3日 | 新增`TPictureInfo`和`TPictureCode`表,用于存放图片和二维码信息。 | 新增表 | 向后兼容。 |
|
||||
| 2019年12月11日 | 新增`TLoggingTaskInfo`和`TLoggingTaskContent`表,用于支持测井功能。 | 新增表 | 向后兼容。 |
|
||||
|
||||
**Section sources**
|
||||
- [数据库字段修改记录.txt](file://DB/数据库字段修改记录.txt)
|
||||
|
||||
## 结论
|
||||
|
||||
本文档基于对Geomative Studio项目代码和数据库变更记录的分析,全面描述了其Access数据库的模式。数据库设计围绕“项目-测区-任务-数据”的核心流程,通过清晰的表结构和关系来管理地质勘探数据。数据库经历了从2015年至今的持续演进,通过新增字段、修改类型和增加新表的方式,不断扩展功能以支持新的测量方法和设备特性。所有变更都遵循了向后兼容的原则,确保了旧版数据在新版软件中的可用性。`cm`表作为核心的代码映射表,为系统提供了良好的可配置性和多语言支持能力。
|
||||
Reference in New Issue
Block a user