重构动物认领页面和导航菜单,统一使用SVG图标并优化交互体验
This commit is contained in:
219
docs/数据库设计文档.md
219
docs/数据库设计文档.md
@@ -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*
|
||||
Reference in New Issue
Block a user