Files
xlxumu/backend/database/DESIGN.md
mapleaf 47c67ff704 docs(database): 更新数据库设计规范和核心数据表结构
- 新增数据库基础规范、API映射规范、安全规范等详细设计要求- 增加读写分离、分库分表、数据生命周期管理等策略说明
- 新建核心业务表结构,包括用户表、贷款申请表、保险申请表等
- 优化索引设计,提高查询效率
2025-08-19 22:04:18 +08:00

51 KiB
Raw Blame History

数据库详细设计

概述

本项目使用MySQL作为主要的关系型数据库存储用户信息、牛只档案、交易记录、监管数据等核心业务数据。

数据库设计规范

1. 基础规范

条目 规范说明
存储引擎 InnoDB支持事务和行级锁
字符集 utf8mb4支持完整Unicode包括emoji
主键设计 自增BIGINT UNSIGNED禁止使用业务字段
时间字段 必须包含created_at(DEFAULT CURRENT_TIMESTAMP)和updated_at(ON UPDATE)
命名规则 表名复数形式users字段名下划线分隔user_name

2. API映射规范

API字段类型 数据库实现
字符串 VARCHAR(长度根据API校验规则定义)
枚举值 ENUM类型或TINYINT+注释说明
嵌套对象 JSON类型或关联表
文件资源 存储OSS路径VARCHAR(255)

3. 安全规范

数据类型 处理方式
密码 BCrypt哈希存储
身份证号 AES-256加密
手机号 脱敏存储保留前3后4
审计字段 必须包含操作人ID和IP地址

4. 性能规范

场景 优化策略 适用API端点示例
高频查询 组合索引覆盖查询路径 GET /api/v1/orders
大文本 单独分表+OSS存储product_descriptions POST /api/v1/products
状态字段 使用TINYINT+状态字典表(便于索引和扩展) PUT /api/v1/orders/{id}
批量操作 提供batch_前缀的专用表+异步处理机制 POST /api/v1/batch
分页查询 基于游标的分页避免OFFSET性能问题 GET /api/v1/history

5. API字段映射规范

API字段 数据库字段 类型 校验规则 备注
user.name user_name VARCHAR(50) 必填中文2-20字符 显示名
user.phone phone VARCHAR(20) 必填,正则校验^1[3-9]\d{9}$ AES加密存储
order.status status TINYINT 1-5枚举值 关联status_dict表
product.detail detail_text TEXT 可选≤2000字符 存OSS链接时此字段为空

6. 状态机设计

业务模块 状态流转规则 触发API
订单系统 待支付→已支付→配送中→已完成(不可逆) PUT /api/v1/orders
审批流程 草稿→审批中→已通过/已驳回(可重新提交) POST /api/v1/approvals
养殖档案 未认证→认证中→已认证(管理员可重置) PATCH /api/v1/farms

分库分表策略

1. 垂直分库

业务模块 数据库实例 分库依据
用户中心 db_user 所有用户相关表
交易系统 db_trade 订单/支付/物流相关表
政府监管 db_gov 防疫/补贴/检疫相关表

2. 水平分表

  • 触发条件:单表数据量 ≥ 500万行
  • 分表规则
    • 用户表按用户ID取模16张
    • 订单表:按创建月份分表(按月归档)
  • 路由策略ShardingSphere中间件

3. 扩容预案

  • 垂直扩容升级服务器配置CPU/内存)
  • 水平扩容:增加分片数量(需停服迁移)

读写分离设计

1. 节点角色

节点类型 数量 作用域 同步方式
主库 1 全业务写操作 半同步复制
从库1 2 交易业务读查询 异步复制
从库2 1 数据分析类查询 延迟复制1小时

2. 故障转移

  • 主库宕机VIP漂移+从库升主30秒内完成
  • 从库延迟:自动路由到低延迟节点

数据生命周期管理

1. 冷热分离

  • 热数据当前业务周期数据保留6个月
  • 冷数据历史数据OSS归档存储

2. 归档规则

  • 触发条件:数据创建时间 ≥ 1年
  • 归档方式
    • 结构化数据Parquet格式压缩
    • 图片/文件OSS低频访问存储

性能优化

1. 缓存策略

  • 查询缓存Redis集群LRU淘汰策略
  • 更新机制
    • 写穿透Write-Through
    • 缓存失效Cache Aside

2. 连接池配置

  • 最大连接数CPU核心数 × 2 + 有效磁盘数
  • 验证查询SELECT 1每5分钟

灾备方案

1. 跨机房同步

  • 拓扑结构:主-备-灾备(三机房部署)
  • 同步延迟:≤ 5分钟专线保障

2. 恢复SLA

故障级别 RTO RPO
P0 ≤ 15分钟 ≤ 1分钟
P1 ≤ 1小时 ≤ 5分钟

监控指标

1. 性能看板

  • QPS/TPSPrometheus + Grafana
  • 慢查询每10分钟采样分析

2. 容量预测

  • 增长模型:线性回归(基于历史数据)
  • 预警阈值:存储使用率 ≥ 75%

索引优化建议

  • 高频查询字段必须加索引
  • 联合索引遵循最左匹配原则
  • 定期使用EXPLAIN分析慢查询

核心数据表设计

1. 用户表 (users)

存储系统用户信息,包括牧民、银行职员、保险员、政府监管人员等。

