重构动物认领页面和导航菜单,统一使用SVG图标并优化交互体验

This commit is contained in:
ylweng
2025-09-21 21:12:27 +08:00
parent 467a4ead10
commit 14aca938de
64 changed files with 25067 additions and 18256 deletions

View File

@@ -1,52 +1,138 @@
# 🗄️ 结伴客数据库设计文档
# 解班客数据库设计文档
## 📋 数据库概述
## 1. 概述
结伴客系统采用MySQL 8.0作为主要数据存储,设计了完整的数据库架构来支持结伴旅行、动物认领、商家服务等核心业务功能。数据库设计遵循第三范式,确保数据一致性和完整性。
### 1.1 项目简介
解班客是一个综合性的社交旅行平台,融合了结伴旅行、动物认领、商家服务等多种功能。本文档详细描述了支撑整个平台运行的数据库设计方案。
## 🔧 数据库配置
### 1.2 设计原则
- **数据一致性**:确保数据的完整性和一致性
- **性能优化**:合理设计索引,优化查询性能
- **扩展性**:支持业务快速发展和功能扩展
- **安全性**:敏感数据加密存储,权限控制
- **可维护性**:清晰的表结构和命名规范
### 环境配置
### 1.3 技术选型
- **主数据库**MySQL 8.0
- **缓存数据库**Redis 6.0
- **文件存储**腾讯云COS
#### 开发环境
- **主机**localhost
- **端口**3306
- **数据库名**jiebandata_dev
### 1.4 数据库配置
本项目使用统一的数据库实例,所有环境共享同一个数据库配置:
#### 数据库连接信息
- **主机地址**nj-cdb-3pwh2kz1.sql.tencentcdb.com
- **端口**20784
- **用户名**jiebanke
- **密码**aiot741$12346
- **数据库名**jbkdata
- **连接池大小**10
- **字符集**utf8mb4
- **排序规则**utf8mb4_unicode_ci
- **时区**+08:00
#### 测试环境
- **主机**192.168.0.240
- **端口**3306
- **用户名**root
- **密码**aiot$Aiot123
- **数据库名**jiebandata_test
#### 生产环境
- **主机**129.211.213.226
- **端口**9527
- **用户名**root
- **密码**aiotAiot123!
- **数据库名**jiebandata
### 数据库架构
#### 主从复制架构
```mermaid
graph LR
A[应用服务器] --> B[MySQL主库<br/>写操作]
B --> C[MySQL从库1<br/>读操作]
B --> D[MySQL从库2<br/>读操作]
A --> C
A --> D
E[备份服务器] --> B
F[监控系统] --> B
F --> C
F --> D
#### 环境变量配置
```bash
# 数据库配置
DB_HOST=nj-cdb-3pwh2kz1.sql.tencentcdb.com
DB_PORT=20784
DB_USER=jiebanke
DB_PASSWORD=aiot741$12346
DB_NAME=jbkdata
```
## 📊 数据库ER图
#### 连接配置示例
```javascript
// Node.js 连接配置
const dbConfig = {
host: process.env.DB_HOST || 'nj-cdb-3pwh2kz1.sql.tencentcdb.com',
port: process.env.DB_PORT || 20784,
user: process.env.DB_USER || 'jiebanke',
password: process.env.DB_PASSWORD || 'aiot741$12346',
database: process.env.DB_NAME || 'jbkdata',
connectionLimit: 10,
charset: 'utf8mb4',
timezone: '+08:00'
};
```
## 2. 数据库架构
### 2.1 整体架构
```mermaid
graph TB
subgraph "应用层"
A[小程序App]
B[管理后台]
C[官方网站]
D[后端API]
end
subgraph "数据访问层"
E[ORM层 - Sequelize]
F[缓存层 - Redis]
end
subgraph "数据存储层"
G[MySQL数据库<br/>jbkdata]
H[文件存储 - 腾讯云COS]
end
A --> D
B --> D
C --> D
D --> E
D --> F
E --> G
F --> G
D --> H
```
### 2.2 数据库连接架构
```mermaid
graph TB
subgraph "应用服务"
A[小程序API]
B[管理后台API]
C[官网API]
end
subgraph "连接池管理"
D[连接池<br/>最大连接数: 10]
end
subgraph "腾讯云数据库"
E[MySQL 8.0<br/>nj-cdb-3pwh2kz1.sql.tencentcdb.com:20784<br/>数据库: jbkdata]
end
A --> D
B --> D
C --> D
D --> E
## 3. 数据库设计原则
### 3.1 表设计规范
- **命名规范**:使用小写字母和下划线,表名使用复数形式
- **主键设计**:统一使用自增整型主键 `id`
- **时间字段**:统一使用 `created_at` 和 `updated_at`
- **软删除**:使用 `deleted_at` 字段实现软删除
- **状态字段**:使用 `status` 字段管理记录状态
### 3.2 索引设计原则
- **主键索引**:每个表必须有主键
- **唯一索引**:对唯一性约束字段创建唯一索引
- **复合索引**:根据查询场景创建合适的复合索引
- **外键索引**:对外键字段创建索引
### 3.3 数据类型规范
- **整型**:使用 `INT` 或 `BIGINT`
- **字符串**:使用 `VARCHAR` 或 `TEXT`
- **时间**:使用 `TIMESTAMP` 或 `DATETIME`
- **枚举**:使用 `ENUM` 或 `TINYINT`
- **布尔**:使用 `TINYINT(1)`
## 4. 数据库ER图
```mermaid
erDiagram
@@ -720,12 +806,59 @@ SELECT
s.cardinality
FROM information_schema.tables t
LEFT JOIN information_schema.statistics s ON t.table_name = s.table_name
WHERE t.table_schema = 'jiebandata'
WHERE t.table_schema = 'jbkdata'
AND s.index_name IS NOT NULL
AND s.index_name != 'PRIMARY';
```
## 12. 数据库连接和维护
### 12.1 连接管理
```javascript
// 数据库连接池配置
const mysql = require('mysql2/promise');
const pool = mysql.createPool({
host: 'nj-cdb-3pwh2kz1.sql.tencentcdb.com',
port: 20784,
user: 'jiebanke',
password: 'aiot741$12346',
database: 'jbkdata',
connectionLimit: 10,
charset: 'utf8mb4',
timezone: '+08:00',
acquireTimeout: 60000,
timeout: 60000,
reconnect: true
});
module.exports = pool;
```
### 12.2 数据库维护脚本
```bash
#!/bin/bash
# 数据库备份脚本
DB_HOST="nj-cdb-3pwh2kz1.sql.tencentcdb.com"
DB_PORT="20784"
DB_USER="jiebanke"
DB_PASSWORD="aiot741$12346"
DB_NAME="jbkdata"
# 创建备份
mysqldump -h$DB_HOST -P$DB_PORT -u$DB_USER -p$DB_PASSWORD $DB_NAME > backup_$(date +%Y%m%d_%H%M%S).sql
echo "数据库备份完成"
```
### 12.3 监控和告警
- **连接数监控**:监控当前连接数,避免超过连接池限制
- **慢查询监控**监控执行时间超过2秒的查询
- **磁盘空间监控**:监控数据库磁盘使用情况
- **性能指标监控**QPS、TPS、响应时间等关键指标
---
*文档版本v1.0*
*最后更新2025年1月*
*文档版本v2.0*
*最后更新2025年1月*
*数据库实例腾讯云MySQL - jbkdata*