# 武术比赛管理系统 - 数据库字段检查报告

检查时间: 2025-11-29
检查人: Claude Code

## 检查方法
对比三个前端系统(martial-mini, martial-admin-mini, martial-web)的业务需求，检查数据库表字段是否完整。

---

## 1. martial_competition (赛事表) ✅ 完整

### 现有字段 (29个)
- ✅ id - 主键
- ✅ competition_name - 赛事名称
- ✅ competition_code - 赛事编码(裁判登录用)
- ✅ organizer - 主办单位
- ✅ location - 地区
- ✅ venue - 详细地点
- ✅ registration_start_time - 报名开始时间
- ✅ registration_end_time - 报名结束时间
- ✅ competition_start_time - 比赛开始时间
- ✅ competition_end_time - 比赛结束时间
- ✅ introduction - 赛事简介
- ✅ poster_images - 宣传图片(JSON)
- ✅ contact_person - 联系人
- ✅ contact_phone - 联系电话
- ✅ contact_email - 联系邮箱
- ✅ rules - 竞赛规则
- ✅ requirements - 参赛要求
- ✅ awards - 奖项设置
- ✅ regulation_files - 规程文件(JSON)
- ✅ total_participants - 报名总人数
- ✅ total_amount - 报名总金额
- ✅ status - 状态
- ✅ BladeX标准字段(8个)

### 前端需求对比
- martial-web/competition/create.vue (4步向导) - ✅ 所有字段齐全
- martial-mini/event-detail.vue - ✅ 所有字段齐全

### 结论: ✅ 无缺失字段

---

## 2. martial_athlete (参赛选手表) ⚠️ 需要补充

### 现有字段 (29个)
- ✅ id
- ✅ order_id - 订单ID
- ✅ competition_id - 赛事ID
- ✅ project_id - 项目ID
- ✅ player_name - 姓名
- ✅ player_no - 参赛编号
- ✅ gender - 性别
- ✅ age - 年龄
- ✅ id_card - 身份证号
- ✅ contact_phone - 联系电话
- ✅ organization - 所属单位
- ✅ team_name - 队伍名称
- ✅ category - 组别
- ✅ order_num - 出场顺序
- ✅ introduction - 选手简介
- ✅ attachments - 附件(JSON)
- ✅ photo_url - 照片
- ✅ registration_status - 报名状态
- ✅ competition_status - 比赛状态
- ✅ total_score - 总分
- ✅ ranking - 排名
- ✅ remark - 备注
- ✅ BladeX标准字段(7个)

### 前端需求对比
- martial-mini/add-player.vue - 需要添加选手
- martial-web/participant/manage.vue - 维护选手信息

### ⚠️ 发现问题
**问题1: 证件类型缺失**
前端可能需要支持多种证件(身份证、护照等)
- 建议添加: `id_card_type` int (1-身份证,2-护照,3-其他)

**问题2: 民族字段缺失**
武术比赛通常需要记录民族信息
- 建议添加: `nation` varchar(50) - 民族

**问题3: 出生日期缺失**
只有age字段,但前端可能需要精确的出生日期
- 建议添加: `birth_date` date - 出生日期

**问题4: 单位类别缺失**
前端显示"学校/单位",可能需要区分类型
- 建议添加: `organization_type` int (1-学校,2-协会,3-俱乐部,4-其他)

### 建议SQL
```sql
ALTER TABLE martial_athlete
ADD COLUMN id_card_type int DEFAULT 1 COMMENT '证件类型(1-身份证,2-护照,3-其他)' AFTER id_card,
ADD COLUMN nation varchar(50) DEFAULT NULL COMMENT '民族' AFTER age,
ADD COLUMN birth_date date DEFAULT NULL COMMENT '出生日期' AFTER age,
ADD COLUMN organization_type int DEFAULT 1 COMMENT '单位类别(1-学校,2-协会,3-俱乐部,4-其他)' AFTER organization;
```

---

## 3. martial_registration_order (报名订单表) ⚠️ 需要补充

### 现有字段 (22个)
- ✅ id
- ✅ order_no - 订单号
- ✅ competition_id - 赛事ID
- ✅ user_id - 用户ID
- ✅ user_name - 用户名
- ✅ contact_person - 联系人
- ✅ contact_phone - 联系电话
- ✅ organization - 所属单位
- ✅ total_participants - 参赛总人数
- ✅ total_amount - 订单总金额
- ✅ paid_amount - 已支付金额
- ✅ payment_method - 支付方式
- ✅ payment_time - 支付时间
- ✅ status - 状态
- ✅ remark - 备注
- ✅ BladeX标准字段(7个)