CREATE TABLE users (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '用户ID',
    username VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名(用于登录)',
    email VARCHAR(100) UNIQUE COMMENT '邮箱(用于通知和找回密码)',
    phone VARCHAR(20) UNIQUE COMMENT '手机号(实名认证用)',
    password_hash VARCHAR(255) NOT NULL COMMENT '密码哈希值BCrypt加密',
    real_name VARCHAR(50) COMMENT '真实姓名(需与身份证一致)',
    avatar_url VARCHAR(255) COMMENT '头像URLOSS存储路径',
    user_type ENUM('farmer', 'banker', 'insurer', 'government', 'trader', 'admin') NOT NULL COMMENT '用户类型:牧民/银行职员/保险员/政府人员/交易员/管理员',
    status TINYINT DEFAULT 1 COMMENT '状态: 1-正常, 0-禁用(禁用用户无法登录)',
    last_login TIMESTAMP NULL COMMENT '最后登录时间(用于活跃度分析)',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间(不可修改)',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间(自动维护)',
    INDEX idx_user_type (user_type) COMMENT '按用户类型加速查询'

2. 金融业务表

2.1 贷款申请表 (loan_applications)

CREATE TABLE loan_applications (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    farmer_id BIGINT UNSIGNED NOT NULL COMMENT '牧户ID',
    loan_amount DECIMAL(15,2) NOT NULL COMMENT '申请金额',
    risk_score TINYINT COMMENT '风控评分(1-100)',
    collateral_type ENUM('cattle', 'land', 'equipment') COMMENT '抵押物类型',
    status ENUM('pending', 'approved', 'rejected') DEFAULT 'pending',
    FOREIGN KEY (farmer_id) REFERENCES users(id),
    INDEX idx_status (status)
);

2.2 保险保单表 (insurance_policies)

CREATE TABLE insurance_policies (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    cattle_id BIGINT UNSIGNED NOT NULL COMMENT '牛只ID',
    disaster_type ENUM('drought', 'blizzard', 'epidemic') NOT NULL,
    coverage_amount DECIMAL(15,2) NOT NULL,
    start_date DATE NOT NULL,
    end_date DATE NOT NULL,
    INDEX idx_coverage (coverage_amount)
);

3. 政府监管表

3.1 防疫任务表 (quarantine_tasks)

CREATE TABLE quarantine_tasks (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    location POINT NOT NULL COMMENT 'GPS坐标',
    inspector_id BIGINT UNSIGNED NOT NULL COMMENT '检疫员ID',
    completion_status BOOLEAN DEFAULT FALSE,
    SPATIAL INDEX (location),
    FOREIGN KEY (inspector_id) REFERENCES users(id)
);

3.2 补贴发放表 (subsidies)

CREATE TABLE subsidies (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    farmer_id BIGINT UNSIGNED NOT NULL,
    balance_score TINYINT NOT NULL COMMENT '草畜平衡评分(1-100)',
    amount DECIMAL(15,2) NOT NULL,
    payment_date DATE NOT NULL,
    FOREIGN KEY (farmer_id) REFERENCES users(id)
);

4. 数据中台表

4.1 数据血缘表 (data_lineage)

CREATE TABLE data_lineage (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    source_table VARCHAR(100) NOT NULL,
    source_field VARCHAR(100) NOT NULL,
    target_table VARCHAR(100) NOT NULL,
    target_field VARCHAR(100) NOT NULL,
    transformation_rule TEXT COMMENT '转换规则SQL片段',
    UNIQUE KEY (source_table, source_field, target_table, target_field)
);

4.2 接口审计表 (api_audit_logs)

CREATE TABLE api_audit_logs (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    user_id BIGINT UNSIGNED,
    endpoint VARCHAR(255) NOT NULL,
    request_params JSON,
    sensitive_data BOOLEAN DEFAULT FALSE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id)
);

5. AI模型表

5.1 体况评分表 (body_condition_scores)

CREATE TABLE body_condition_scores (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    cattle_id BIGINT UNSIGNED NOT NULL,
    score TINYINT NOT NULL COMMENT '体况评分(1-5)',
    muscle_score TINYINT COMMENT '肌肉发育评分',
    fat_score TINYINT COMMENT '脂肪覆盖评分',
    photo_url VARCHAR(255) COMMENT '评分照片URL',
    FOREIGN KEY (cattle_id) REFERENCES cattle(id)
);

5.2 饲料配方表 (feed_formulas)

CREATE TABLE feed_formulas (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    version VARCHAR(50) NOT NULL COMMENT '配方版本',
    stage ENUM('calf', 'growing', 'fattening') NOT NULL,
    ingredients JSON NOT NULL COMMENT '原料配比',
    cost_per_kg DECIMAL(10,2) NOT NULL,
    is_active BOOLEAN DEFAULT TRUE COMMENT '是否当前使用版本',
    UNIQUE KEY (version, stage)
);
);

-- 常用查询示例:
-- 1. 按用户类型统计数量
-- SELECT user_type, COUNT(*) FROM users GROUP BY user_type;
-- 2. 查询最近登录的活跃用户
-- SELECT * FROM users WHERE last_login > DATE_SUB(NOW(), INTERVAL 7 DAY);

### 2. 贷款申请表 (loan_applications)
存储贷款申请信息,包括申请人、贷款金额、用途等。

```sql
CREATE TABLE loan_applications (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '申请ID',
    user_id BIGINT UNSIGNED NOT NULL COMMENT '申请人ID关联users表',
    amount DECIMAL(15,2) NOT NULL COMMENT '贷款金额(单位:元,精确到分)',
    purpose VARCHAR(255) NOT NULL COMMENT '贷款用途(如:购买饲料、扩建牛舍)',
    status ENUM('pending', 'approved', 'rejected', 'disbursed') DEFAULT 'pending' COMMENT '状态:待审批/已通过/已拒绝/已放款',
    application_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '申请日期(自动记录)',
    approval_date TIMESTAMP NULL COMMENT '审批日期(审批通过时更新)',
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE COMMENT '级联删除用户时同步清理',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    INDEX idx_status (status) COMMENT '加速状态筛选',
    INDEX idx_user_id (user_id) COMMENT '加速申请人查询'
);

-- 常用查询示例:
-- 1. 按状态统计贷款申请
-- SELECT status, COUNT(*) FROM loan_applications GROUP BY status;
-- 2. 查询某用户的贷款历史
-- SELECT * FROM loan_applications WHERE user_id = 123 ORDER BY application_date DESC;

### 3. 质押物监控表 (collateral_monitoring)
存储质押物(牛只)的状态监控信息。

```sql
CREATE TABLE collateral_monitoring (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '监控ID',
    loan_id BIGINT UNSIGNED NOT NULL COMMENT '关联贷款ID',
    cattle_id BIGINT UNSIGNED NOT NULL COMMENT '质押牛只ID',
    health_status VARCHAR(100) NOT NULL COMMENT '健康状况',
    location VARCHAR(255) NOT NULL COMMENT '当前位置',
    last_check_date TIMESTAMP NULL COMMENT '最后检查日期',
    FOREIGN KEY (loan_id) REFERENCES loan_applications(id),
    FOREIGN KEY (cattle_id) REFERENCES cattle(id),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
);

