结伴客系统数据库设计文档
1. 数据库概览
1.1 数据库配置
测试环境
- 主机: 192.168.0.240
- 端口: 3306
- 用户名: root
- 密码: aiot$Aiot123
- 数据库: jiebandata
生产环境
- 主机: 129.211.213.226
- 端口: 9527
- 用户名: root
- 密码: aiotAiot123!
- 数据库: jiebandata
1.2 ER图
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 接口统一格式
请求格式
响应格式
3.2 通用状态码
| 状态码 |
描述 |
| 200 |
成功 |
| 400 |
请求参数错误 |
| 401 |
未授权 |
| 403 |
权限不足 |
| 404 |
资源不存在 |
| 500 |
服务器内部错误 |
3.3 管理员接口
3.3.1 管理员登录
- Endpoint: POST /admin/auth/login
- 认证要求: 无
- 请求体:
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
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 创建管理员用户
4.2 创建测试用户
4.3 创建测试商家
5. 数据库维护
5.1 备份策略
5.2 性能优化
- 为常用查询字段创建索引
- 定期分析慢查询日志
- 数据库连接池配置优化
5.3 安全措施
- 定期更换数据库密码
- 限制数据库访问IP
- 启用SSL加密连接