03 库表设计 - Ei-Ayw/smart-tea-garden GitHub Wiki

库表设计(基础功能版)

users

CREATE TABLE users (
    user_id VARCHAR(255) PRIMARY KEY,
    role VARCHAR(255) NOT NULL, DEFAULT 'user',  -- 默认值为“user”,可选值为“user、admin”
    username VARCHAR(255) NOT NULL UNIQUE,
    nickname VARCHAR(255) NOT NULL,
    password VARCHAR(255) NOT NULL,
    phone VARCHAR(255) NOT NULL UNIQUE,
    avatar VARCHAR(1024) NOT NULL, -- 头像(文件上传到腾讯云对象存储 COS 获取链接)
    bio TEXT, -- 个人简介
    email VARCHAR(255),
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

plantations 表

CREATE TABLE plantations (
    plantation_id VARCHAR(255) PRIMARY KEY,
    user_id VARCHAR(255) NOT NULL, -- 管理者id
    photo_url VARCHAR(1024) NOT NULL, -- 茶园图片(文件上传到腾讯云对象存储 COS 获取链接)
    plantation_introduction VARCHAR(1024) NOT NULL,
    plantation_name VARCHAR(1024) NOT NULL, -- 茶园名称
    country VARCHAR(100) NOT NULL DEFAULT 'China', -- 国家
    province VARCHAR(100) NOT NULL, -- 省份
    city VARCHAR(100) NOT NULL, -- 城市
    district VARCHAR(100) NOT NULL, -- 区/县
    detail_address VARCHAR(1024) NOT NULL, -- 详细地址
    latitude DECIMAL(10, 6) NOT NULL,  -- 纬度
    longitude DECIMAL(10, 6) NOT NULL,  -- 经度
    altitude DECIMAL(10, 2) NOT NULL,  -- 海拔高度
    drone_count INT NOT NULL DEFAULT 0, -- 无人机总数
    drone_running INT NOT NULL DEFAULT 0, -- 运行中无人机数量
    soil_sensors_count INT NOT NULL DEFAULT 0, -- 地面传感器总数
    soil_sensors_running INT NOT NULL DEFAULT 0, -- 运行中地面传感器数量
    insect_pests_status INT NOT NULL DEFAULT 0,  -- 病虫害监测开启状态,默认值为0:“未部署”,可选值为“0:未部署、1:正在运行、2:就绪”
    deployment_status INT NOT NULL DEFAULT 0,  -- 默认值为0:“未部署”,可选值为“0:未部署、1:正在部署、2:已部署”
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
);

knowledge_bases

CREATE TABLE knowledge_bases (
    knowledge_base_id VARCHAR(255) PRIMARY KEY,
    plantation_id VARCHAR(255) NOT NULL DEFAULT 'all',  -- 默认值为“all”,表示针对所有茶园适用,
    user_id VARCHAR(255) NOT NULL, -- 创建者id
    description TEXT NOT NULL,
    status VARCHAR(255) NOT NULL DEFAULT 'ready',  -- 默认值为“ready”,可选值为“ready、processing、damaging”
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

files

CREATE TABLE files (
    file_id VARCHAR(255) PRIMARY KEY,
    user_id VARCHAR(255) NOT NULL,  -- 上传者id
    knowledge_base_id VARCHAR(255) NOT NULL,
    file_name VARCHAR(255) NOT NULL,
    upload_time DATETIME NOT NULL,
    processing_status VARCHAR(255) NOT NULL DEFAULT 'queued',  -- 默认值为“queued”,可选值为“processing、queued、complete、fail”
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

crawl_jobs 表

-- 网络爬虫作业表
CREATE TABLE crawl_jobs (
    crawl_job_id VARCHAR(255) PRIMARY KEY,
    knowledge_base_id VARCHAR(255) NOT NULL,
    user_id VARCHAR(255) NOT NULL,  -- 创建者id
    keywords JSON NOT NULL,
    max_pages INT NOT NULL,
    status VARCHAR(255) NOT NULL DEFAULT 'processing',  -- 默认值为“processing”,可选值为“processing、queued、complete、fail”
    estimated_completion DATETIME NOT NULL,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

reports 表

CREATE TABLE reports (
    report_id VARCHAR(255) PRIMARY KEY,
    plantation_id VARCHAR(255) NOT NULL,
    user_id VARCHAR(255) NOT NULL,  -- 创建者id
    report_type VARCHAR(255) NOT NULL DEFAULT 'pdf',  -- 默认值为“pdf”,可选值为“pdf、word、latex、markdown、excel”,
    start_time DATETIME NOT NULL,
    end_time DATETIME NOT NULL,
    status VARCHAR(255) NOT NULL DEFAULT 'processing',  -- 默认值为“processing”,可选值为“processing、queued、complete、fail”
    download_url VARCHAR(1024) NOT NULL DEFAULT 'queued',  -- 也是文件上传到腾讯云对象存储 COS 获取链接
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

embeddings 表

CREATE TABLE embeddings (
    embedding_id VARCHAR(255) PRIMARY KEY,
    knowledge_base_id VARCHAR(255) NOT NULL,
    categories VARCHAR(255) NOT NULL, -- 知识类别(专家经验、灌溉施肥、病虫害防治、采摘窍门、传感数据、历史溯源)
    user_id VARCHAR(255) NOT NULL,  -- 上传者id
    text TEXT NOT NULL,
    vector VECTOR(1536) NOT NULL,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

**drone**** 表**

CREATE TABLE drones (
    drone_id VARCHAR(50) PRIMARY KEY,
    plantation_id VARCHAR(50) NOT NULL,
    plantation_name VARCHAR(1024) NOT NULL,
    latitude DECIMAL(10, 6) NOT NULL,  -- 纬度
    longitude DECIMAL(10, 6) NOT NULL,  -- 经度
    altitude DECIMAL(10, 2) NOT NULL,  -- 海拔高度
    battery_level INT NOT NULL,  -- 电量%(0~100)
    flight_mode VARCHAR(255) NOT NULL DEFAULT 'auto',  -- 默认值为“auto”,可选值为“auto、manual”,
    connection_status VARCHAR(255) NOT NULL DEFAULT 'connected',  -- 默认值为“connected”,可选值为“connected、miss_connection”,
    health_check VARCHAR(255) NOT NULL DEFAULT 'health',  -- 默认值为“health”,可选值为“health、damaging”,
    timestamp DATETIME NOT NULL,
    horizontal_accuracy VARCHAR(255) NOT NULL,
    vertical_accuracy VARCHAR(255) NOT NULL,
    status VARCHAR(255) NOT NULL DEFAULT 'processing',  -- 默认值为“processing”,可选值为“processing、ready、damaging”,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

**drone_missions**** 表(**存储无人机的任务信息)

CREATE TABLE drone_missions (
    mission_id VARCHAR(255) PRIMARY KEY,               -- 任务唯一标识符(UUID或自定义编码)
    drone_id JSON NOT NULL,                            -- 执行任务的无人机编号(多架无人机 JSON)
    plantation_id VARCHAR(50) NOT NULL,
    mission_type VARCHAR(255) NOT NULL,                -- 任务类型(类别:inspection-巡检/mapping-测绘/monitoring-监控)
    current_waypoint INT NOT NULL,                    -- 当前执行航点序号(从0开始)
    total_waypoints INT NOT NULL,                     -- 任务总航点数量
    current_waypoint_location JSON NOT NULL,          -- 当前无人机所要经过的地点(经纬度)列表:[{"latitude": 31.2304, "longitude": 121.4737}, {"latitude": 31.2305, "longitude": 121.4738}]
    passed_waypoints JSON NOT NULL,                   -- 已经经过的地点(经纬度列表)列表:[{"latitude": 31.2304, "longitude": 121.4737}, {"latitude": 31.2305, "longitude": 121.4738}]
    elapsed_time INT NOT NULL,                        -- 已飞行时间(以秒为单位)
    start_time DATETIME NOT NULL,                     -- 任务开始时间
    planned_end_time DATETIME NOT NULL,               -- 计划结束时间
    estimated_completion_time INT NOT NULL,           -- 预计完成时间(总时间)
    status VARCHAR(255) NOT NULL DEFAULT 'computing',  -- 默认值为“processing”,可选值为“processing、computing、completed”,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 记录创建时间
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- 记录更新时间
);

**weather_stations**** 表**

CREATE TABLE weather_stations (
    station_id VARCHAR(255) PRIMARY KEY,               -- 气象站唯一标识符(建议使用UUID或机构编码)
    plantation_id VARCHAR(255) NOT NULL,               -- 所属种植园ID(关联plantations表)
    station_name VARCHAR(1024) NOT NULL,                -- 气象站名称(如"南山监测点")
    station_type VARCHAR(100) NOT NULL,                 -- 气象站类型(预设值:standard-标准站/micro-微型站/agro-农业站/auto-自动站/manual-人工站)
    location_name VARCHAR(1024) NOT NULL,               -- 地理位置描述(如"园区西北角")
    latitude DECIMAL(10, 6) NOT NULL,                   -- 纬度坐标(十进制,精度6位小数)
    longitude DECIMAL(10, 6) NOT NULL,                  -- 经度坐标(十进制,精度6位小数)
    altitude DECIMAL(10, 2) NOT NULL,                   -- 海拔高度(单位:米,精度2位小数)
    status VARCHAR(50) NOT NULL DEFAULT 'active',    -- 设备状态(预设值:active-运行中/inactive-未激活/maintenance-维护中/fault-故障)
    last_calibration DATE NOT NULL,                     -- 上次校准日期(每年至少校准一次)
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 记录创建时间
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- 记录更新时间
);

historical_weather 表

CREATE TABLE historical_weather (
    record_id BIGINT AUTO_INCREMENT PRIMARY KEY,        -- 天气记录唯一标识(自增主键)
    station_id VARCHAR(255) NOT NULL,                   -- 数据来源气象站ID(关联weather_stations表)
    plantation_id VARCHAR(255) NOT NULL,                -- 所属种植园ID(关联plantations表)
    timestamp DATETIME NOT NULL,                        -- 数据采集时间戳(精确到分钟级)
    temperature DECIMAL(5, 2) NOT NULL,                 -- 温度(单位:摄氏度,范围-99.99~99.99)
    humidity DECIMAL(5, 2) NOT NULL,                    -- 相对湿度(百分比,范围0.00~100.00)
    light DECIMAL(10, 2) NOT NULL,                      -- 光照强度(单位:勒克斯,支持0~99999999.99)
    wind_speed DECIMAL(5, 2) NOT NULL,                  -- 风速(单位:米/秒,范围0.00~99.99)
    wind_direction DECIMAL(5, 2) NOT NULL,              -- 风向(单位:度,范围0.00~359.99)
    rainfall DECIMAL(5, 2) NOT NULL,                    -- 降雨量(单位:毫米,范围0.00~99.99)
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP -- 记录入库时间
);

**soil_sensors**** 表**

CREATE TABLE soil_sensors (
    sensor_id VARCHAR(255) PRIMARY KEY,                -- 土壤传感器唯一标识符(建议使用UUID或设备编码)
    plantation_id VARCHAR(255) NOT NULL,               -- 所属种植园ID(关联plantations表)
    sensor_name VARCHAR(1024) NOT NULL,                 -- 传感器名称(如"1号地块水分仪")
    sensor_type VARCHAR(100) NOT NULL,                  -- 传感器类型(预设值:moisture-水分/ec-电导率/ph-ph值/temperature-温度/nutrient-养分)
    location_name VARCHAR(1024) NOT NULL,               -- 安装位置描述(如"A区西北角")
    latitude DECIMAL(10, 6) NOT NULL,                   -- 纬度坐标(十进制,精度6位小数)
    longitude DECIMAL(10, 6) NOT NULL,                  -- 经度坐标(十进制,精度6位小数)
    depth DECIMAL(5, 2) NOT NULL,                       -- 埋设深度(单位:厘米,范围0.00~999.99)
    status VARCHAR(255) NOT NULL DEFAULT 'processing', -- 传感器状态(预设值:processing-处理中/ready-正常/damaging-损坏)
    last_calibration DATE NOT NULL,                     -- 上次校准日期(建议每月校准一次)
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 记录创建时间
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- 记录更新时间
);

historical_soil_data 表

CREATE TABLE historical_soil_data (
    record_id BIGINT AUTO_INCREMENT PRIMARY KEY,        -- 土壤数据记录唯一标识(自增主键)
    sensor_id VARCHAR(255) NOT NULL,                    -- 数据来源传感器ID(关联soil_sensors表)
    timestamp DATETIME NOT NULL,                        -- 数据采集时间戳(精确到分钟级)
    soil_moisture DECIMAL(5, 2) NOT NULL,               -- 土壤湿度(体积含水量,百分比,范围0.00~100.00)
    soil_temperature DECIMAL(5, 2) NOT NULL,            -- 土壤温度(单位:摄氏度,范围-99.99~99.99)
    soil_ph DECIMAL(3, 2) NOT NULL,                     -- 土壤酸碱度(范围0.00~14.00)
    nitrogen DECIMAL(5, 2) NOT NULL,                    -- 土壤氮含量(单位:mg/kg,范围0.00~9999.99)
    phosphorus DECIMAL(5, 2) NOT NULL,                  -- 土壤磷含量(单位:mg/kg,范围0.00~9999.99)
    potassium DECIMAL(5, 2) NOT NULL,                   -- 土壤钾含量(单位:mg/kg,范围0.00~9999.99)
    electrical_conductivity DECIMAL(5, 2) NOT NULL,     -- 土壤电导率(单位:mS/cm,范围0.00~99.99)
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP -- 记录入库时间
);

AI 管理建议与农事计划表

-- 建议表
CREATE TABLE ai_suggestions (
    suggestion_id VARCHAR(255) PRIMARY KEY,
    title VARCHAR(1024) NOT NULL,
    content TEXT NOT NULL,
    suggestion_type VARCHAR(100) NOT NULL, -- 建议类型:irrigation, fertilization, pest_control, picking
    priority VARCHAR(50) NOT NULL DEFAULT 'medium', -- 优先级:high, medium, low
    status VARCHAR(50) NOT NULL DEFAULT 'unread', -- 状态:unread, read, pending, executed, dismissed
    plantation_id VARCHAR(255) NOT NULL,
    plot_id VARCHAR(255),
    sensor_data JSON NOT NULL,
    recommendation JSON NOT NULL,
    execution_data JSON,
    supporting_charts JSON,
    trigger_type VARCHAR(50) NOT NULL DEFAULT 'automatic', -- 触发类型:automatic, manual
    created_by VARCHAR(255) NOT NULL,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (plantation_id) REFERENCES plantations(plantation_id)
);

-- 建议历史记录表
CREATE TABLE suggestion_history (
    history_id BIGINT AUTO_INCREMENT PRIMARY KEY,
    suggestion_id VARCHAR(255) NOT NULL,
    status_change VARCHAR(50) NOT NULL,
    change_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    change_by VARCHAR(255) NOT NULL,
    notes TEXT,
    FOREIGN KEY (suggestion_id) REFERENCES ai_suggestions(suggestion_id)
);

-- 农事任务表
CREATE TABLE farm_tasks (
    task_id VARCHAR(255) PRIMARY KEY,
    task_type VARCHAR(100) NOT NULL, -- 任务类型:irrigation, fertilization, pest_control, picking, inspection
    title VARCHAR(1024) NOT NULL,
    description TEXT,
    plantation_id VARCHAR(255) NOT NULL,
    plot_id VARCHAR(255),
    status VARCHAR(50) NOT NULL DEFAULT 'pending', -- 状态:pending, in_progress, completed, failed, cancelled
    priority VARCHAR(50) NOT NULL DEFAULT 'medium', -- 优先级:high, medium, low
    scheduled_time DATETIME,
    actual_start_time DATETIME,
    actual_end_time DATETIME,
    assigned_to VARCHAR(255), -- 分配给:user, drone, device
    assigned_to_id VARCHAR(255),
    suggestion_ids JSON, -- 关联的建议ID列表
    execution_details JSON,
    created_by VARCHAR(255) NOT NULL,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (plantation_id) REFERENCES plantations(plantation_id)
);

categories(知识分类表)

CREATE TABLE categories (
    category_id VARCHAR(255) PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    description TEXT,
    teas_count INT DEFAULT 0,
    created_at TIMESTAMP NOT NULL,
    updated_at TIMESTAMP NOT NULL
);

popular_questions(热门问题表)

CREATE TABLE popular_questions (
    question_id VARCHAR(255) PRIMARY KEY,
    question TEXT NOT NULL,
    answer_count INT DEFAULT 0,
    view_count INT DEFAULT 0,
    created_at TIMESTAMP NOT NULL,
    updated_at TIMESTAMP NOT NULL,
    tags JSON,  -- 使用JSON类型存储标签数组
    last_answer_at TIMESTAMP
);

设备管理表(设备管理、维修请求和固件升级)

-- 设备表
CREATE TABLE devices (
    device_id VARCHAR(50) PRIMARY KEY,
    device_type VARCHAR(50) NOT NULL, -- 设备类型:drone, soil_sensor, weather_station等
    model VARCHAR(100) NOT NULL,
    firmware_version VARCHAR(20) DEFAULT NULL,
    serial_number VARCHAR(100) UNIQUE NOT NULL,
    plantation_id VARCHAR(50) NOT NULL,
    location_latitude DECIMAL(10, 6) DEFAULT NULL,
    location_longitude DECIMAL(10, 6) DEFAULT NULL,
    status VARCHAR(20) NOT NULL DEFAULT 'active', -- active, inactive, maintenance, offline
    purchase_date DATE DEFAULT NULL,
    warranty_expire_date DATE DEFAULT NULL,
    last_maintenance_date DATE DEFAULT NULL,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (plantation_id) REFERENCES plantations(plantation_id)
);

-- 维修请求表
CREATE TABLE maintenance_requests (
    request_id VARCHAR(50) PRIMARY KEY,
    device_id VARCHAR(50) NOT NULL,
    fault_description TEXT NOT NULL,
    fault_photos JSON DEFAULT NULL,
    fault_time DATETIME DEFAULT NULL,
    urgency_level VARCHAR(20) NOT NULL DEFAULT 'normal', -- low, normal, high, critical
    status VARCHAR(20) NOT NULL DEFAULT 'pending', -- pending, in_progress, completed, cancelled
    diagnosis TEXT DEFAULT NULL,
    repair_solution TEXT DEFAULT NULL,
    repair_parts JSON DEFAULT NULL,
    repair_cost DECIMAL(10, 2) DEFAULT NULL,
    reported_by VARCHAR(50) NOT NULL,
    assigned_to VARCHAR(50) DEFAULT NULL,
    completed_at DATETIME DEFAULT NULL,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (device_id) REFERENCES devices(device_id)
);

-- 维修请求评论表
CREATE TABLE maintenance_comments (
    comment_id VARCHAR(50) PRIMARY KEY,
    request_id VARCHAR(50) NOT NULL,
    user_id VARCHAR(50) NOT NULL,
    content TEXT NOT NULL,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (request_id) REFERENCES maintenance_requests(request_id)
);

-- 维修请求状态历史表
CREATE TABLE maintenance_status_history (
    history_id INT AUTO_INCREMENT PRIMARY KEY,
    request_id VARCHAR(50) NOT NULL,
    status VARCHAR(20) NOT NULL,
    change_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    changed_by VARCHAR(50) NOT NULL,
    FOREIGN KEY (request_id) REFERENCES maintenance_requests(request_id)
);

-- 固件版本表
CREATE TABLE firmware_versions (
    version_id VARCHAR(50) PRIMARY KEY,
    device_type VARCHAR(50) NOT NULL,
    version_number VARCHAR(20) NOT NULL,
    release_notes TEXT DEFAULT NULL,
    release_date DATETIME NOT NULL,
    mandatory BOOLEAN NOT NULL DEFAULT FALSE,
    download_url VARCHAR(255) NOT NULL,
    checksum VARCHAR(64) NOT NULL,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

-- 固件升级记录表
CREATE TABLE firmware_upgrades (
    upgrade_id VARCHAR(50) PRIMARY KEY,
    device_id VARCHAR(50) NOT NULL,
    firmware_version VARCHAR(20) NOT NULL,
    status VARCHAR(20) NOT NULL DEFAULT 'scheduled', -- scheduled, in_progress, completed, failed
    start_time DATETIME DEFAULT NULL,
    end_time DATETIME DEFAULT NULL,
    duration VARCHAR(50) DEFAULT NULL,
    result TEXT DEFAULT NULL,
    logs TEXT DEFAULT NULL,
    created_by VARCHAR(50) NOT NULL,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (device_id) REFERENCES devices(device_id)
);

产量预测表

-- 预测模型表
CREATE TABLE yield_prediction_models (
    model_id VARCHAR(50) PRIMARY KEY,
    model_name VARCHAR(100) NOT NULL,
    model_description TEXT,
    model_version VARCHAR(20) NOT NULL,
    model_type VARCHAR(50) NOT NULL, -- mlp, lstm, random_forest等
    status VARCHAR(20) NOT NULL DEFAULT 'active', -- active, inactive, retired
    accuracy DECIMAL(4, 2) NOT NULL,
    training_data_size INT NOT NULL,
    last_updated DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);

-- 预测模型参数表
CREATE TABLE model_parameters (
    parameter_id VARCHAR(50) PRIMARY KEY,
    model_id VARCHAR(50) NOT NULL,
    parameter_name VARCHAR(100) NOT NULL,
    parameter_value JSON NOT NULL,
    parameter_description TEXT,
    last_updated DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (model_id) REFERENCES yield_prediction_models(model_id)
);

-- 产量预测结果表
CREATE TABLE yield_predictions (
    prediction_id VARCHAR(50) PRIMARY KEY,
    model_id VARCHAR(50) NOT NULL,
    plantation_id VARCHAR(50) NOT NULL,
    prediction_period VARCHAR(20) NOT NULL, -- daily, weekly, monthly, quarterly, yearly
    start_date DATE NOT NULL,
    end_date DATE NOT NULL,
    status VARCHAR(20) NOT NULL DEFAULT 'processing', -- processing, completed, failed
    parameters JSON NOT NULL,
    results JSON,
    recommendations JSON,
    accuracy DECIMAL(4, 2),
    execution_time DECIMAL(10, 2) NOT NULL, -- 执行时间(秒)
    created_by VARCHAR(50) NOT NULL,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (model_id) REFERENCES yield_prediction_models(model_id),
    FOREIGN KEY (plantation_id) REFERENCES plantations(plantation_id)
);

-- 预测报告表
CREATE TABLE prediction_reports (
    report_id VARCHAR(50) PRIMARY KEY,
    prediction_id VARCHAR(50) NOT NULL,
    report_type VARCHAR(20) NOT NULL DEFAULT 'pdf', -- pdf, excel, json
    report_status VARCHAR(20) NOT NULL DEFAULT 'generating', -- generating, completed, failed
    report_url VARCHAR(255),
    file_size BIGINT,
    generated_by VARCHAR(50) NOT NULL,
    generated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (prediction_id) REFERENCES yield_predictions(prediction_id)
);

病虫害防控表

-- 病虫害识别表
CREATE TABLE pest_identifications (
    identification_id VARCHAR(50) PRIMARY KEY,
    plantation_id VARCHAR(50) NOT NULL,
    plot_id VARCHAR(50),
    photos JSON NOT NULL,
    symptoms TEXT NOT NULL,
    location_latitude DECIMAL(10, 6),
    location_longitude DECIMAL(10, 6),
    severity_level VARCHAR(20) NOT NULL, -- mild, moderate, severe
    occurrence_time DATETIME NOT NULL,
    pest_type VARCHAR(100),
    pest_species VARCHAR(100),
    confidence DECIMAL(4, 2) NOT NULL,
    status VARCHAR(20) NOT NULL DEFAULT 'completed', -- completed, pending, failed
    identified_by VARCHAR(50) NOT NULL,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (plantation_id) REFERENCES plantations(plantation_id)
);

-- 病虫害预警表
CREATE TABLE pest_warnings (
    warning_id VARCHAR(50) PRIMARY KEY,
    plantation_id VARCHAR(50) NOT NULL,
    plot_id VARCHAR(50),
    pest_type VARCHAR(100) NOT NULL,
    severity_level VARCHAR(20) NOT NULL, -- mild, moderate, severe
    warning_level VARCHAR(20) NOT NULL, -- low, medium, high, critical
    affected_area DECIMAL(10, 2) NOT NULL, -- 受影响面积(m²)
    location_latitude DECIMAL(10, 6) NOT NULL,
    location_longitude DECIMAL(10, 6) NOT NULL,
    radius DECIMAL(10, 2) NOT NULL, -- 半径(m)
    predicted_spread DECIMAL(10, 2) NOT NULL, -- 预测扩散速度(m/周)
    warning_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    effective_period INT NOT NULL, -- 有效周期(天)
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (plantation_id) REFERENCES plantations(plantation_id)
);

-- 病虫害趋势表
CREATE TABLE pest_trends (
    trend_id VARCHAR(50) PRIMARY KEY,
    plantation_id VARCHAR(50) NOT NULL,
    pest_type VARCHAR(100) NOT NULL,
    time_period VARCHAR(20) NOT NULL, -- weekly, monthly, quarterly, yearly
    trend_data JSON NOT NULL,
    start_date DATE NOT NULL,
    end_date DATE NOT NULL,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (plantation_id) REFERENCES plantations(plantation_id)
);

-- 病虫害防治方案表
CREATE TABLE pest_control_plans (
    plan_id VARCHAR(50) PRIMARY KEY,
    plantation_id VARCHAR(50) NOT NULL,
    plot_id VARCHAR(50),
    pest_type VARCHAR(100) NOT NULL,
    severity_level VARCHAR(20) NOT NULL, -- mild, moderate, severe
    identification_id VARCHAR(50),
    control_methods JSON NOT NULL, -- 包含生物防治、化学防治等方法
    estimated_cost DECIMAL(10, 2) NOT NULL,
    estimated_effect_time INT NOT NULL, -- 预计生效时间(天)
    estimated_duration INT NOT NULL, -- 预计持续时间(天)
    responsible_person VARCHAR(50) NOT NULL,
    status VARCHAR(20) NOT NULL DEFAULT 'pending', -- pending, in_progress, completed, failed
    progress INT NOT NULL DEFAULT 0, -- 进度百分比
    start_time DATETIME,
    end_time DATETIME,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (plantation_id) REFERENCES plantations(plantation_id),
    FOREIGN KEY (identification_id) REFERENCES pest_identifications(identification_id)
);

-- 防治方案执行记录表
CREATE TABLE control_execution_records (
    record_id VARCHAR(50) PRIMARY KEY,
    plan_id VARCHAR(50) NOT NULL,
    method_index INT NOT NULL, -- 对应control_methods中的索引
    method_type VARCHAR(50) NOT NULL, -- biological, chemical, physical
    agent_name VARCHAR(100) NOT NULL,
    agent_quantity DECIMAL(10, 2) NOT NULL,
    application_time DATETIME NOT NULL,
    application_status VARCHAR(20) NOT NULL DEFAULT 'pending', -- pending, completed, failed
   执行人 VARCHAR(50),
    execution_notes TEXT,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (plan_id) REFERENCES pest_control_plans(plan_id)
);