537 lines
16 KiB
Markdown
537 lines
16 KiB
Markdown
# 电商系统数据库初始化说明 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. 建议定期监控数据库性能,及时进行优化调整 |