### 前端需求对比
- martial-mini/event-register.vue - 3步报名流程
- martial-web/order/list.vue - 订单管理

### ⚠️ 发现问题
**问题1: 支付交易号缺失**
需要记录第三方支付平台的交易号
- 建议添加: `transaction_no` varchar(100) - 支付交易号

**问题2: 退款信息缺失**
status=3表示已退款,但缺少退款详情
- 建议添加: `refund_amount` decimal(10,2) - 退款金额
- 建议添加: `refund_time` datetime - 退款时间
- 建议添加: `refund_reason` varchar(500) - 退款原因

**问题3: 发票信息缺失**
企业单位报名可能需要发票
- 建议添加: `invoice_type` int - 发票类型(0-不需要,1-普通,2-增值税)
- 建议添加: `invoice_title` varchar(200) - 发票抬头
- 建议添加: `invoice_tax_no` varchar(50) - 税号

### 建议SQL
```sql
ALTER TABLE martial_registration_order
ADD COLUMN transaction_no varchar(100) DEFAULT NULL COMMENT '支付交易号' AFTER payment_time,
ADD COLUMN refund_amount decimal(10,2) DEFAULT 0.00 COMMENT '退款金额' AFTER paid_amount,
ADD COLUMN refund_time datetime DEFAULT NULL COMMENT '退款时间' AFTER payment_time,
ADD COLUMN refund_reason varchar(500) DEFAULT NULL COMMENT '退款原因' AFTER refund_time,
ADD COLUMN invoice_type int DEFAULT 0 COMMENT '发票类型(0-不需要,1-普通,2-增值税)' AFTER organization,
ADD COLUMN invoice_title varchar(200) DEFAULT NULL COMMENT '发票抬头' AFTER invoice_type,
ADD COLUMN invoice_tax_no varchar(50) DEFAULT NULL COMMENT '税号' AFTER invoice_title;
```

---

## 4. martial_score (评分表) ⚠️ 需要补充

### 现有字段 (19个)
- ✅ id
- ✅ competition_id - 赛事ID
- ✅ athlete_id - 选手ID
- ✅ project_id - 项目ID
- ✅ schedule_id - 赛程ID
- ✅ judge_id - 裁判ID
- ✅ judge_name - 裁判姓名
- ✅ score - 评分
- ✅ deduction_items - 扣分项(JSON)
- ✅ note - 备注
- ✅ score_time - 评分时间
- ✅ status - 状态
- ✅ BladeX标准字段(7个)

### 前端需求对比
- martial-admin-mini/score-detail.vue - 评分详情
- martial-web/score/index.vue - 评分管理

### ⚠️ 发现问题
**问题1: 场地ID缺失**
评分时需要知道是在哪个场地评的
- 建议添加: `venue_id` bigint - 场地ID

**问题2: 修改历史缺失**
status=2表示已修改,但没有记录原始分数
- 建议添加: `original_score` decimal(10,3) - 原始评分
- 建议添加: `modify_reason` varchar(500) - 修改原因
- 建议添加: `modify_time` datetime - 修改时间

**问题3: IP地址缺失**
安全审计需要
- 建议添加: `ip_address` varchar(50) - 评分IP地址

### 建议SQL
```sql
ALTER TABLE martial_score
ADD COLUMN venue_id bigint DEFAULT NULL COMMENT '场地ID' AFTER schedule_id,
ADD COLUMN original_score decimal(10,3) DEFAULT NULL COMMENT '原始评分' AFTER score,
ADD COLUMN modify_reason varchar(500) DEFAULT NULL COMMENT '修改原因' AFTER note,
ADD COLUMN modify_time datetime DEFAULT NULL COMMENT '修改时间' AFTER score_time,
ADD COLUMN ip_address varchar(50) DEFAULT NULL COMMENT '评分IP地址' AFTER modify_time,
ADD INDEX idx_venue (venue_id);
```

---

## 5. martial_judge (裁判表) ✅ 完整