4. 还款计划表 (repayment_schedules)

存储贷款的还款计划信息。

CREATE TABLE repayment_schedules (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '计划ID',
    loan_id BIGINT UNSIGNED NOT NULL COMMENT '关联贷款ID',
    due_date TIMESTAMP NOT NULL COMMENT '还款日期',
    amount DECIMAL(15,2) NOT NULL COMMENT '还款金额',
    status ENUM('pending', 'paid', 'overdue') DEFAULT 'pending' COMMENT '状态',
    payment_date TIMESTAMP NULL COMMENT '实际还款日期',
    FOREIGN KEY (loan_id) REFERENCES loan_applications(id),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
);

5. 保险申请表 (insurance_applications)

存储保险申请信息。

CREATE TABLE insurance_applications (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '申请ID',
    user_id BIGINT UNSIGNED NOT NULL COMMENT '申请人ID',
    cattle_id BIGINT UNSIGNED NOT NULL COMMENT '投保牛只ID',
    coverage_amount DECIMAL(15,2) NOT NULL COMMENT '保额',
    premium DECIMAL(15,2) NOT NULL COMMENT '保费',
    start_date TIMESTAMP NOT NULL COMMENT '保险开始日期',
    end_date TIMESTAMP NOT NULL COMMENT '保险结束日期',
    status ENUM('pending', 'approved', 'rejected', 'active', 'expired') DEFAULT 'pending' COMMENT '状态',
    FOREIGN KEY (user_id) REFERENCES users(id),
    FOREIGN KEY (cattle_id) REFERENCES cattle(id),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
);

6. 理赔记录表 (claim_records)

存储保险理赔记录。

CREATE TABLE claim_records (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '理赔ID',
    insurance_id BIGINT UNSIGNED NOT NULL COMMENT '关联保险ID',
    claim_amount DECIMAL(15,2) NOT NULL COMMENT '理赔金额',
    claim_reason VARCHAR(255) NOT NULL COMMENT '理赔原因',
    status ENUM('pending', 'approved', 'rejected', 'paid') DEFAULT 'pending' COMMENT '状态',
    approval_date TIMESTAMP NULL COMMENT '审批日期',
    payment_date TIMESTAMP NULL COMMENT '支付日期',
    FOREIGN KEY (insurance_id) REFERENCES insurance_applications(id),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
);

7. 风险评估表 (risk_assessments)

存储保险风险评估信息。

CREATE TABLE risk_assessments (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '评估ID',
    insurance_id BIGINT UNSIGNED NOT NULL COMMENT '关联保险ID',
    risk_level ENUM('low', 'medium', 'high') NOT NULL COMMENT '风险等级',
    assessment_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '评估日期',
    notes TEXT COMMENT '评估备注',
    FOREIGN KEY (insurance_id) REFERENCES insurance_applications(id),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
);

8. 监管记录表 (supervision_records)

存储政府监管记录。

CREATE TABLE supervision_records (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '记录ID',
    user_id BIGINT UNSIGNED NOT NULL COMMENT '监管人员ID',
    cattle_id BIGINT UNSIGNED NOT NULL COMMENT '监管牛只ID',
    inspection_date TIMESTAMP NOT NULL COMMENT '检查日期',
    findings TEXT NOT NULL COMMENT '检查结果',
    actions_taken TEXT COMMENT '采取的措施',
    FOREIGN KEY (user_id) REFERENCES users(id),
    FOREIGN KEY (cattle_id) REFERENCES cattle(id),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
);
INDEX idx_username (username),
INDEX idx_email (email),
INDEX idx_phone (phone),
INDEX idx_user_type (user_type)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';


### 2. 角色表 (roles)
存储系统角色信息,如管理员、牧民、银行职员等。

