Files
jiebanke/docs/database-design.md
2025-09-01 03:32:45 +08:00

16 KiB

结伴客系统数据库设计文档

1. 数据库概览

1.1 数据库配置

测试环境

  • 主机: 192.168.0.240
  • 端口: 3306
  • 用户名: root
  • 密码: aiot$Aiot123
  • 数据库: jiebandata

生产环境

  • 主机: 129.211.213.226
  • 端口: 9527
  • 用户名: root
  • 密码: aiotAiot123!
  • 数据库: jiebandata

1.2 ER图

erDiagram
    USERS ||--o{ TRAVEL_PLANS : creates
    USERS ||--o{ ANIMAL_CLAIMS : claims
    USERS ||--o{ MESSAGES : sends
    USERS ||--o{ ORDERS : places
    USERS ||--o{ REVIEWS : writes
    
    MERCHANTS ||--o{ PRODUCTS : sells
    MERCHANTS ||--o{ ORDERS : processes
    MERCHANTS ||--o{ ACTIVITIES : organizes
    MERCHANTS ||--o{ ANIMALS : manages
    
    TRAVEL_PLANS ||--o{ TRAVEL_MATCHES : matches
    
    ANIMALS ||--o{ ANIMAL_CLAIMS : claimed
    ANIMALS ||--o{ ANIMAL_UPDATES : updates
    
    PRODUCTS ||--o{ ORDER_ITEMS : contains
    
    ORDERS ||--o{ ORDER_ITEMS : contains
    ORDERS ||--o{ PAYMENTS : has
    
    ACTIVITIES ||--o{ ACTIVITY_REGISTRATIONS : registers
    
    ADMINS ||--o{ ADMIN_LOGS : creates
    
    USERS {
        int id PK
        string openid
        string nickname
        string avatar
        string gender
        date birthday
        string phone
        string email
        datetime created_at
        datetime updated_at
    }
    
    ADMINS {
        int id PK
        string username
        string password
        string email
        string nickname
        string avatar
        enum role
        tinyint status
        timestamp last_login
        timestamp created_at
        timestamp updated_at
    }
    
    MERCHANTS {
        int id PK
        int user_id FK
        string merchant_type
        string business_name
        string business_license
        string contact_person
        string contact_phone
        string address
        string description
        string status
        datetime created_at
        datetime updated_at
    }
    
    TRAVEL_PLANS {
        int id PK
        int user_id FK
        string destination
        date start_date
        date end_date
        decimal budget
        string interests
        string visibility
        datetime created_at
        datetime updated_at
    }
    
    ANIMALS {
        int id PK
        int merchant_id FK
        string name
        string species
        string breed
        date birth_date
        string personality
        string farm_location
        decimal price
        string status
        datetime created_at
        datetime updated_at
    }
    
    ORDERS {
        int id PK
        int user_id FK
        int merchant_id FK
        string order_number
        decimal total_amount
        string status
        string delivery_address
        datetime ordered_at
        datetime completed_at
    }
    
    PRODUCTS {
        int id PK
        int merchant_id FK
        string name
        string description
        decimal price
        string image_url
        string category
        string status
        datetime created_at
        datetime updated_at
    }

2. 核心表结构设计

2.1 用户表 (users)

字段名 类型 约束 描述
id INT PRIMARY KEY, AUTO_INCREMENT 用户ID
openid VARCHAR(64) UNIQUE, NOT NULL 微信openid
nickname VARCHAR(50) NOT NULL 用户昵称
avatar VARCHAR(255) 用户头像URL
gender ENUM('male', 'female', 'other') 性别
birthday DATE 生日
phone VARCHAR(20) UNIQUE 手机号码
email VARCHAR(100) UNIQUE 邮箱地址
travel_count INT DEFAULT 0 旅行结伴次数
animal_claim_count INT DEFAULT 0 动物认领次数
created_at DATETIME NOT NULL 创建时间
updated_at DATETIME NOT NULL 更新时间

2.2 管理员表 (admins)

字段名 类型 约束 描述
id INT PRIMARY KEY, AUTO_INCREMENT 管理员ID
username VARCHAR(50) UNIQUE, NOT NULL 管理员用户名
password VARCHAR(255) NOT NULL 密码(bcrypt加密)
email VARCHAR(100) UNIQUE 邮箱地址
nickname VARCHAR(100) 昵称
avatar VARCHAR(255) 头像URL
role ENUM('super_admin', 'admin', 'operator') NOT NULL 角色
status TINYINT DEFAULT 1 状态(1:启用, 0:禁用)
last_login TIMESTAMP 最后登录时间
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP 创建时间
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 更新时间

注意: 管理员默认密码为 'admin123',使用 bcrypt 加密存储

2.3 商家表 (merchants)

字段名 类型 约束 描述
id INT PRIMARY KEY, AUTO_INCREMENT 商家ID
user_id INT FOREIGN KEY, NOT NULL 关联的用户ID
merchant_type ENUM('flower_shop', 'activity_organizer', 'farm_owner') NOT NULL 商家类型
business_name VARCHAR(100) NOT NULL 商家名称
business_license VARCHAR(255) 营业执照图片URL
contact_person VARCHAR(50) NOT NULL 联系人
contact_phone VARCHAR(20) NOT NULL 联系电话
address VARCHAR(255) 地址
description TEXT 商家介绍
status ENUM('pending', 'approved', 'rejected', 'suspended') NOT NULL 商家状态
created_at DATETIME NOT NULL 创建时间
updated_at DATETIME NOT NULL 更新时间

2.4 订单表 (orders)

字段名 类型 约束 描述
id INT PRIMARY KEY, AUTO_INCREMENT 订单ID
user_id INT FOREIGN KEY, NOT NULL 用户ID
merchant_id INT FOREIGN KEY, NOT NULL 商家ID
order_number VARCHAR(50) UNIQUE, NOT NULL 订单编号
total_amount DECIMAL(10,2) NOT NULL 订单总金额
status ENUM('pending', 'paid', 'shipped', 'completed', 'cancelled') NOT NULL 订单状态
delivery_address VARCHAR(255) 配送地址
ordered_at DATETIME NOT NULL 下单时间
completed_at DATETIME 完成时间

2.5 商品表 (products)

字段名 类型 约束 描述
id INT PRIMARY KEY, AUTO_INCREMENT 商品ID
merchant_id INT FOREIGN KEY, NOT NULL 商家ID
name VARCHAR(100) NOT NULL 商品名称
description TEXT 商品描述
price DECIMAL(10,2) NOT NULL 商品价格
image_url VARCHAR(255) 商品图片URL
category VARCHAR(50) NOT NULL 商品分类
status ENUM('active', 'inactive', 'deleted') NOT NULL 商品状态
created_at DATETIME NOT NULL 创建时间
updated_at DATETIME NOT NULL 更新时间

2.6 动物表 (animals)

字段名 类型 约束 描述
id INT PRIMARY KEY, AUTO_INCREMENT 动物ID
merchant_id INT FOREIGN KEY, NOT NULL 关联的农场商家ID
name VARCHAR(50) NOT NULL 动物名称
species VARCHAR(50) NOT NULL 动物种类
breed VARCHAR(50) 品种
birth_date DATE 出生日期
personality TEXT 性格特点
farm_location VARCHAR(255) 农场位置
images JSON 动物图片列表
price DECIMAL(10,2) NOT NULL 认领价格
claim_count INT DEFAULT 0 认领次数
status ENUM('available', 'claimed', 'unavailable') NOT NULL 状态
created_at DATETIME NOT NULL 创建时间
updated_at DATETIME NOT NULL 更新时间

2.7 动物认领表 (animal_claims)

字段名 类型 约束 描述
id INT PRIMARY KEY, AUTO_INCREMENT 认领ID
user_id INT FOREIGN KEY, NOT NULL 用户ID
animal_id INT FOREIGN KEY, NOT NULL 动物ID
price_paid DECIMAL(10,2) NOT NULL 支付金额
agreement_url VARCHAR(255) 电子协议URL
status ENUM('active', 'ended', 'cancelled') NOT NULL 认领状态
claimed_at DATETIME NOT NULL 认领时间
ended_at DATETIME 结束时间

2.8 送花商品表 (flower_products)

字段名 类型 约束 描述
id INT PRIMARY KEY, AUTO_INCREMENT 商品ID
merchant_id INT FOREIGN KEY, NOT NULL 商家ID
name VARCHAR(100) NOT NULL 商品名称
description TEXT 商品描述
price DECIMAL(10,2) NOT NULL 商品价格
original_price DECIMAL(10,2) 原价
images JSON 商品图片列表
category VARCHAR(50) NOT NULL 商品分类
sales_count INT DEFAULT 0 销售数量
rating DECIMAL(3,2) DEFAULT 0 评分
status ENUM('active', 'inactive', 'deleted') NOT NULL 商品状态
created_at DATETIME NOT NULL 创建时间
updated_at DATETIME NOT NULL 更新时间

2.9 送花订单表 (flower_orders)

字段名 类型 约束 描述
id INT PRIMARY KEY, AUTO_INCREMENT 订单ID
user_id INT FOREIGN KEY, NOT NULL 用户ID
product_id INT FOREIGN KEY, NOT NULL 商品ID
order_number VARCHAR(50) UNIQUE, NOT NULL 订单编号
quantity INT NOT NULL 数量
total_amount DECIMAL(10,2) NOT NULL 订单总金额
recipient_info JSON 收花人信息
delivery_date DATE 配送日期
message VARCHAR(500) 祝福语
status ENUM('pending', 'paid', 'shipped', 'completed', 'cancelled') NOT NULL 订单状态
created_at DATETIME NOT NULL 创建时间
updated_at DATETIME NOT NULL 更新时间

2.10 旅行邀请表 (travel_invitations)

字段名 类型 约束 描述
id INT PRIMARY KEY, AUTO_INCREMENT 邀请ID
travel_plan_id INT FOREIGN KEY, NOT NULL 旅行计划ID
inviter_id INT FOREIGN KEY, NOT NULL 邀请人ID
invitee_id INT FOREIGN KEY, NOT NULL 被邀请人ID
message VARCHAR(500) 邀请消息
status ENUM('pending', 'accepted', 'rejected', 'cancelled') NOT NULL 邀请状态
created_at DATETIME NOT NULL 创建时间
updated_at DATETIME NOT NULL 更新时间

2.11 旅行匹配表 (travel_matches)

字段名 类型 约束 描述
id INT PRIMARY KEY, AUTO_INCREMENT 匹配ID
plan_id INT FOREIGN KEY, NOT NULL 旅行计划ID
matched_plan_id INT FOREIGN KEY, NOT NULL 匹配的旅行计划ID
match_score DECIMAL(5,4) NOT NULL 匹配分数
created_at DATETIME NOT NULL 创建时间

2.12 旅行计划表 (travel_plans)

字段名 类型 约束 描述
id INT PRIMARY KEY, AUTO_INCREMENT 计划ID
user_id INT FOREIGN KEY, NOT NULL 用户ID
destination VARCHAR(100) NOT NULL 目的地
start_date DATE NOT NULL 开始日期
end_date DATE NOT NULL 结束日期
budget DECIMAL(10,2) NOT NULL 预算
interests TEXT 兴趣偏好
visibility ENUM('public', 'friends', 'private') NOT NULL 可见范围
created_at DATETIME NOT NULL 创建时间
updated_at DATETIME NOT NULL 更新时间

3. 后台管理系统API接口规范

3.1 接口统一格式

请求格式

响应格式

{
  "success": true,
  "code": 200,
  "message": "操作成功",
  "data": {
    // 具体数据
  },
  "pagination": {
    // 分页信息(列表接口)
  }
}

3.2 通用状态码

状态码 描述
200 成功
400 请求参数错误
401 未授权
403 权限不足
404 资源不存在
500 服务器内部错误

3.3 管理员接口

3.3.1 管理员登录

  • Endpoint: POST /admin/auth/login
  • 认证要求: 无
  • 请求体:
{
  "username": "admin",
  "password": "password123"
}

3.3.2 获取管理员信息

  • Endpoint: GET /admin/auth/profile
  • 认证要求: Bearer Token

3.3.3 更新管理员信息

  • Endpoint: PUT /admin/auth/profile
  • 认证要求: Bearer Token

3.3.4 修改密码

  • Endpoint: PUT /admin/auth/password
  • 认证要求: Bearer Token

3.4 用户管理接口

3.4.1 获取用户列表

  • Endpoint: GET /admin/users
  • 认证要求: Bearer Token
  • 查询参数: page, limit, username, user_type, status

3.4.2 获取用户详情

  • Endpoint: GET /admin/users/{id}
  • 认证要求: Bearer Token

3.4.3 更新用户状态

  • Endpoint: PUT /admin/users/{id}/status
  • 认证要求: Bearer Token

2.13 管理员操作日志表 (admin_operation_logs)

字段名 类型 约束 描述
id INT PRIMARY KEY, AUTO_INCREMENT 日志ID
admin_id INT FOREIGN KEY REFERENCES admins(id), NOT NULL 操作管理员ID
admin_name VARCHAR(50) NOT NULL 管理员名称
action_type VARCHAR(50) NOT NULL 操作类型
target_type VARCHAR(50) 目标类型
target_id INT 目标ID
target_name VARCHAR(100) 目标名称
old_value TEXT 操作前值
new_value TEXT 操作后值
ip_address VARCHAR(45) 操作IP地址
user_agent VARCHAR(500) 用户代理信息
created_at DATETIME NOT NULL 创建时间

2.14 管理员权限表 (admin_permissions)

字段名 类型 约束 描述
id INT PRIMARY KEY, AUTO_INCREMENT 权限ID
code VARCHAR(50) UNIQUE, NOT NULL 权限代码
name VARCHAR(100) NOT NULL 权限名称
description VARCHAR(255) 权限描述
created_at DATETIME NOT NULL 创建时间
updated_at DATETIME NOT NULL 更新时间

2.15 管理员角色权限关联表 (admin_role_permissions)

字段名 类型 约束 描述
id INT PRIMARY KEY, AUTO_INCREMENT 关联ID
admin_id INT FOREIGN KEY REFERENCES admins(id), NOT NULL 管理员ID
permission_code VARCHAR(50) FOREIGN KEY REFERENCES admin_permissions(code), NOT NULL 权限代码
created_at DATETIME NOT NULL 创建时间

3.5 商家管理接口

3.5.1 获取商家列表

  • Endpoint: GET /admin/merchants
  • 认证要求: Bearer Token
  • 查询参数: page, limit, business_name, status

3.5.2 审核商家申请

  • Endpoint: PUT /admin/merchants/{id}/approve
  • 认证要求: Bearer Token

3.5.3 拒绝商家申请

  • Endpoint: PUT /admin/merchants/{id}/reject
  • 认证要求: Bearer Token

3.6 订单管理接口

3.6.1 获取订单列表

  • Endpoint: GET /admin/orders
  • 认证要求: Bearer Token
  • 查询参数: page, limit, order_no, status

3.6.2 更新订单状态

  • Endpoint: PUT /admin/orders/{id}/status
  • 认证要求: Bearer Token

4. 数据库初始化脚本

4.1 创建管理员用户

INSERT INTO admins (username, password, email, nickname, role, status) 
VALUES 
('superadmin', '$2b$10$rOzJq...', 'superadmin@jiebanke.com', '超级管理员', 'super_admin', 1),
('admin', '$2b$10$rOzJq...', 'admin@jiebanke.com', '管理员', 'admin', 1),
('operator', '$2b$10$rOzJq...', 'operator@jiebanke.com', '操作员', 'operator', 1);

4.2 创建测试用户

INSERT INTO users (openid, nickname, gender, phone, email) 
VALUES 
('wx1234567890', '测试用户1', 'male', '13800138000', 'test1@jiebanke.com'),
('wx0987654321', '测试用户2', 'female', '13800138001', 'test2@jiebanke.com');

4.3 创建测试商家

INSERT INTO merchants (user_id, merchant_type, business_name, contact_person, contact_phone, status) 
VALUES 
(1, 'flower_shop', '鲜花小店', '张老板', '13800138002', 'approved'),
(2, 'farm_owner', '快乐农场', '李农场主', '13800138003', 'approved');

5. 数据库维护

5.1 备份策略

  • 每日全量备份
  • 每小时增量备份
  • 备份保留30天

5.2 性能优化

  • 为常用查询字段创建索引
  • 定期分析慢查询日志
  • 数据库连接池配置优化

5.3 安全措施

  • 定期更换数据库密码
  • 限制数据库访问IP
  • 启用SSL加密连接