### 现有字段 (18个)
- ✅ id
- ✅ name - 姓名
- ✅ gender - 性别
- ✅ phone - 手机号
- ✅ id_card - 身份证号
- ✅ referee_type - 裁判类型
- ✅ level - 等级职称
- ✅ specialty - 擅长项目
- ✅ photo_url - 照片
- ✅ remark - 备注
- ✅ status - 状态
- ✅ BladeX标准字段(7个)

### 前端需求对比
- martial-admin-mini/login.vue - 裁判登录
- martial-web/referee/list.vue - 裁判管理

### 结论: ✅ 无缺失字段

---

## 6. martial_judge_invite (裁判邀请码表) ⚠️ 需要补充

### 现有字段 (15个)
- ✅ id
- ✅ competition_id - 赛事ID
- ✅ judge_id - 裁判ID
- ✅ invite_code - 邀请码
- ✅ role - 角色
- ✅ venue_id - 场地ID
- ✅ projects - 项目(JSON)
- ✅ expire_time - 过期时间
- ✅ is_used - 是否已使用
- ✅ use_time - 使用时间
- ✅ status - 状态
- ✅ BladeX标准字段(4个)

### ⚠️ 发现问题
**问题1: 使用设备信息缺失**
需要记录裁判登录的设备信息
- 建议添加: `device_info` varchar(500) - 设备信息
- 建议添加: `login_ip` varchar(50) - 登录IP

**问题2: Token缺失**
裁判登录后需要保存token
- 建议添加: `access_token` varchar(500) - 访问令牌
- 建议添加: `token_expire_time` datetime - token过期时间

### 建议SQL
```sql
ALTER TABLE martial_judge_invite
ADD COLUMN device_info varchar(500) DEFAULT NULL COMMENT '设备信息' AFTER use_time,
ADD COLUMN login_ip varchar(50) DEFAULT NULL COMMENT '登录IP' AFTER device_info,
ADD COLUMN access_token varchar(500) DEFAULT NULL COMMENT '访问令牌' AFTER login_ip,
ADD COLUMN token_expire_time datetime DEFAULT NULL COMMENT 'token过期时间' AFTER access_token;
```

---

## 7. martial_schedule (赛程编排表) ✅ 基本完整

### 现有字段 (24个)
- ✅ id
- ✅ competition_id - 赛事ID
- ✅ order_id - 订单ID
- ✅ group_title - 分组标题
- ✅ group_code - 分组编码
- ✅ group_type - 分组类型
- ✅ venue_id - 场地ID
- ✅ project_id - 项目ID
- ✅ schedule_date - 比赛日期
- ✅ time_slot - 时间段
- ✅ start_time - 开始时间
- ✅ end_time - 结束时间
- ✅ participant_count - 参赛数量
- ✅ estimated_duration - 预估时长
- ✅ is_confirmed - 是否已确认
- ✅ status - 状态
- ✅ remark - 备注
- ✅ BladeX标准字段(7个)

### 前端需求对比
- martial-web/schedule/list.vue - 赛程编排
- martial-web/dispatch/list.vue - 赛程调度

### 结论: ✅ 无缺失字段

---

## 8. martial_result (成绩表) ⚠️ 需要补充

### 现有字段 (21个)
- ✅ id
- ✅ competition_id - 赛事ID
- ✅ athlete_id - 选手ID
- ✅ project_id - 项目ID
- ✅ venue_id - 场地ID
- ✅ player_name - 选手姓名
- ✅ team_name - 队伍名称
- ✅ total_score - 总分
- ✅ original_score - 原始总分
- ✅ adjusted_score - 调整后总分
- ✅ adjust_range - 允许调整范围
- ✅ adjust_note - 调整说明
- ✅ ranking - 排名
- ✅ medal - 奖牌
- ✅ is_final - 是否最终成绩
- ✅ publish_time - 发布时间
- ✅ BladeX标准字段(6个)

### ⚠️ 发现问题
**问题1: 去掉最高最低分的记录缺失**
体育比赛常用规则
- 建议添加: `max_score` decimal(10,3) - 最高分
- 建议添加: `min_score` decimal(10,3) - 最低分
- 建议添加: `valid_score_count` int - 有效评分数

**问题2: 难度系数缺失**
某些项目可能有难度系数
- 建议添加: `difficulty_coefficient` decimal(5,2) - 难度系数
- 建议添加: `final_score` decimal(10,3) - 最终得分(总分*系数)