```sql
CREATE TABLE roles (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '角色ID',
    name VARCHAR(50) NOT NULL UNIQUE COMMENT '角色名称',
    description TEXT COMMENT '角色描述',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色表';

3. 用户角色关联表 (user_roles)

存储用户和角色的多对多关系。

CREATE TABLE user_roles (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
    user_id BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
    role_id INT UNSIGNED NOT NULL COMMENT '角色ID',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
    FOREIGN KEY (role_id) REFERENCES roles(id) ON DELETE CASCADE,
    UNIQUE KEY uk_user_role (user_id, role_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户角色关联表';

4. 权限表 (permissions)

存储系统权限信息。

CREATE TABLE permissions (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '权限ID',
    name VARCHAR(100) NOT NULL UNIQUE COMMENT '权限名称',
    description TEXT COMMENT '权限描述',
    module VARCHAR(50) COMMENT '所属模块',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='权限表';

5. 角色权限关联表 (role_permissions)

存储角色和权限的多对多关系。

CREATE TABLE role_permissions (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
    role_id INT UNSIGNED NOT NULL COMMENT '角色ID',
    permission_id INT UNSIGNED NOT NULL COMMENT '权限ID',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    
    FOREIGN KEY (role_id) REFERENCES roles(id) ON DELETE CASCADE,
    FOREIGN KEY (permission_id) REFERENCES permissions(id) ON DELETE CASCADE,
    UNIQUE KEY uk_role_permission (role_id, permission_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色权限关联表';

6. 牛只档案表 (cattle)

存储牛只基本信息,包括品种、年龄、健康状况等。

CREATE TABLE cattle (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '牛只ID',
    ear_tag VARCHAR(50) NOT NULL UNIQUE COMMENT '耳标号',
    name VARCHAR(50) COMMENT '名称',
    breed VARCHAR(50) COMMENT '品种',
    gender ENUM('male', 'female') COMMENT '性别',
    birth_date DATE COMMENT '出生日期',
    color VARCHAR(30) COMMENT '毛色',
    weight DECIMAL(5,2) COMMENT '体重(kg)',
    health_status ENUM('healthy', 'sick', 'quarantine', 'dead') DEFAULT 'healthy' COMMENT '健康状况',
    owner_id BIGINT UNSIGNED COMMENT '所有者ID牧民',
    farm_location VARCHAR(255) COMMENT '牧场位置',
    status ENUM('active', 'sold', 'dead', 'quarantine') DEFAULT 'active' COMMENT '状态',
    image_url VARCHAR(255) COMMENT '图片URL',
    qr_code_url VARCHAR(255) COMMENT '二维码URL',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    
    FOREIGN KEY (owner_id) REFERENCES users(id) ON DELETE SET NULL,
    INDEX idx_ear_tag (ear_tag),
    INDEX idx_owner (owner_id),
    INDEX idx_breed (breed),
    INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='牛只档案表';

7. 饲养记录表 (feeding_records)

存储牛只饲养记录,包括饲料、疫苗、治疗等信息。

CREATE TABLE feeding_records (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '记录ID',
    cattle_id BIGINT UNSIGNED NOT NULL COMMENT '牛只ID',
    record_type ENUM('feed', 'vaccine', 'treatment', 'checkup') NOT NULL COMMENT '记录类型: 饲料, 疫苗, 治疗, 检查',
    feed_type VARCHAR(100) COMMENT '饲料类型',
    feed_amount DECIMAL(6,2) COMMENT '饲料量(kg)',
    vaccine_name VARCHAR(100) COMMENT '疫苗名称',
    treatment_desc TEXT COMMENT '治疗描述',
    medicine_name VARCHAR(100) COMMENT '药品名称',
    dosage VARCHAR(100) COMMENT '用量',
    veterinarian VARCHAR(50) COMMENT '兽医',
    cost DECIMAL(10,2) COMMENT '费用',
    record_date DATE NOT NULL COMMENT '记录日期',
    notes TEXT COMMENT '备注',
    operator_id BIGINT UNSIGNED COMMENT '操作员ID',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    
    FOREIGN KEY (cattle_id) REFERENCES cattle(id) ON DELETE CASCADE,
    FOREIGN KEY (operator_id) REFERENCES users(id) ON DELETE SET NULL,
    INDEX idx_cattle_date (cattle_id, record_date),
    INDEX idx_record_type (record_type)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='饲养记录表';

8. 繁殖记录表 (breeding_records)

存储牛只繁殖相关信息。

CREATE TABLE breeding_records (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '记录ID',
    cattle_id BIGINT UNSIGNED NOT NULL COMMENT '母牛ID',
    breeding_method ENUM('natural', 'artificial') NOT NULL COMMENT '配种方式',
    breeding_date DATE NOT NULL COMMENT '配种日期',
    breeding_male_id BIGINT UNSIGNED COMMENT '公牛ID',
    semen_code VARCHAR(50) COMMENT '冻精编号',
    expected_delivery_date DATE COMMENT '预产期',
    actual_delivery_date DATE COMMENT '实际产犊日期',
    calf_count TINYINT DEFAULT 1 COMMENT '产犊数',
    calf_ids JSON COMMENT '犊牛IDs',
    breeding_result ENUM('success', 'failed', 'pending') DEFAULT 'pending' COMMENT '配种结果',
    notes TEXT COMMENT '备注',
    operator_id BIGINT UNSIGNED COMMENT '操作员ID',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    
    FOREIGN KEY (cattle_id) REFERENCES cattle(id) ON DELETE CASCADE,
    FOREIGN KEY (breeding_male_id) REFERENCES cattle(id) ON DELETE SET NULL,
    FOREIGN KEY (operator_id) REFERENCES users(id) ON DELETE SET NULL,
    INDEX idx_cattle_date (cattle_id, breeding_date),
    INDEX idx_result (breeding_result)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='繁殖记录表';

9. 环境监测表 (environment_monitoring)

存储牧场环境监测数据。

CREATE TABLE environment_monitoring (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '记录ID',
    location VARCHAR(255) NOT NULL COMMENT '监测位置',
    temperature DECIMAL(5,2) COMMENT '温度(℃)',
    humidity DECIMAL(5,2) COMMENT '湿度(%)',
    air_quality VARCHAR(50) COMMENT '空气质量',
    ammonia_concentration DECIMAL(6,3) COMMENT '氨气浓度(ppm)',
    carbon_dioxide DECIMAL(6,2) COMMENT '二氧化碳浓度(ppm)',
    noise_level DECIMAL(5,2) COMMENT '噪音(dB)',
    light_intensity DECIMAL(7,2) COMMENT '光照强度(lux)',
    monitoring_date DATETIME NOT NULL COMMENT '监测时间',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    
    INDEX idx_location_date (location, monitoring_date)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='环境监测表';

10. 交易记录表 (transactions)

存储活牛交易记录。

CREATE TABLE transactions (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '交易ID',
    cattle_id BIGINT UNSIGNED NOT NULL COMMENT '牛只ID',
    seller_id BIGINT UNSIGNED NOT NULL COMMENT '卖方ID',
    buyer_id BIGINT UNSIGNED NOT NULL COMMENT '买方ID',
    transaction_type ENUM('direct', 'auction', 'platform') NOT NULL COMMENT '交易类型',
    price DECIMAL(12,2) NOT NULL COMMENT '交易价格',
    currency VARCHAR(10) DEFAULT 'CNY' COMMENT '货币',
    transaction_date DATETIME NOT NULL COMMENT '交易时间',
    contract_id BIGINT UNSIGNED COMMENT '合同ID',
    status ENUM('pending', 'completed', 'cancelled') DEFAULT 'pending' COMMENT '状态',
    payment_status ENUM('unpaid', 'partial', 'paid') DEFAULT 'unpaid' COMMENT '付款状态',
    delivery_status ENUM('pending', 'in_transit', 'delivered') DEFAULT 'pending' COMMENT '交付状态',
    notes TEXT COMMENT '备注',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    
    FOREIGN KEY (cattle_id) REFERENCES cattle(id) ON DELETE CASCADE,
    FOREIGN KEY (seller_id) REFERENCES users(id) ON DELETE CASCADE,
    FOREIGN KEY (buyer_id) REFERENCES users(id) ON DELETE CASCADE,
    FOREIGN KEY (contract_id) REFERENCES contracts(id) ON DELETE SET NULL,
    INDEX idx_cattle_date (cattle_id, transaction_date),
    INDEX idx_seller (seller_id),
    INDEX idx_buyer (buyer_id),
    INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='交易记录表';

11. 合同表 (contracts)

存储交易合同信息。

CREATE TABLE contracts (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '合同ID',
    contract_number VARCHAR(50) NOT NULL UNIQUE COMMENT '合同编号',
    seller_id BIGINT UNSIGNED NOT NULL COMMENT '卖方ID',
    buyer_id BIGINT UNSIGNED NOT NULL COMMENT '买方ID',
    cattle_details JSON COMMENT '牛只详情',
    total_price DECIMAL(15,2) NOT NULL COMMENT '总价',
    currency VARCHAR(10) DEFAULT 'CNY' COMMENT '货币',
    contract_date DATE NOT NULL COMMENT '合同日期',
    effective_date DATE COMMENT '生效日期',
    expiry_date DATE COMMENT '到期日期',
    payment_terms TEXT COMMENT '付款条款',
    delivery_terms TEXT COMMENT '交付条款',
    contract_status ENUM('draft', 'signed', 'active', 'completed', 'cancelled') DEFAULT 'draft' COMMENT '合同状态',
    contract_file_url VARCHAR(255) COMMENT '合同文件URL',
    notes TEXT COMMENT '备注',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    
    FOREIGN KEY (seller_id) REFERENCES users(id) ON DELETE CASCADE,
    FOREIGN KEY (buyer_id) REFERENCES users(id) ON DELETE CASCADE,
    INDEX idx_contract_number (contract_number),
    INDEX idx_seller (seller_id),
    INDEX idx_buyer (buyer_id),
    INDEX idx_status (contract_status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='合同表';

12. 商品表 (products)

存储牛肉商城商品信息。

CREATE TABLE products (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '商品ID',
    name VARCHAR(100) NOT NULL COMMENT '商品名称',
    description TEXT COMMENT '商品描述',
    category_id INT UNSIGNED COMMENT '分类ID',
    sku VARCHAR(50) UNIQUE COMMENT 'SKU',
    price DECIMAL(10,2) NOT NULL COMMENT '价格',
    original_price DECIMAL(10,2) COMMENT '原价',
    currency VARCHAR(10) DEFAULT 'CNY' COMMENT '货币',
    stock_quantity INT DEFAULT 0 COMMENT '库存数量',
    min_stock INT DEFAULT 0 COMMENT '最低库存',
    unit VARCHAR(20) COMMENT '单位',
    weight DECIMAL(8,3) COMMENT '重量(kg)',
    origin VARCHAR(100) COMMENT '产地',
    production_date DATE COMMENT '生产日期',
    expiration_date DATE COMMENT '保质期',
    cattle_id BIGINT UNSIGNED COMMENT '关联牛只ID',
    status ENUM('active', 'inactive', 'discontinued') DEFAULT 'active' COMMENT '状态',
    image_urls JSON COMMENT '图片URL列表',
    tags JSON COMMENT '标签',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    
    FOREIGN KEY (cattle_id) REFERENCES cattle(id) ON DELETE SET NULL,
    INDEX idx_name (name),
    INDEX idx_category (category_id),
    INDEX idx_sku (sku),
    INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表';

13. 商品分类表 (product_categories)

存储商品分类信息。

CREATE TABLE product_categories (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '分类ID',
    name VARCHAR(50) NOT NULL COMMENT '分类名称',
    parent_id INT UNSIGNED DEFAULT 0 COMMENT '父分类ID',
    level TINYINT DEFAULT 1 COMMENT '层级',
    sort_order INT DEFAULT 0 COMMENT '排序',
    image_url VARCHAR(255) COMMENT '图片URL',
    status TINYINT DEFAULT 1 COMMENT '状态: 1-正常, 0-禁用',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    
    INDEX idx_parent (parent_id),
    INDEX idx_level (level)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品分类表';

14. 订单表 (orders)

存储用户订单信息。

CREATE TABLE orders (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '订单ID',
    order_number VARCHAR(50) NOT NULL UNIQUE COMMENT '订单编号',
    user_id BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
    total_amount DECIMAL(12,2) NOT NULL COMMENT '订单总额',
    currency VARCHAR(10) DEFAULT 'CNY' COMMENT '货币',
    order_status ENUM('pending', 'confirmed', 'processing', 'shipped', 'delivered', 'cancelled', 'refunded') DEFAULT 'pending' COMMENT '订单状态',
    payment_status ENUM('unpaid', 'partial', 'paid') DEFAULT 'unpaid' COMMENT '付款状态',
    shipping_status ENUM('unshipped', 'shipped', 'delivered') DEFAULT 'unshipped' COMMENT '发货状态',
    receiver_name VARCHAR(50) COMMENT '收货人姓名',
    receiver_phone VARCHAR(20) COMMENT '收货人电话',
    receiver_address TEXT COMMENT '收货地址',
    shipping_method VARCHAR(50) COMMENT '配送方式',
    shipping_fee DECIMAL(10,2) DEFAULT 0.00 COMMENT '运费',
    notes TEXT COMMENT '备注',
    payment_method VARCHAR(50) COMMENT '付款方式',
    paid_at TIMESTAMP NULL COMMENT '付款时间',
    shipped_at TIMESTAMP NULL COMMENT '发货时间',
    delivered_at TIMESTAMP NULL COMMENT '送达时间',
    cancelled_at TIMESTAMP NULL COMMENT '取消时间',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
    INDEX idx_order_number (order_number),
    INDEX idx_user (user_id),
    INDEX idx_status (order_status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单表';

15. 订单项表 (order_items)

存储订单详情信息。

CREATE TABLE order_items (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '订单项ID',
    order_id BIGINT UNSIGNED NOT NULL COMMENT '订单ID',
    product_id BIGINT UNSIGNED NOT NULL COMMENT '商品ID',
    quantity INT NOT NULL COMMENT '数量',
    unit_price DECIMAL(10,2) NOT NULL COMMENT '单价',
    total_price DECIMAL(12,2) NOT NULL COMMENT '总价',
    cattle_id BIGINT UNSIGNED COMMENT '关联牛只ID',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    
    FOREIGN KEY (order_id) REFERENCES orders(id) ON DELETE CASCADE,
    FOREIGN KEY (product_id) REFERENCES products(id) ON DELETE CASCADE,
    FOREIGN KEY (cattle_id) REFERENCES cattle(id) ON DELETE SET NULL,
    INDEX idx_order (order_id),
    INDEX idx_product (product_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单项表';

16. 物流跟踪表 (logistics_tracking)

存储物流跟踪信息。

CREATE TABLE logistics_tracking (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '物流ID',
    order_id BIGINT UNSIGNED NOT NULL COMMENT '订单ID',
    tracking_number VARCHAR(100) UNIQUE COMMENT '物流单号',
    carrier VARCHAR(50) COMMENT '承运商',
    status ENUM('pending', 'in_transit', 'delivered', 'exception') DEFAULT 'pending' COMMENT '物流状态',
    origin VARCHAR(255) COMMENT '起始地',
    destination VARCHAR(255) COMMENT '目的地',
    estimated_delivery_date DATE COMMENT '预计送达日期',
    actual_delivery_date DATE COMMENT '实际送达日期',
    current_location VARCHAR(255) COMMENT '当前位置',
    tracking_info JSON COMMENT '物流跟踪信息',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    
    FOREIGN KEY (order_id) REFERENCES orders(id) ON DELETE CASCADE,
    INDEX idx_tracking_number (tracking_number),
    INDEX idx_order (order_id),
    INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='物流跟踪表';

17. 贷款申请表 (loan_applications)

存储银行贷款申请信息。

CREATE TABLE loan_applications (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '贷款申请ID',
    applicant_id BIGINT UNSIGNED NOT NULL COMMENT '申请人ID',
    loan_type ENUM('cattle', 'farm', 'equipment', 'operating') NOT NULL COMMENT '贷款类型',
    cattle_ids JSON COMMENT '质押牛只IDs',
    loan_amount DECIMAL(15,2) NOT NULL COMMENT '贷款金额',
    currency VARCHAR(10) DEFAULT 'CNY' COMMENT '货币',
    interest_rate DECIMAL(5,4) COMMENT '利率',
    term_months INT COMMENT '期限(月)',
    purpose TEXT COMMENT '用途',
    repayment_method ENUM('equal_principal', 'equal_payment', 'bullet') COMMENT '还款方式',
    guarantee_type ENUM('cattle_pledge', 'guarantor', 'insurance', 'credit') COMMENT '担保方式',
    status ENUM('submitted', 'under_review', 'approved', 'rejected', 'disbursed', 'completed', 'overdue') DEFAULT 'submitted' COMMENT '状态',
    reviewer_id BIGINT UNSIGNED COMMENT '审核人ID',
    review_notes TEXT COMMENT '审核备注',
    approved_amount DECIMAL(15,2) COMMENT '批准金额',
    approved_date TIMESTAMP NULL COMMENT '批准日期',
    disbursement_date TIMESTAMP NULL COMMENT '放款日期',
    repayment_schedule JSON COMMENT '还款计划',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    
    FOREIGN KEY (applicant_id) REFERENCES users(id) ON DELETE CASCADE,
    FOREIGN KEY (reviewer_id) REFERENCES users(id) ON DELETE SET NULL,
    INDEX idx_applicant (applicant_id),
    INDEX idx_status (status),
    INDEX idx_type (loan_type)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='贷款申请表';

18. 保险申请表 (insurance_applications)

存储保险申请信息。

CREATE TABLE insurance_applications (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '保险申请ID',
    applicant_id BIGINT UNSIGNED NOT NULL COMMENT '申请人ID',
    insurance_type ENUM('cattle_death', 'cattle_health', 'cattle_theft', 'property') NOT NULL COMMENT '保险类型',
    cattle_ids JSON COMMENT '保险牛只IDs',
    policy_number VARCHAR(50) UNIQUE COMMENT '保单号',
    insured_amount DECIMAL(15,2) COMMENT '保险金额',
    premium DECIMAL(12,2) COMMENT '保费',
    currency VARCHAR(10) DEFAULT 'CNY' COMMENT '货币',
    start_date DATE COMMENT '起保日期',
    end_date DATE COMMENT '终保日期',
    status ENUM('applied', 'underwriting', 'issued', 'active', 'expired', 'cancelled', 'claiming', 'settled') DEFAULT 'applied' COMMENT '状态',
    underwriter_id BIGINT UNSIGNED COMMENT '核保人ID',
    underwriting_notes TEXT COMMENT '核保备注',
    policy_file_url VARCHAR(255) COMMENT '保单文件URL',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    
    FOREIGN KEY (applicant_id) REFERENCES users(id) ON DELETE CASCADE,
    FOREIGN KEY (underwriter_id) REFERENCES users(id) ON DELETE SET NULL,
    INDEX idx_applicant (applicant_id),
    INDEX idx_policy_number (policy_number),
    INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='保险申请表';

19. 理赔申请表 (claims)

存储保险理赔信息。

CREATE TABLE claims (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '理赔申请ID',
    insurance_id BIGINT UNSIGNED NOT NULL COMMENT '保险ID',
    applicant_id BIGINT UNSIGNED NOT NULL COMMENT '申请人ID',
    claim_amount DECIMAL(12,2) NOT NULL COMMENT '理赔金额',
    currency VARCHAR(10) DEFAULT 'CNY' COMMENT '货币',
    incident_date DATE NOT NULL COMMENT '事故日期',
    incident_type ENUM('death', 'illness', 'accident', 'theft') NOT NULL COMMENT '事故类型',
    description TEXT COMMENT '事故描述',
    evidence_files JSON COMMENT '证据文件URL列表',
    status ENUM('submitted', 'under_review', 'approved', 'rejected', 'paid') DEFAULT 'submitted' COMMENT '状态',
    reviewer_id BIGINT UNSIGNED COMMENT '审核人ID',
    review_notes TEXT COMMENT '审核备注',
    approved_amount DECIMAL(12,2) COMMENT '批准金额',
    paid_amount DECIMAL(12,2) COMMENT '赔付金额',
    submitted_at TIMESTAMP NULL COMMENT '提交时间',
    reviewed_at TIMESTAMP NULL COMMENT '审核时间',
    approved_at TIMESTAMP NULL COMMENT '批准时间',
    paid_at TIMESTAMP NULL COMMENT '赔付时间',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    
    FOREIGN KEY (insurance_id) REFERENCES insurance_applications(id) ON DELETE CASCADE,
    FOREIGN KEY (applicant_id) REFERENCES users(id) ON DELETE CASCADE,
    FOREIGN KEY (reviewer_id) REFERENCES users(id) ON DELETE SET NULL,
    INDEX idx_insurance (insurance_id),
    INDEX idx_applicant (applicant_id),
    INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='理赔申请表';

20. 政府监管报告表 (government_reports)

存储政府监管报告信息。

CREATE TABLE government_reports (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '报告ID',
    report_type ENUM('production', 'sales', 'disease', 'environment', 'finance') NOT NULL COMMENT '报告类型',
    reporter_id BIGINT UNSIGNED NOT NULL COMMENT '报告人ID',
    reporting_period_start DATE NOT NULL COMMENT '报告期开始日期',
    reporting_period_end DATE NOT NULL COMMENT '报告期结束日期',
    data_content JSON COMMENT '报告数据内容',
    summary TEXT COMMENT '摘要',
    status ENUM('draft', 'submitted', 'approved', 'rejected') DEFAULT 'draft' COMMENT '状态',
    approver_id BIGINT UNSIGNED COMMENT '审批人ID',
    approval_notes TEXT COMMENT '审批备注',
    submitted_at TIMESTAMP NULL COMMENT '提交时间',
    approved_at TIMESTAMP NULL COMMENT '审批时间',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    
    FOREIGN KEY (reporter_id) REFERENCES users(id) ON DELETE CASCADE,
    FOREIGN KEY (approver_id) REFERENCES users(id) ON DELETE SET NULL,
    INDEX idx_reporter (reporter_id),
    INDEX idx_type (report_type),
    INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='政府监管报告表';

数据库关系图

erDiagram
    users ||--o{ user_roles : has
    roles ||--o{ user_roles : includes
    roles ||--o{ role_permissions : has
    permissions ||--o{ role_permissions : includes
    users ||--o{ cattle : owns
    cattle ||--o{ feeding_records : has
    cattle ||--o{ breeding_records : has
    cattle ||--o{ transactions : involved_in
    users ||--o{ transactions : involved_in
    contracts ||--o{ transactions : related_to
    cattle ||--o{ products : related_to
    product_categories ||--o{ products : belongs_to
    users ||--o{ orders : places
    orders ||--o{ order_items : contains
    products ||--o{ order_items : contains
    cattle ||--o{ order_items : related_to
    orders ||--o{ logistics_tracking : has
    users ||--o{ loan_applications : applies
    users ||--o{ loan_applications : reviews
    cattle ||--o{ loan_applications : pledged
    users ||--o{ insurance_applications : applies
    users ||--o{ insurance_applications : underwrites
    cattle ||--o{ insurance_applications : insured
    insurance_applications ||--o{ claims : has
    users ||--o{ claims : applies
    users ||--o{ claims : reviews
    users ||--o{ government_reports : submits
    users ||--o{ government_reports : approves

    users {
        BIGINT id PK
        VARCHAR username
        VARCHAR email
        VARCHAR phone
        VARCHAR password_hash
        VARCHAR real_name
        VARCHAR avatar_url
        ENUM user_type
        TINYINT status
        TIMESTAMP last_login
        TIMESTAMP created_at
        TIMESTAMP updated_at
    }
    
    roles {
        INT id PK
        VARCHAR name
        TEXT description
        TIMESTAMP created_at
        TIMESTAMP updated_at
    }
    
    user_roles {
        BIGINT id PK
        BIGINT user_id FK
        INT role_id FK
        TIMESTAMP created_at
    }
    
    permissions {
        INT id PK
        VARCHAR name
        TEXT description
        VARCHAR module
        TIMESTAMP created_at
        TIMESTAMP updated_at
    }
    
    role_permissions {
        BIGINT id PK
        INT role_id FK
        INT permission_id FK
        TIMESTAMP created_at
    }
    
    cattle {
        BIGINT id PK
        VARCHAR ear_tag
        VARCHAR name
        VARCHAR breed
        ENUM gender
        DATE birth_date
        VARCHAR color
        DECIMAL weight
        ENUM health_status
        BIGINT owner_id FK
        VARCHAR farm_location
        ENUM status
        VARCHAR image_url
        VARCHAR qr_code_url
        TIMESTAMP created_at
        TIMESTAMP updated_at
    }
    
    feeding_records {
        BIGINT id PK
        BIGINT cattle_id FK
        ENUM record_type
        VARCHAR feed_type
        DECIMAL feed_amount
        VARCHAR vaccine_name
        TEXT treatment_desc
        VARCHAR medicine_name
        VARCHAR dosage
        VARCHAR veterinarian
        DECIMAL cost
        DATE record_date
        TEXT notes
        BIGINT operator_id FK
        TIMESTAMP created_at
        TIMESTAMP updated_at
    }
    
    breeding_records {
        BIGINT id PK
        BIGINT cattle_id FK
        ENUM breeding_method
        DATE breeding_date
        BIGINT breeding_male_id FK
        VARCHAR semen_code
        DATE expected_delivery_date
        DATE actual_delivery_date
        TINYINT calf_count
        JSON calf_ids
        ENUM breeding_result
        TEXT notes
        BIGINT operator_id FK
        TIMESTAMP created_at
        TIMESTAMP updated_at
    }
    
    environment_monitoring {
        BIGINT id PK
        VARCHAR location
        DECIMAL temperature
        DECIMAL humidity
        VARCHAR air_quality
        DECIMAL ammonia_concentration
        DECIMAL carbon_dioxide
        DECIMAL noise_level
        DECIMAL light_intensity
        DATETIME monitoring_date
        TIMESTAMP created_at
        TIMESTAMP updated_at
    }
    
    transactions {
        BIGINT id PK
        BIGINT cattle_id FK
        BIGINT seller_id FK
        BIGINT buyer_id FK
        ENUM transaction_type
        DECIMAL price
        VARCHAR currency
        DATETIME transaction_date
        BIGINT contract_id FK
        ENUM status
        ENUM payment_status
        ENUM delivery_status
        TEXT notes
        TIMESTAMP created_at
        TIMESTAMP updated_at
    }
    
    contracts {
        BIGINT id PK
        VARCHAR contract_number
        BIGINT seller_id FK
        BIGINT buyer_id FK
        JSON cattle_details
        DECIMAL total_price
        VARCHAR currency
        DATE contract_date
        DATE effective_date
        DATE expiry_date
        TEXT payment_terms
        TEXT delivery_terms
        ENUM contract_status
        VARCHAR contract_file_url
        TEXT notes
        TIMESTAMP created_at
        TIMESTAMP updated_at
    }
    
    products {
        BIGINT id PK
        VARCHAR name
        TEXT description
        INT category_id FK
        VARCHAR sku
        DECIMAL price
        DECIMAL original_price
        VARCHAR currency
        INT stock_quantity
        INT min_stock
        VARCHAR unit
        DECIMAL weight
        VARCHAR origin
        DATE production_date
        DATE expiration_date
        BIGINT cattle_id FK
        ENUM status
        JSON image_urls
        JSON tags
        TIMESTAMP created_at
        TIMESTAMP updated_at
    }
    
    product_categories {
        INT id PK
        VARCHAR name
        INT parent_id
        TINYINT level
        INT sort_order
        VARCHAR image_url
        TINYINT status
        TIMESTAMP created_at
        TIMESTAMP updated_at
    }
    
    orders {
        BIGINT id PK
        VARCHAR order_number
        BIGINT user_id FK
        DECIMAL total_amount
        VARCHAR currency
        ENUM order_status
        ENUM payment_status
        ENUM shipping_status
        VARCHAR receiver_name
        VARCHAR receiver_phone
        TEXT receiver_address
        VARCHAR shipping_method
        DECIMAL shipping_fee
        TEXT notes
        VARCHAR payment_method
        TIMESTAMP paid_at
        TIMESTAMP shipped_at
        TIMESTAMP delivered_at
        TIMESTAMP cancelled_at
        TIMESTAMP created_at
        TIMESTAMP updated_at
    }
    
    order_items {
        BIGINT id PK
        BIGINT order_id FK
        BIGINT product_id FK
        INT quantity
        DECIMAL unit_price
        DECIMAL total_price
        BIGINT cattle_id FK
        TIMESTAMP created_at
        TIMESTAMP updated_at
    }
    
    logistics_tracking {
        BIGINT id PK
        BIGINT order_id FK
        VARCHAR tracking_number
        VARCHAR carrier
        ENUM status
        VARCHAR origin
        VARCHAR destination
        DATE estimated_delivery_date
        DATE actual_delivery_date
        VARCHAR current_location
        JSON tracking_info
        TIMESTAMP created_at
        TIMESTAMP updated_at
    }
    
    loan_applications {
        BIGINT id PK
        BIGINT applicant_id FK
        ENUM loan_type
        JSON cattle_ids
        DECIMAL loan_amount
        VARCHAR currency
        DECIMAL interest_rate
        INT term_months
        TEXT purpose
        ENUM repayment_method
        ENUM guarantee_type
        ENUM status
        BIGINT reviewer_id FK
        TEXT review_notes
        DECIMAL approved_amount
        TIMESTAMP approved_date
        TIMESTAMP disbursement_date
        JSON repayment_schedule
        TIMESTAMP created_at
        TIMESTAMP updated_at
    }
    
    insurance_applications {
        BIGINT id PK
        BIGINT applicant_id FK
        ENUM insurance_type
        JSON cattle_ids
        VARCHAR policy_number
        DECIMAL insured_amount
        DECIMAL premium
        VARCHAR currency
        DATE start_date
        DATE end_date
        ENUM status
        BIGINT underwriter_id FK
        TEXT underwriting_notes
        VARCHAR policy_file_url
        TIMESTAMP created_at
        TIMESTAMP updated_at
    }
    
    claims {
        BIGINT id PK
        BIGINT insurance_id FK
        BIGINT applicant_id FK
        DECIMAL claim_amount
        VARCHAR currency
        DATE incident_date
        ENUM incident_type
        TEXT description
        JSON evidence_files
        ENUM status
        BIGINT reviewer_id FK
        TEXT review_notes
        DECIMAL approved_amount
        DECIMAL paid_amount
        TIMESTAMP submitted_at
        TIMESTAMP reviewed_at
        TIMESTAMP approved_at
        TIMESTAMP paid_at
        TIMESTAMP created_at
        TIMESTAMP updated_at
    }
    
    government_reports {
        BIGINT id PK
        ENUM report_type
        BIGINT reporter_id FK
        DATE reporting_period_start
        DATE reporting_period_end
        JSON data_content
        TEXT summary
        ENUM status
        BIGINT approver_id FK
        TEXT approval_notes
        TIMESTAMP submitted_at
        TIMESTAMP approved_at
        TIMESTAMP created_at
        TIMESTAMP updated_at
    }