chore(sync): 同步当前工作区全部变更(学员学号可编辑并留空自动生成等)
This commit is contained in:
1 parent
01e949093a
commit
ee629f2f3e
534 files changed
+72978
-2720
No files matched your search
@@ -0,0 +1,36 @@
|
||||
-- ============================================================
|
||||
-- 帽石系统 - 检测/考试记录表
|
||||
-- 适用数据库:MySQL 5.7+
|
||||
-- 字符集:utf8mb4(兼容中文与特殊符号)
|
||||
-- ============================================================
|
||||
|
||||
DROP TABLE IF EXISTS `t_capstone_exam`;
|
||||
|
||||
CREATE TABLE `t_capstone_exam` (
|
||||
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`candidate_id` VARCHAR(64) NOT NULL COMMENT '考生ID(由外部系统同步至对方系统,作为跨系统关联键)',
|
||||
`capstone_no` VARCHAR(64) NOT NULL COMMENT '帽石编号',
|
||||
`actual_position_x` DECIMAL(10,3) DEFAULT NULL COMMENT '实际位置 X(标准/目标坐标)',
|
||||
`actual_position_y` DECIMAL(10,3) DEFAULT NULL COMMENT '实际位置 Y(标准/目标坐标)',
|
||||
`measured_x` DECIMAL(10,3) DEFAULT NULL COMMENT '实测数据 X(考生实测坐标)',
|
||||
`measured_y` DECIMAL(10,3) DEFAULT NULL COMMENT '实测数据 Y(考生实测坐标)',
|
||||
`setter` VARCHAR(64) DEFAULT NULL COMMENT '出题人',
|
||||
`score` DECIMAL(6,2) DEFAULT NULL COMMENT '成绩',
|
||||
`exam_time` DATETIME NOT NULL COMMENT '考试时间',
|
||||
`qualified` TINYINT(1) NOT NULL DEFAULT '0' COMMENT '是否合格:0-不合格,1-合格',
|
||||
`sync_status` TINYINT(1) NOT NULL DEFAULT '0' COMMENT '同步状态:0-未同步,1-已同步(考生ID已同步至对方)',
|
||||
`remark` VARCHAR(255) DEFAULT NULL COMMENT '备注',
|
||||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
`del_flag` TINYINT(1) NOT NULL DEFAULT '0' COMMENT '删除标志:0-未删除,1-已删除',
|
||||
-- 位置偏差由“实测-实际”实时计算,不额外存储,避免数据不一致
|
||||
`deviation_x` DECIMAL(11,3) GENERATED ALWAYS AS (measured_x - actual_position_x) VIRTUAL COMMENT '位置偏差X(实测-实际)',
|
||||
`deviation_y` DECIMAL(11,3) GENERATED ALWAYS AS (measured_y - actual_position_y) VIRTUAL COMMENT '位置偏差Y(实测-实际)',
|
||||
PRIMARY KEY (`id`),
|
||||
-- 同一考生、同一帽石、同一次考试时间只允许一条记录,防止重复录入
|
||||
UNIQUE KEY `uk_candidate_capstone_time` (`candidate_id`, `capstone_no`, `exam_time`),
|
||||
KEY `idx_candidate` (`candidate_id`),
|
||||
KEY `idx_capstone` (`capstone_no`),
|
||||
KEY `idx_exam_time` (`exam_time`),
|
||||
KEY `idx_qualified` (`qualified`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='帽石系统检测/考试记录表';
|
||||
@@ -0,0 +1,155 @@
|
||||
# 帽石系统 - 数据表结构设计文档
|
||||
|
||||
> 适用数据库:MySQL 5.7+
|
||||
> 对应建表语句:`capstone_exam.sql`
|
||||
> 表名:`t_capstone_exam`
|
||||
|
||||
---
|
||||
|
||||
## 1. 业务背景
|
||||
|
||||
帽石系统用于记录考生对“帽石”进行检测/考试的全程数据。系统可提供的信息包括:
|
||||
|
||||
- 考生 ID(需同步给对方系统)
|
||||
- 帽石编号
|
||||
- 实际位置 XY(标准/目标坐标)
|
||||
- 实测数据 XY(考生现场实测坐标)
|
||||
- 出题人
|
||||
- 成绩
|
||||
- 考试时间
|
||||
- 是否合格
|
||||
|
||||
本设计围绕以上字段建立单表存储模型,并补充审计字段与同步状态字段,便于跨系统对接与运维。
|
||||
|
||||
---
|
||||
|
||||
## 2. 表结构字段说明
|
||||
|
||||
| 字段名 | 类型 | 允许空 | 默认值 | 说明 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| `id` | BIGINT | 否 | 自增 | 主键 ID |
|
||||
| `candidate_id` | VARCHAR(64) | 否 | - | 考生 ID(由外部系统同步至对方系统,作为跨系统关联键) |
|
||||
| `capstone_no` | VARCHAR(64) | 否 | - | 帽石编号 |
|
||||
| `actual_position_x` | DECIMAL(10,3) | 是 | NULL | 实际位置 X(标准/目标坐标) |
|
||||
| `actual_position_y` | DECIMAL(10,3) | 是 | NULL | 实际位置 Y(标准/目标坐标) |
|
||||
| `measured_x` | DECIMAL(10,3) | 是 | NULL | 实测数据 X(考生现场实测坐标) |
|
||||
| `measured_y` | DECIMAL(10,3) | 是 | NULL | 实测数据 Y(考生现场实测坐标) |
|
||||
| `setter` | VARCHAR(64) | 是 | NULL | 出题人 |
|
||||
| `score` | DECIMAL(6,2) | 是 | NULL | 成绩 |
|
||||
| `exam_time` | DATETIME | 否 | - | 考试时间 |
|
||||
| `qualified` | TINYINT(1) | 否 | 0 | 是否合格:0-不合格,1-合格 |
|
||||
| `sync_status` | TINYINT(1) | 否 | 0 | 同步状态:0-未同步,1-已同步(考生 ID 已同步至对方) |
|
||||
| `remark` | VARCHAR(255) | 是 | NULL | 备注 |
|
||||
| `create_time` | DATETIME | 否 | CURRENT_TIMESTAMP | 创建时间 |
|
||||
| `update_time` | DATETIME | 否 | CURRENT_TIMESTAMP(自动更新) | 更新时间 |
|
||||
| `del_flag` | TINYINT(1) | 否 | 0 | 删除标志:0-未删除,1-已删除(软删除) |
|
||||
| `deviation_x` | DECIMAL(11,3) | 是 | 派生 | **生成列**:位置偏差 X = `measured_x - actual_position_x` |
|
||||
| `deviation_y` | DECIMAL(11,3) | 是 | 派生 | **生成列**:位置偏差 Y = `measured_y - actual_position_y` |
|
||||
|
||||
### 坐标与偏差说明
|
||||
- “实际位置 XY”理解为标准/理论目标坐标;“实测数据 XY”为考生现场测得坐标。
|
||||
- `deviation_x / deviation_y` 用 **MySQL 5.7 生成列(VIRTUAL)** 实时计算 `实测 - 实际`,
|
||||
不占用额外存储空间,且不会出现“存了偏差却和原始值对不上”的不一致问题。
|
||||
- 坐标为 DECIMAL(10,3),如需更高精度(如亚毫米),可调整为 DECIMAL(12,4) 等。
|
||||
|
||||
---
|
||||
|
||||
## 3. 索引设计
|
||||
|
||||
| 索引名 | 字段 | 类型 | 作用 |
|
||||
| --- | --- | --- | --- |
|
||||
| `PRIMARY` | `id` | 主键 | 行唯一标识、聚簇索引 |
|
||||
| `uk_candidate_capstone_time` | `candidate_id`, `capstone_no`, `exam_time` | 唯一索引 | 防止同一考生在同一时间对同一帽石重复录入 |
|
||||
| `idx_candidate` | `candidate_id` | 普通索引 | 按考生维度查询/对账 |
|
||||
| `idx_capstone` | `capstone_no` | 普通索引 | 按帽石维度统计 |
|
||||
| `idx_exam_time` | `exam_time` | 普通索引 | 按考试时间区间检索 |
|
||||
| `idx_qualified` | `qualified` | 普通索引 | 合格/不合格快速筛选 |
|
||||
|
||||
> 说明:唯一索引包含 `exam_time`(NOT NULL),若业务允许“同一次考试多场次”,可将 `exam_time` 从唯一约束中移除或改为场次字段。
|
||||
|
||||
---
|
||||
|
||||
## 4. 关于“考生 ID 同步给对方”
|
||||
|
||||
- `candidate_id` 是外部系统(对方)的主键/唯一编号,**本表只引用、不生成**。
|
||||
- `sync_status` 标记该条记录的考生信息是否已成功同步至对方系统:
|
||||
- `0` = 未同步 / 同步中
|
||||
- `1` = 已同步
|
||||
- 建议同步任务:查询 `sync_status = 0 AND del_flag = 0` 的记录,调用对方接口同步,成功后置 `sync_status = 1`。
|
||||
|
||||
---
|
||||
|
||||
## 5. 常用操作示例
|
||||
|
||||
### 5.1 插入一条考试记录
|
||||
```sql
|
||||
INSERT INTO t_capstone_exam
|
||||
(candidate_id, capstone_no, actual_position_x, actual_position_y,
|
||||
measured_x, measured_y, setter, score, exam_time, qualified)
|
||||
VALUES
|
||||
('STD20260001', 'MS-1001', 12.500, 34.200, 12.480, 34.215,
|
||||
'张老师', 92.50, '2026-10-28 09:30:00', 1);
|
||||
```
|
||||
|
||||
### 5.2 查询某考生是否合格
|
||||
```sql
|
||||
SELECT capstone_no, score, qualified, exam_time
|
||||
FROM t_capstone_exam
|
||||
WHERE candidate_id = 'STD20260001' AND del_flag = 0
|
||||
ORDER BY exam_time DESC;
|
||||
```
|
||||
|
||||
### 5.3 统计合格/不合格人数
|
||||
```sql
|
||||
SELECT qualified, COUNT(*) AS cnt
|
||||
FROM t_capstone_exam
|
||||
WHERE del_flag = 0
|
||||
GROUP BY qualified;
|
||||
```
|
||||
|
||||
### 5.4 查询偏差较大的记录(实测偏离实际 > 0.1)
|
||||
```sql
|
||||
SELECT candidate_id, capstone_no,
|
||||
actual_position_x, actual_position_y,
|
||||
measured_x, measured_y,
|
||||
deviation_x, deviation_y
|
||||
FROM t_capstone_exam
|
||||
WHERE del_flag = 0
|
||||
AND (ABS(deviation_x) > 0.1 OR ABS(deviation_y) > 0.1);
|
||||
```
|
||||
|
||||
### 5.5 标记已同步至对方系统
|
||||
```sql
|
||||
UPDATE t_capstone_exam
|
||||
SET sync_status = 1
|
||||
WHERE id = 1;
|
||||
```
|
||||
|
||||
### 5.6 软删除(保留数据痕迹)
|
||||
```sql
|
||||
UPDATE t_capstone_exam
|
||||
SET del_flag = 1
|
||||
WHERE id = 1;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. 设计要点与扩展建议
|
||||
|
||||
1. **单表优先**:当前字段均为“一次考试一条记录”的扁平属性,单表即可满足,查询简单、易维护。
|
||||
2. **坐标拆分**:XY 拆成独立列而非合并字符串,便于数值计算、偏差统计与范围检索。
|
||||
3. **偏差用生成列**:避免冗余存储与数据不一致,MySQL 5.7 原生支持。
|
||||
4. **审计字段**:`create_time / update_time / del_flag` 遵循常规后台系统规范,利于排查与软删除。
|
||||
5. **可扩展方向**(按需追加):
|
||||
- 若帽石有独立属性(类型、规格、所属区段),可建 `t_capstone`(帽石主数据表),本表 `capstone_no` 作为外键引用;
|
||||
- 若需留存每次实测的原始报文/图片,可加 `raw_data` / `image_url` 字段或独立附件表;
|
||||
- 若成绩需要分项(理论分、实操分),可拆 `score` 为 `score_theory / score_practice`。
|
||||
|
||||
---
|
||||
|
||||
## 7. MySQL 5.7 兼容性确认
|
||||
|
||||
- `ENGINE=InnoDB` + `utf8mb4`:5.7 原生支持;
|
||||
- `DATETIME DEFAULT CURRENT_TIMESTAMP` 与 `ON UPDATE CURRENT_TIMESTAMP`:5.7 支持(5.6 仅 TIMESTAMP 默认可用,故此处用 DATETIME 更稳妥);
|
||||
- `GENERATED ALWAYS AS (...) VIRTUAL` 生成列:5.7 起支持;
|
||||
- `TINYINT(1)` 表示布尔:5.7 通用写法。
|
||||
Reference in new issue
Block a user