# 数据库详细设计 ## 概述 本项目使用MySQL作为主要的关系型数据库,存储用户信息、牛只档案、交易记录、监管数据等核心业务数据。 ## 数据库设计规范 1. 使用InnoDB存储引擎 2. 字符集使用utf8mb4 3. 所有表都有创建时间和更新时间字段 4. 主键使用自增ID 5. 外键约束用于保证数据一致性 6. 表名使用复数形式,以下划线分隔单词 7. 字段名使用下划线分隔单词 8. 所有表都包含`created_at`和`updated_at`时间戳字段 ## 核心数据表设计 ### 1. 用户表 (users) 存储系统用户信息,包括牧民、银行职员、保险员、政府监管人员等。 ```sql 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 '密码哈希值', real_name VARCHAR(50) COMMENT '真实姓名', avatar_url VARCHAR(255) COMMENT '头像URL', 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_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) 存储用户和角色的多对多关系。 ```sql 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) 存储系统权限信息。 ```sql 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) 存储角色和权限的多对多关系。 ```sql 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) 存储牛只基本信息,包括品种、年龄、健康状况等。 ```sql 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) 存储牛只饲养记录,包括饲料、疫苗、治疗等信息。 ```sql 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) 存储牛只繁殖相关信息。 ```sql 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) 存储牧场环境监测数据。 ```sql 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) 存储活牛交易记录。 ```sql 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) 存储交易合同信息。 ```sql 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) 存储牛肉商城商品信息。 ```sql 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) 存储商品分类信息。 ```sql 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) 存储用户订单信息。 ```sql 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) 存储订单详情信息。 ```sql 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) 存储物流跟踪信息。 ```sql 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) 存储银行贷款申请信息。 ```sql 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) 存储保险申请信息。 ```sql 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) 存储保险理赔信息。 ```sql 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) 存储政府监管报告信息。 ```sql 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='政府监管报告表'; ``` ## 数据库关系图 ```mermaid 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 } ```