Files
niumalll/scripts/database/README.md

196 lines
5.5 KiB
Markdown
Raw Normal View History

# 数据库初始化脚本
本目录包含牛牛商城项目的数据库初始化脚本,用于创建数据库表结构和插入测试数据。
## 文件说明
### 1. `init_database.sql`
- **功能**: 创建所有必要的数据库表结构
- **包含内容**:
- 用户表 (users)
- 供应商表 (suppliers)
- 司机表 (drivers)
- 车辆表 (vehicles)
- 订单表 (orders)
- 支付表 (payments)
- 运输表 (transports)
- 运输跟踪表 (transport_tracks)
- 质检记录表 (quality_records)
- 结算表 (settlements)
- 外键约束关系
### 2. `init_test_data.sql`
- **功能**: 插入测试数据
- **包含内容**:
- 管理员、采购商、贸易商、质检员等用户数据
- 5个供应商的基本信息
- 5个司机和车辆的信息
- 5个订单及相关的支付、运输、质检、结算记录
- 运输跟踪轨迹数据
### 3. `run_init.sh`
- **功能**: 一键执行数据库初始化的Shell脚本
- **特性**:
- 支持命令行参数配置数据库连接
- 自动检测数据库连接
- 可选择跳过表结构创建或测试数据插入
- 彩色输出和进度提示
- 执行完成后显示统计信息
## 使用方法
### 前置条件
1. **安装MySQL客户端**
```bash
# macOS
brew install mysql-client
# 或者安装完整的MySQL
brew install mysql
```
2. **确保数据库服务可访问**
- 本地MySQL服务已启动
- 或者远程数据库连接正常
### 执行初始化
#### 方法一使用Shell脚本推荐
```bash
# 进入脚本目录
cd /Users/aiotagro/vue/niumall/scripts/database
# 使用默认配置localhost:3306
./run_init.sh -u root -p your_password -d niumall
# 使用远程数据库
./run_init.sh \
--host nj-cdb-3pwh2kz1.sql.tencentcdb.com \
--port 20784 \
--user jiebanke \
--password 'aiot741$12346' \
--database niumall
# 只创建表结构,跳过测试数据
./run_init.sh -u root -p password --skip-data
# 只插入测试数据,跳过表结构创建
./run_init.sh -u root -p password --skip-structure
```
#### 方法二手动执行SQL文件
```bash
# 1. 创建表结构
mysql -h host -P port -u username -p database_name < init_database.sql
# 2. 插入测试数据
mysql -h host -P port -u username -p database_name < init_test_data.sql
```
### 脚本参数说明
| 参数 | 简写 | 说明 | 默认值 |
|------|------|------|--------|
| `--host` | `-h` | 数据库主机地址 | localhost |
| `--port` | `-P` | 数据库端口 | 3306 |
| `--user` | `-u` | 数据库用户名 | root |
| `--password` | `-p` | 数据库密码 | 无 |
| `--database` | `-d` | 数据库名称 | niumall |
| `--skip-structure` | 无 | 跳过表结构创建 | false |
| `--skip-data` | 无 | 跳过测试数据插入 | false |
| `--help` | 无 | 显示帮助信息 | - |
## 测试数据说明
### 用户数据
- **管理员**: admin/123456
- **采购商**: buyer001/123456, buyer002/123456
- **贸易商**: trader001/123456
- **质检员**: staff001/123456, staff002/123456
### 业务数据
- **供应商**: 5个不同地区的供应商内蒙古、山东、河南、新疆、黑龙江
- **订单**: 5个订单涵盖不同的牛种类型和交易状态
- **运输**: 包含运输中和已安排的运输任务
- **质检**: 装车前和到货质检记录
- **结算**: 预付款和尾款结算记录
## 数据库表关系
```
users (用户表)
├── orders.buyerId (买方)
├── orders.traderId (贸易商)
├── payments.user_id (支付用户)
├── quality_records.inspector_id (质检员)
└── settlements.approver_id (审批人)
suppliers (供应商表)
└── orders.supplierId (供应商)
drivers (司机表)
├── vehicles.driver_id (车辆司机)
├── transports.driver_id (运输司机)
└── transport_tracks.driver_id (跟踪司机)
vehicles (车辆表)
├── drivers.current_vehicle_id (司机当前车辆)
└── transports.vehicle_id (运输车辆)
orders (订单表)
├── payments.order_id (订单支付)
├── transports.order_id (订单运输)
├── transport_tracks.order_id (运输跟踪)
├── quality_records.order_id (质检记录)
└── settlements.order_id (结算记录)
transports (运输表)
└── transport_tracks.transport_id (运输跟踪)
```
## 注意事项
1. **权限要求**: 执行脚本的数据库用户需要有CREATE、DROP、INSERT、SELECT权限
2. **数据清理**: 脚本会删除已存在的表,请确保备份重要数据
3. **字符集**: 所有表使用utf8mb4字符集支持emoji和特殊字符
4. **外键约束**: 表之间设置了外键约束,删除数据时需注意依赖关系
5. **测试环境**: 建议在测试环境中先验证脚本的正确性
## 故障排除
### 1. MySQL客户端未安装
```bash
# macOS安装MySQL客户端
brew install mysql-client
# 添加到PATH如果需要
echo 'export PATH="/opt/homebrew/opt/mysql-client/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
```
### 2. 数据库连接失败
- 检查数据库服务是否启动
- 验证主机地址、端口、用户名、密码是否正确
- 确认网络连接和防火墙设置
### 3. 权限不足
```sql
-- 为用户授予必要权限
GRANT CREATE, DROP, INSERT, SELECT, UPDATE, DELETE ON niumall.* TO 'username'@'%';
FLUSH PRIVILEGES;
```
### 4. 外键约束错误
- 确保按照正确顺序创建表
- 检查外键引用的表和字段是否存在
- 验证数据类型是否匹配
## 更新日志
- **2024-01-21**: 初始版本,包含完整的表结构和测试数据
- 支持10个核心业务表
- 提供一键初始化脚本
- 包含丰富的测试数据用于开发调试