### 建议SQL
```sql
ALTER TABLE martial_result
ADD COLUMN max_score decimal(10,3) DEFAULT NULL COMMENT '最高分' AFTER total_score,
ADD COLUMN min_score decimal(10,3) DEFAULT NULL COMMENT '最低分' AFTER max_score,
ADD COLUMN valid_score_count int DEFAULT 0 COMMENT '有效评分数' AFTER min_score,
ADD COLUMN difficulty_coefficient decimal(5,2) DEFAULT 1.00 COMMENT '难度系数' AFTER adjusted_score,
ADD COLUMN final_score decimal(10,3) DEFAULT NULL COMMENT '最终得分' AFTER difficulty_coefficient;
```

---

## 9. martial_project (比赛项目表) ⚠️ 需要补充

### 现有字段 (20个)
- ✅ id
- ✅ competition_id - 赛事ID
- ✅ project_name - 项目名称
- ✅ project_code - 项目编码
- ✅ category - 组别
- ✅ type - 类型
- ✅ min_participants - 最少人数
- ✅ max_participants - 最多人数
- ✅ estimated_duration - 预估时长
- ✅ price - 报名费
- ✅ description - 描述
- ✅ sort_order - 排序
- ✅ status - 状态
- ✅ BladeX标准字段(7个)

### ⚠️ 发现问题
**问题1: 年龄限制缺失**
不同项目可能有年龄要求
- 建议添加: `min_age` int - 最小年龄
- 建议添加: `max_age` int - 最大年龄

**问题2: 性别限制缺失**
- 建议添加: `gender_limit` int - 性别限制(0-不限,1-仅男,2-仅女)

**问题3: 报名截止时间缺失**
每个项目可能有独立的报名截止时间
- 建议添加: `registration_deadline` datetime - 报名截止时间

### 建议SQL
```sql
ALTER TABLE martial_project
ADD COLUMN min_age int DEFAULT NULL COMMENT '最小年龄' AFTER max_participants,
ADD COLUMN max_age int DEFAULT NULL COMMENT '最大年龄' AFTER min_age,
ADD COLUMN gender_limit int DEFAULT 0 COMMENT '性别限制(0-不限,1-仅男,2-仅女)' AFTER max_age,
ADD COLUMN registration_deadline datetime DEFAULT NULL COMMENT '报名截止时间' AFTER price;
```

---

## 10. martial_venue (场地表) ✅ 完整

### 现有字段 (12个)
- ✅ id
- ✅ competition_id
- ✅ venue_name
- ✅ venue_code
- ✅ location
- ✅ capacity
- ✅ facilities
- ✅ status
- ✅ BladeX标准字段(7个)

### 结论: ✅ 无缺失字段

---

## 11. martial_banner (轮播图表) ⚠️ 需要补充

### 现有字段 (12个)
- ✅ id
- ✅ title - 标题
- ✅ image_url - 图片URL
- ✅ link_url - 跳转链接
- ✅ sort_order - 排序
- ✅ status - 状态
- ✅ BladeX标准字段(7个)

### ⚠️ 发现问题
**问题1: 显示位置缺失**
轮播图可能用于不同位置
- 建议添加: `position` int - 显示位置(1-首页,2-赛事详情,3-其他)

**问题2: 有效期缺失**
轮播图可能需要定时上下架
- 建议添加: `start_time` datetime - 开始显示时间
- 建议添加: `end_time` datetime - 结束显示时间

**问题3: 点击统计缺失**
- 建议添加: `click_count` int - 点击次数

### 建议SQL
```sql
ALTER TABLE martial_banner
ADD COLUMN position int DEFAULT 1 COMMENT '显示位置(1-首页,2-赛事详情,3-其他)' AFTER title,
ADD COLUMN start_time datetime DEFAULT NULL COMMENT '开始显示时间' AFTER sort_order,
ADD COLUMN end_time datetime DEFAULT NULL COMMENT '结束显示时间' AFTER start_time,
ADD COLUMN click_count int DEFAULT 0 COMMENT '点击次数' AFTER end_time;
```

---

## 12. martial_info_publish (信息发布表) ⚠️ 需要补充

### 现有字段 (15个)
- ✅ id
- ✅ competition_id
- ✅ title - 标题
- ✅ info_type - 信息类型
- ✅ content - 内容
- ✅ images - 图片
- ✅ publish_time - 发布时间
- ✅ is_published - 是否已发布
- ✅ sort_order - 排序
- ✅ status - 状态
- ✅ BladeX标准字段(6个)

