chore: 增加数据库说明文档

This commit is contained in:
2025-11-19 18:24:10 +08:00
parent 7ad78f1ee6
commit 9906b8eba1
6 changed files with 27364 additions and 0 deletions

537
docs/db/README_v2.0.md Normal file
View File

@@ -0,0 +1,537 @@
# 电商系统数据库初始化说明 v2.0
## 概述
本文档描述了电商系统 v2.0 版本的数据库结构初始化脚本 `init_v2.0.sql`。该脚本包含 **294个数据表** 的创建语句,相比 v1.0 版本新增了 14 个表,扩展了系统的功能模块,增强了业务支持能力。
## 版本更新亮点
### 🆕 v2.0 新增功能模块
- **业务员管理** - 客户关系管理增强
- **会员卡系统** - 会员服务和储值功能
- **案例展示** - 成功案例管理
- **视频管理** - 多媒体内容支持
- **导入导出** - 批量数据处理
### 📊 数据统计
- 总表数:**294个**较v1.0增加14个
- 新增模块:**4个**
- 优化表结构:**多处字段扩展和索引优化**
## 系统架构
- **数据库引擎**: MySQL 8.0+
- **字符集**: utf8 / utf8mb4
- **行格式**: DYNAMIC
- **存储引擎**: InnoDB / MyISAM按需选择
- **时间字段**: Unix时间戳格式
## 主要功能模块
### 1. 插件系统 (Addons)
- `lucky_addon` - 插件表:存储系统插件基本信息
- `lucky_addon_quick` - 快速插件表:存储快速插件套餐信息
### 2. 广告系统 (Advertisement)
- `lucky_adv` - 广告表:管理广告内容和配置
- `lucky_adv_position` - 广告位表:广告位置和规格管理
### 3. 媒体管理 (Media)
- `lucky_album` - 相册表:图片相册分类管理
- `lucky_album_pic` - 相册图片表:图片文件存储
- `lucky_cases_files` - 案例文件表:案例相关文件管理
- `lucky_cases_video` - 视频表:多媒体视频内容管理
### 4. 地区管理 (Area)
- `lucky_area` - 地址表:行政区划数据存储
### 5. 内容管理 (Content)
- `lucky_article` - 文章表:文章内容存储
- `lucky_article_category` - 文章分类表:文章分类管理
- `lucky_cases` - 案例表:成功案例展示 🆕
### 6. 盲盒系统 (Blind Box)
- `lucky_blindbox` - 盲盒表:盲盒活动配置
- `lucky_blindbox_category` - 盲盒分类表
- `lucky_blindbox_goods` - 盲盒商品表
- `lucky_blindbox_member_group` - 盲盒参与组表
- `lucky_blindbox_order` - 盲盒订单表
### 7. 收银系统 (Cashier)
- `lucky_cashier_auth` - 收银权限表
- `lucky_cashier_auth_group` - 收银权限组表
- `lucky_cashier_pendorder` - 本地服务挂单表
- `lucky_cashier_pendorder_goods` - 挂单订单项表
- `lucky_change_shifts_record` - 收银台交接班记录
### 8. 系统配置 (System)
- `lucky_config` - 系统配置表
- `lucky_document` - 系统文档表
- `lucky_cron` - 计划任务表
- `lucky_cron_log` - 任务执行日志表
### 9. 自定义页面 (DIY)
- `lucky_diy_template` - 自定义模板页面类型表
- `lucky_diy_template_category` - 自定义模板分类表
- `lucky_diy_template_goods` - 自定义模板组表
- `lucky_diy_template_goods_item` - 模板组页面表
- `lucky_diy_theme` - 自定义模板主题风格配色表
- `lucky_diy_view_util` - 自定义模板组件表
### 10. 物流配送 (Express)
- `lucky_express_company` - 店铺物流公司表
- `lucky_express_company_template` - 系统物流公司表
- `lucky_express_deliver` - 配送员表
- `lucky_express_delivery_package` - 订单物流信息表
- `lucky_express_electronicsheet` - 电子面单表
- `lucky_express_template` - 运费模板表
- `lucky_express_template_free_shipping` - 运费模板免邮地区表
- `lucky_express_template_item` - 运费模板细节表
### 11. 分销系统 (Distribution)
- `lucky_fenxiao` - 分销商表
- `lucky_fenxiao_account` - 分销商流水表
- `lucky_fenxiao_apply` - 分销商申请表
- `lucky_fenxiao_goods` - 分销商品表
- `lucky_fenxiao_goods_collect` - 分销商关注商品表
- `lucky_fenxiao_goods_sku` - 分销商品SKU表
- `lucky_fenxiao_level` - 分销等级配置表
- `lucky_fenxiao_order` - 分销订单表
- `lucky_fenxiao_withdraw` - 分销商提现表
### 12. 礼品卡系统 (Gift Card)
- `lucky_giftcard` - 礼品卡表
- `lucky_giftcard_card` - 礼品卡获取记录表
- `lucky_giftcard_card_blessing` - 礼品卡祝福语表
- `lucky_giftcard_card_goods` - 礼品卡商品项表
### 13. 会员卡系统 (Membership Card) 🆕
- `lucky_card` - 会员卡表:会员卡信息管理
- `lucky_card_import_log` - 会员导入记录表
- `lucky_card_import_record` - 会员导入批次记录表
### 14. 业务员管理 (Sales Management) 🆕
- `lucky_business` - 业务员表:销售团队管理
### 15. 表单系统 (Form)
- `lucky_form` - 表单配置表
- `lucky_form_data` - 表单数据表
### 16. 文件管理 (Files)
- `lucky_files` - 文件管理表
## v2.0 新增表详细说明
### 业务员管理
- **`lucky_business`** - 业务员信息表,用于管理销售团队,支持客户分配和业绩跟踪
### 会员卡系统
- **`lucky_card`** - 会员卡核心表,存储卡号、卡密、状态等信息
- **`lucky_card_import_log`** - 会员卡导入详细日志,记录每张卡的导入状态
- **`lucky_card_import_record`** - 会员卡导入批次记录,统计导入成功失败数量
### 案例展示系统
- **`lucky_cases`** - 企业案例展示表,包含案例详情、联系人信息
- **`lucky_cases_files`** - 案例相关文件管理
- **`lucky_cases_video`** - 案例视频管理,支持多媒体展示
## 核心字段说明
### 通用字段
- `site_id` - 站点ID多站点支持
- `create_time` - 创建时间Unix时间戳
- `update_time` - 修改时间Unix时间戳
- `status` - 状态通常0=关闭1=开启
### 会员卡系统字段
- `account` - 卡号:会员卡唯一标识
- `password` - 卡密:会员卡验证码
- `member_id` - 领取用户绑定的会员ID
- `use_time` - 领取时间:卡被使用的时间戳
### 案例系统字段
- `realname` - 联系人姓名
- `mobile` - 联系电话
- `address` - 联系地址
- `position` - 职位信息
- `displayorder` - 显示排序
## 安装说明
### 1. 环境要求
- MySQL 8.0+ 推荐8.0.33+
- PHP 7.4+ 推荐8.0+
- 存储空间建议至少3GB
- 内存建议至少4GB
### 2. 全新安装
```bash
# 1. 创建数据库
mysql -u root -p
CREATE DATABASE shop_v2 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# 2. 导入v2.0初始化脚本
mysql -u root -p shop_v2 < init_v2.0.sql
# 3. 验证安装
mysql -u root -p shop_v2 -e "SELECT COUNT(*) as table_count FROM information_schema.tables WHERE table_schema='shop_v2';"
# 应显示 294
```
### 3. 从v1.0升级
```bash
# 1. 备份v1.0数据
mysqldump -u root -p shop_v1 > backup_v1.0.sql
# 2. 创建v2.0数据库
mysql -u root -p -e "CREATE DATABASE shop_v2 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
# 3. 导入v2.0结构
mysql -u root -p shop_v2 < init_v2.0.sql
# 4. 数据迁移(需要自定义迁移脚本)
# 根据具体业务需求编写数据迁移脚本
```
### 4. 权限配置
```sql
-- 创建专用数据库用户
CREATE USER 'shop_v2_user'@'localhost' IDENTIFIED BY 'your_secure_password';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, INDEX, ALTER, DROP, CREATE TEMPORARY TABLES, EXECUTE ON shop_v2.* TO 'shop_v2_user'@'localhost';
FLUSH PRIVILEGES;
```
```sql
-- 创建专用数据库用户
CREATE USER 'shop_v2_user'@'%' IDENTIFIED BY 'your_secure_password';
GRANT ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP, EVENT, EXECUTE, INDEX, INSERT, LOCK TABLES, REFERENCES, SELECT, SHOW VIEW, TRIGGER, UPDATE ON shop_v2.* TO shop_mallnew;
FLUSH PRIVILEGES;
```
## 性能优化建议
### 1. MySQL配置优化
```ini
# /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
# 基础配置
default-storage-engine = InnoDB
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 内存配置
innodb_buffer_pool_size = 2G
innodb_log_file_size = 256M
innodb_log_buffer_size = 16M
key_buffer_size = 32M
tmp_table_size = 64M
max_heap_table_size = 64M
# 查询缓存
query_cache_type = 1
query_cache_size = 256M
query_cache_limit = 2M
# 连接配置
max_connections = 500
max_connect_errors = 1000
wait_timeout = 28800
interactive_timeout = 28800
# InnoDB优化
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
innodb_file_per_table = 1
innodb_read_io_threads = 8
innodb_write_io_threads = 8
```
### 2. 分区策略
```sql
-- 大表按月分区(示例:订单表)
ALTER TABLE lucky_blindbox_order PARTITION BY RANGE (YEAR(create_time)*100 + MONTH(create_time)) (
PARTITION p202401 VALUES LESS THAN (202402),
PARTITION p202402 VALUES LESS THAN (202403),
PARTITION p202403 VALUES LESS THAN (202404),
PARTITION p202404 VALUES LESS THAN (202405),
PARTITION p202405 VALUES LESS THAN (202406),
PARTITION p202406 VALUES LESS THAN (202407),
PARTITION pmax VALUES LESS THAN MAXVALUE
);
-- 自动管理分区(创建存储过程)
DELIMITER //
CREATE PROCEDURE manage_monthly_partitions()
BEGIN
DECLARE current_month INT;
DECLARE next_month INT;
SET current_month = DATE_FORMAT(NOW(), '%Y%m');
SET next_month = DATE_FORMAT(DATE_ADD(NOW(), INTERVAL 1 MONTH), '%Y%m');
-- 为下个月创建分区
SET @sql = CONCAT('ALTER TABLE lucky_blindbox_order REORGANIZE PARTITION pmax INTO (PARTITION p', next_month, ' VALUES LESS THAN (', next_month + 1, '), PARTITION pmax VALUES LESS THAN MAXVALUE)');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END //
DELIMITER ;
```
### 3. 索引优化
```sql
-- 检查未使用的索引
SELECT
object_schema,
object_name,
index_name
FROM performance_schema.table_io_waits_summary_by_index_usage
WHERE index_name IS NOT NULL
AND count_star = 0
AND object_schema = 'shop_v2';
-- 创建复合索引优化查询性能
CREATE INDEX idx_member_site_status ON lucky_member(site_id, status);
CREATE INDEX idx_order_member_time ON lucky_blindbox_order(member_id, create_time);
CREATE INDEX idx_goods_site_category ON lucky_goods(site_id, category_id);
```
## 备份与恢复策略
### 1. 全量备份脚本
```bash
#!/bin/bash
# backup_full.sh
DB_NAME="shop_v2"
DB_USER="shop_v2_user"
DB_PASS="your_password"
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
# 创建备份目录
mkdir -p $BACKUP_DIR
# 执行全量备份
mysqldump -u $DB_USER -p$DB_PASS \
--single-transaction \
--routines \
--triggers \
--events \
--hex-blob \
--set-gtid-purged=OFF \
$DB_NAME | gzip > $BACKUP_DIR/full_backup_$DATE.sql.gz
# 清理7天前的备份
find $BACKUP_DIR -name "full_backup_*.sql.gz" -mtime +7 -delete
echo "Full backup completed: full_backup_$DATE.sql.gz"
```
### 2. 增量备份脚本
```bash
#!/bin/bash
# backup_incremental.sh
DB_NAME="shop_v2"
DB_USER="shop_v2_user"
DB_PASS="your_password"
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
LAST_BACKUP=$(mysql -u $DB_USER -p$DB_PASS -e "SELECT MAX(update_time) FROM $DB_NAME.lucky_blindbox_order;" -s -N)
# 执行增量备份
mysqldump -u $DB_USER -p$DB_PASS \
--single-transaction \
--where="create_time > UNIX_TIMESTAMP('$LAST_BACKUP')" \
$DB_NAME | gzip > $BACKUP_DIR/incremental_backup_$DATE.sql.gz
echo "Incremental backup completed: incremental_backup_$DATE.sql.gz"
```
### 3. 恢复脚本
```bash
#!/bin/bash
# restore.sh
DB_NAME="shop_v2"
DB_USER="shop_v2_user"
DB_PASS="your_password"
BACKUP_FILE=$1
if [ -z "$BACKUP_FILE" ]; then
echo "Usage: $0 <backup_file>"
exit 1
fi
# 解压备份文件
gunzip -c $BACKUP_FILE | mysql -u $DB_USER -p$DB_PASS $DB_NAME
echo "Database restored from: $BACKUP_FILE"
```
## 监控与维护
### 1. 性能监控查询
```sql
-- 监控慢查询
SELECT
start_time,
query_time,
lock_time,
rows_sent,
rows_examined,
sql_text
FROM mysql.slow_log
WHERE start_time > DATE_SUB(NOW(), INTERVAL 1 DAY)
ORDER BY query_time DESC
LIMIT 10;
-- 监控表大小
SELECT
table_name,
ROUND(((data_length + index_length) / 1024 / 1024), 2) AS 'Size (MB)',
table_rows
FROM information_schema.tables
WHERE table_schema = 'shop_v2'
ORDER BY (data_length + index_length) DESC;
-- 监控索引使用情况
SELECT
object_schema,
object_name,
index_name,
count_read,
count_write,
sum_timer_read/1000000000 AS read_time_sec,
sum_timer_write/1000000000 AS write_time_sec
FROM performance_schema.table_io_waits_summary_by_index_usage
WHERE object_schema = 'shop_v2'
ORDER BY sum_timer_read DESC;
```
### 2. 定期维护任务
```sql
-- 优化表结构
CREATE EVENT IF NOT EXISTS optimize_tables
ON SCHEDULE EVERY 1 WEEK
STARTS CURRENT_TIMESTAMP
DO
BEGIN
SET @tables = (
SELECT GROUP_CONCAT(table_name SEPARATOR ',')
FROM information_schema.tables
WHERE table_schema = 'shop_v2'
AND table_rows > 10000
);
SET @sql = CONCAT('OPTIMIZE TABLE ', @tables);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END;
-- 清理过期数据
CREATE EVENT IF NOT EXISTS cleanup_old_data
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_TIMESTAMP
DO
BEGIN
-- 清理30天前的日志数据
DELETE FROM lucky_cron_log WHERE create_time < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 30 DAY));
-- 清理已删除的临时数据
DELETE FROM lucky_form_data WHERE create_time < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 90 DAY));
END;
```
## 安全加固建议
### 1. 数据库安全配置
```sql
-- 禁用不必要的功能
SET GLOBAL local_infile = OFF;
SET GLOBAL symbolic_links = OFF;
-- 设置密码策略
SET GLOBAL validate_password.policy = 'MEDIUM';
SET GLOBAL validate_password.length = 12;
-- 启用审计日志
SET GLOBAL audit_log_format = 'JSON';
SET GLOBAL audit_log_policy = 'ALL';
```
### 2. 用户权限管理
```sql
-- 创建不同权限级别的用户
-- 只读用户
CREATE USER 'shop_readonly'@'%' IDENTIFIED BY 'readonly_password';
GRANT SELECT ON shop_v2.* TO 'shop_readonly'@'%';
-- 应用用户
CREATE USER 'shop_app'@'%' IDENTIFIED BY 'app_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON shop_v2.* TO 'shop_app'@'%';
-- 管理用户
CREATE USER 'shop_admin'@'localhost' IDENTIFIED BY 'admin_password';
GRANT ALL PRIVILEGES ON shop_v2.* TO 'shop_admin'@'localhost';
```
## 常见问题与解决方案
### Q1: 升级后表数量不对
**A**: 检查是否所有表都成功创建
```sql
SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'shop_v2';
-- 应该返回 294
```
### Q2: 新增功能无法使用
**A**: 确认相关表已正确创建并检查权限
```sql
SHOW TABLES LIKE 'lucky_%';
```
### Q3: 性能下降
**A**: 检查索引和查询优化
```sql
EXPLAIN SELECT * FROM lucky_blindbox_order WHERE site_id = 1;
```
## 版本兼容性
| 版本 | MySQL最低版本 | PHP最低版本 | 主要特性 |
|------|--------------|-------------|----------|
| v1.0 | 5.7+ | 7.2+ | 基础电商功能280表 |
| v2.0 | 8.0+ | 7.4+ | 扩展功能294表+新增模块 |
## 技术支持
如遇到问题,请提供以下信息:
- MySQL版本和配置
- 系统错误日志
- 相关表的 `SHOW CREATE TABLE` 输出
- 问题重现步骤
- 系统负载情况
---
**注意**:
1. v2.0版本包含更多功能,建议在生产环境升级前充分测试
2. 新增的会员卡和案例模块可能需要额外的业务逻辑适配
3. 建议定期监控数据库性能,及时进行优化调整