### ⚠️ 发现问题
**问题1: 阅读统计缺失**
- 建议添加: `view_count` int - 阅读次数

**问题2: 附件支持缺失**
除了图片,可能需要上传PDF等文件
- 建议添加: `attachments` varchar(1000) - 附件(JSON)

**问题3: 发布人信息缺失**
- 建议添加: `publisher_name` varchar(50) - 发布人姓名

### 建议SQL
```sql
ALTER TABLE martial_info_publish
ADD COLUMN view_count int DEFAULT 0 COMMENT '阅读次数' AFTER sort_order,
ADD COLUMN attachments varchar(1000) DEFAULT NULL COMMENT '附件(JSON)' AFTER images,
ADD COLUMN publisher_name varchar(50) DEFAULT NULL COMMENT '发布人姓名' AFTER publish_time;
```

---

## 13. martial_live_update (比赛实况表) ✅ 基本完整

### 现有字段 (15个)
- ✅ id
- ✅ competition_id
- ✅ schedule_id
- ✅ athlete_id
- ✅ update_type - 实况类型
- ✅ title - 标题
- ✅ content - 内容
- ✅ images - 图片
- ✅ score_info - 比分信息
- ✅ update_time - 更新时间
- ✅ sort_order - 排序
- ✅ BladeX标准字段(5个)

### 结论: ✅ 无缺失字段

---

## 14. martial_activity_schedule (活动日程表) ✅ 完整

### 现有字段 (15个)
- ✅ id
- ✅ competition_id
- ✅ schedule_date
- ✅ schedule_time
- ✅ event_name
- ✅ venue
- ✅ description
- ✅ remark
- ✅ sort_order
- ✅ status
- ✅ BladeX标准字段(6个)

### 结论: ✅ 无缺失字段

---

## 15. martial_deduction_item (扣分项表) ✅ 完整

### 现有字段 (14个)
- ✅ id
- ✅ item_name
- ✅ item_code
- ✅ deduction_point
- ✅ category
- ✅ applicable_projects
- ✅ description
- ✅ sort_order
- ✅ status
- ✅ BladeX标准字段(6个)

### 结论: ✅ 无缺失字段

---

## 16. martial_schedule_athlete (选手赛程关联表) ✅ 完整

### 现有字段 (12个)
- ✅ id
- ✅ schedule_id
- ✅ athlete_id
- ✅ competition_id
- ✅ order_num
- ✅ is_completed
- ✅ is_refereed
- ✅ BladeX标准字段(6个)

### 结论: ✅ 无缺失字段

---

## 总结

### ✅ 完整的表 (9个)
1. martial_competition
2. martial_judge
3. martial_schedule
4. martial_venue
5. martial_live_update
6. martial_activity_schedule
7. martial_deduction_item
8. martial_schedule_athlete

### ⚠️ 需要补充的表 (7个)
1. martial_athlete - 建议添加4个字段
2. martial_registration_order - 建议添加7个字段
3. martial_score - 建议添加5个字段
4. martial_result - 建议添加5个字段
5. martial_project - 建议添加4个字段
6. martial_banner - 建议添加4个字段
7. martial_info_publish - 建议添加3个字段
8. martial_judge_invite - 建议添加4个字段

### 统计
- **总表数**: 16个
- **完整表**: 8个 (50%)
- **需补充表**: 8个 (50%)
- **建议新增字段总数**: 36个

### 优先级建议

#### 🔴 高优先级(必须添加)
1. **martial_score** - 添加venue_id(评分必须知道场地)
2. **martial_registration_order** - 添加transaction_no(支付必须有交易号)
3. **martial_athlete** - 添加birth_date(年龄验证需要)

#### 🟡 中优先级(建议添加)
1. **martial_result** - 添加max_score, min_score(去掉最高最低分规则)
2. **martial_project** - 添加age/gender限制(报名验证需要)
3. **martial_judge_invite** - 添加token相关字段(登录认证需要)

#### 🟢 低优先级(可选添加)
1. **martial_banner** - 添加统计字段
2. **martial_info_publish** - 添加阅读统计
3. **martial_athlete** - 添加民族等非必需字段

---

## 完整修复SQL

见下一部分的完整SQL脚本。

