836 lines
37 KiB
Markdown
836 lines
37 KiB
Markdown
# 智能项目定价模型 - 数据库设计
|
||
|
||
> **版本**:v1.0
|
||
> **创建日期**:2026-01-19
|
||
> **最后更新**:2026-01-19
|
||
> **负责人**:待定
|
||
|
||
---
|
||
|
||
## 1. 数据库规范
|
||
|
||
遵循《瑞小美系统技术栈标准与字符标准》:
|
||
|
||
| 项目 | 标准 |
|
||
|------|------|
|
||
| **数据库** | MySQL 8.0 |
|
||
| **字符集** | utf8mb4 |
|
||
| **排序规则** | utf8mb4_unicode_ci |
|
||
| **时区** | Asia/Shanghai (UTC+8) |
|
||
| **日期格式** | ISO 8601 (YYYY-MM-DDTHH:mm:ss) |
|
||
|
||
### 命名规范
|
||
|
||
| 类型 | 规范 | 示例 |
|
||
|------|------|------|
|
||
| 表名 | 小写,下划线分隔,复数形式 | `projects`, `cost_items` |
|
||
| 字段名 | 小写,下划线分隔 | `project_name`, `created_at` |
|
||
| 主键 | `id`,自增整数或 UUID | `id BIGINT AUTO_INCREMENT` |
|
||
| 外键 | `{关联表}_id` | `project_id` |
|
||
| 时间戳 | `created_at`, `updated_at` | - |
|
||
| 布尔值 | `is_` 或 `has_` 前缀 | `is_active`, `has_discount` |
|
||
| 金额 | DECIMAL(12, 2) | `unit_price DECIMAL(12, 2)` |
|
||
| 百分比 | DECIMAL(5, 2) | `discount_rate DECIMAL(5, 2)` |
|
||
|
||
---
|
||
|
||
## 2. ER 图
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────────────────────────┐
|
||
│ 成本核算模块 │
|
||
├─────────────────────────────────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
|
||
│ │ projects │ │ materials │ │ equipments │ │
|
||
│ │ 服务项目 │ │ 耗材 │ │ 设备 │ │
|
||
│ └────────┬────────┘ └────────┬────────┘ └────────┬────────┘ │
|
||
│ │ │ │ │
|
||
│ │ 1:N │ M:N │ M:N │
|
||
│ ▼ ▼ ▼ │
|
||
│ ┌──────────────────────────────────────────────────────────────┐ │
|
||
│ │ project_cost_items │ │
|
||
│ │ 项目成本明细 │ │
|
||
│ └──────────────────────────────────────────────────────────────┘ │
|
||
│ │ │
|
||
│ │ ┌─────────────────┐ │
|
||
│ │ │ staff_levels │ │
|
||
│ │ │ 人员级别 │ │
|
||
│ │ └────────┬────────┘ │
|
||
│ │ │ │
|
||
│ ▼ ▼ │
|
||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||
│ │ project_labor_costs │ │
|
||
│ │ 项目人工成本 │ │
|
||
│ └─────────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
│ ┌─────────────────┐ │
|
||
│ │ fixed_costs │ ────────────────────────────────────────────────────────────► │
|
||
│ │ 固定成本 │ │
|
||
│ └─────────────────┘ │
|
||
│ │
|
||
└─────────────────────────────────────────────────────────────────────────────────────┘
|
||
|
||
┌─────────────────────────────────────────────────────────────────────────────────────┐
|
||
│ 市场行情模块 │
|
||
├─────────────────────────────────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ ┌─────────────────┐ ┌─────────────────┐ │
|
||
│ │ competitors │ ─────1:N────► │ competitor_prices│ │
|
||
│ │ 竞品机构 │ │ 竞品价格 │ │
|
||
│ └─────────────────┘ └────────┬────────┘ │
|
||
│ │ │
|
||
│ │ N:1 │
|
||
│ ▼ │
|
||
│ ┌─────────────────┐ │
|
||
│ │ projects │ │
|
||
│ └─────────────────┘ │
|
||
│ │
|
||
│ ┌─────────────────┐ │
|
||
│ │ benchmark_prices│ 标杆价格参考 │
|
||
│ └─────────────────┘ │
|
||
│ │
|
||
└─────────────────────────────────────────────────────────────────────────────────────┘
|
||
|
||
┌─────────────────────────────────────────────────────────────────────────────────────┐
|
||
│ 定价与模拟模块 │
|
||
├─────────────────────────────────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ ┌─────────────────┐ ┌─────────────────┐ │
|
||
│ │ pricing_plans │ ─────1:N────► │profit_simulations│ │
|
||
│ │ 定价方案 │ │ 利润模拟 │ │
|
||
│ └────────┬────────┘ └─────────────────┘ │
|
||
│ │ │
|
||
│ │ N:1 │
|
||
│ ▼ │
|
||
│ ┌─────────────────┐ │
|
||
│ │ projects │ │
|
||
│ └─────────────────┘ │
|
||
│ │
|
||
└─────────────────────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 3. 表结构设计
|
||
|
||
### 3.1 基础模块
|
||
|
||
#### 3.1.1 projects(服务项目)
|
||
|
||
| 字段 | 类型 | 约束 | 说明 |
|
||
|------|------|------|------|
|
||
| id | BIGINT | PK, AUTO_INCREMENT | 主键 |
|
||
| project_code | VARCHAR(50) | UNIQUE, NOT NULL | 项目编码 |
|
||
| project_name | VARCHAR(100) | NOT NULL | 项目名称 |
|
||
| category_id | BIGINT | FK → categories.id | 项目分类 |
|
||
| description | TEXT | - | 项目描述 |
|
||
| duration_minutes | INT | NOT NULL, DEFAULT 0 | 操作时长(分钟)|
|
||
| is_active | TINYINT(1) | NOT NULL, DEFAULT 1 | 是否启用 |
|
||
| created_at | DATETIME | NOT NULL | 创建时间 |
|
||
| updated_at | DATETIME | NOT NULL | 更新时间 |
|
||
| created_by | BIGINT | FK → users.id | 创建人 |
|
||
|
||
**索引**:
|
||
- `idx_project_code` (project_code)
|
||
- `idx_category_id` (category_id)
|
||
- `idx_is_active` (is_active)
|
||
|
||
```sql
|
||
CREATE TABLE projects (
|
||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||
project_code VARCHAR(50) NOT NULL UNIQUE,
|
||
project_name VARCHAR(100) NOT NULL,
|
||
category_id BIGINT,
|
||
description TEXT,
|
||
duration_minutes INT NOT NULL DEFAULT 0,
|
||
is_active TINYINT(1) NOT NULL DEFAULT 1,
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
created_by BIGINT,
|
||
INDEX idx_project_code (project_code),
|
||
INDEX idx_category_id (category_id),
|
||
INDEX idx_is_active (is_active)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
```
|
||
|
||
#### 3.1.2 categories(项目分类)
|
||
|
||
| 字段 | 类型 | 约束 | 说明 |
|
||
|------|------|------|------|
|
||
| id | BIGINT | PK, AUTO_INCREMENT | 主键 |
|
||
| category_name | VARCHAR(50) | NOT NULL | 分类名称 |
|
||
| parent_id | BIGINT | FK → categories.id | 父分类 |
|
||
| sort_order | INT | NOT NULL, DEFAULT 0 | 排序 |
|
||
| is_active | TINYINT(1) | NOT NULL, DEFAULT 1 | 是否启用 |
|
||
| created_at | DATETIME | NOT NULL | 创建时间 |
|
||
| updated_at | DATETIME | NOT NULL | 更新时间 |
|
||
|
||
```sql
|
||
CREATE TABLE categories (
|
||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||
category_name VARCHAR(50) NOT NULL,
|
||
parent_id BIGINT,
|
||
sort_order INT NOT NULL DEFAULT 0,
|
||
is_active TINYINT(1) NOT NULL DEFAULT 1,
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
INDEX idx_parent_id (parent_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
```
|
||
|
||
---
|
||
|
||
### 3.2 成本核算模块
|
||
|
||
#### 3.2.1 materials(耗材)
|
||
|
||
| 字段 | 类型 | 约束 | 说明 |
|
||
|------|------|------|------|
|
||
| id | BIGINT | PK, AUTO_INCREMENT | 主键 |
|
||
| material_code | VARCHAR(50) | UNIQUE, NOT NULL | 耗材编码 |
|
||
| material_name | VARCHAR(100) | NOT NULL | 耗材名称 |
|
||
| unit | VARCHAR(20) | NOT NULL | 单位(支/ml/个)|
|
||
| unit_price | DECIMAL(12,2) | NOT NULL | 单价 |
|
||
| supplier | VARCHAR(100) | - | 供应商 |
|
||
| material_type | VARCHAR(20) | NOT NULL | 类型:consumable/injectable/product |
|
||
| is_active | TINYINT(1) | NOT NULL, DEFAULT 1 | 是否启用 |
|
||
| created_at | DATETIME | NOT NULL | 创建时间 |
|
||
| updated_at | DATETIME | NOT NULL | 更新时间 |
|
||
|
||
```sql
|
||
CREATE TABLE materials (
|
||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||
material_code VARCHAR(50) NOT NULL UNIQUE,
|
||
material_name VARCHAR(100) NOT NULL,
|
||
unit VARCHAR(20) NOT NULL,
|
||
unit_price DECIMAL(12,2) NOT NULL,
|
||
supplier VARCHAR(100),
|
||
material_type VARCHAR(20) NOT NULL COMMENT 'consumable-耗材, injectable-针剂, product-产品',
|
||
is_active TINYINT(1) NOT NULL DEFAULT 1,
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
INDEX idx_material_code (material_code),
|
||
INDEX idx_material_type (material_type)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
```
|
||
|
||
#### 3.2.2 equipments(设备)
|
||
|
||
| 字段 | 类型 | 约束 | 说明 |
|
||
|------|------|------|------|
|
||
| id | BIGINT | PK, AUTO_INCREMENT | 主键 |
|
||
| equipment_code | VARCHAR(50) | UNIQUE, NOT NULL | 设备编码 |
|
||
| equipment_name | VARCHAR(100) | NOT NULL | 设备名称 |
|
||
| original_value | DECIMAL(12,2) | NOT NULL | 设备原值 |
|
||
| residual_rate | DECIMAL(5,2) | NOT NULL, DEFAULT 5.00 | 残值率(%) |
|
||
| service_years | INT | NOT NULL | 预计使用年限 |
|
||
| estimated_uses | INT | NOT NULL | 预计使用次数 |
|
||
| depreciation_per_use | DECIMAL(12,4) | NOT NULL | 单次折旧成本(计算字段)|
|
||
| purchase_date | DATE | - | 购入日期 |
|
||
| is_active | TINYINT(1) | NOT NULL, DEFAULT 1 | 是否启用 |
|
||
| created_at | DATETIME | NOT NULL | 创建时间 |
|
||
| updated_at | DATETIME | NOT NULL | 更新时间 |
|
||
|
||
```sql
|
||
CREATE TABLE equipments (
|
||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||
equipment_code VARCHAR(50) NOT NULL UNIQUE,
|
||
equipment_name VARCHAR(100) NOT NULL,
|
||
original_value DECIMAL(12,2) NOT NULL,
|
||
residual_rate DECIMAL(5,2) NOT NULL DEFAULT 5.00,
|
||
service_years INT NOT NULL,
|
||
estimated_uses INT NOT NULL,
|
||
depreciation_per_use DECIMAL(12,4) NOT NULL COMMENT '单次折旧 = (原值 - 残值) / 总次数',
|
||
purchase_date DATE,
|
||
is_active TINYINT(1) NOT NULL DEFAULT 1,
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
INDEX idx_equipment_code (equipment_code)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
```
|
||
|
||
#### 3.2.3 staff_levels(人员级别)
|
||
|
||
| 字段 | 类型 | 约束 | 说明 |
|
||
|------|------|------|------|
|
||
| id | BIGINT | PK, AUTO_INCREMENT | 主键 |
|
||
| level_code | VARCHAR(20) | UNIQUE, NOT NULL | 级别编码 |
|
||
| level_name | VARCHAR(50) | NOT NULL | 级别名称 |
|
||
| hourly_rate | DECIMAL(10,2) | NOT NULL | 时薪(元/小时)|
|
||
| is_active | TINYINT(1) | NOT NULL, DEFAULT 1 | 是否启用 |
|
||
| created_at | DATETIME | NOT NULL | 创建时间 |
|
||
| updated_at | DATETIME | NOT NULL | 更新时间 |
|
||
|
||
```sql
|
||
CREATE TABLE staff_levels (
|
||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||
level_code VARCHAR(20) NOT NULL UNIQUE,
|
||
level_name VARCHAR(50) NOT NULL,
|
||
hourly_rate DECIMAL(10,2) NOT NULL COMMENT '元/小时',
|
||
is_active TINYINT(1) NOT NULL DEFAULT 1,
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
```
|
||
|
||
#### 3.2.4 project_cost_items(项目成本明细-耗材设备)
|
||
|
||
| 字段 | 类型 | 约束 | 说明 |
|
||
|------|------|------|------|
|
||
| id | BIGINT | PK, AUTO_INCREMENT | 主键 |
|
||
| project_id | BIGINT | FK, NOT NULL | 项目ID |
|
||
| item_type | VARCHAR(20) | NOT NULL | 类型:material/equipment |
|
||
| item_id | BIGINT | NOT NULL | 耗材/设备ID |
|
||
| quantity | DECIMAL(10,4) | NOT NULL | 用量 |
|
||
| unit_cost | DECIMAL(12,4) | NOT NULL | 单位成本 |
|
||
| total_cost | DECIMAL(12,2) | NOT NULL | 总成本(计算)|
|
||
| remark | VARCHAR(200) | - | 备注 |
|
||
| created_at | DATETIME | NOT NULL | 创建时间 |
|
||
| updated_at | DATETIME | NOT NULL | 更新时间 |
|
||
|
||
```sql
|
||
CREATE TABLE project_cost_items (
|
||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||
project_id BIGINT NOT NULL,
|
||
item_type VARCHAR(20) NOT NULL COMMENT 'material-耗材, equipment-设备',
|
||
item_id BIGINT NOT NULL,
|
||
quantity DECIMAL(10,4) NOT NULL,
|
||
unit_cost DECIMAL(12,4) NOT NULL,
|
||
total_cost DECIMAL(12,2) NOT NULL COMMENT '= quantity * unit_cost',
|
||
remark VARCHAR(200),
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
INDEX idx_project_id (project_id),
|
||
INDEX idx_item_type (item_type)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
```
|
||
|
||
#### 3.2.5 project_labor_costs(项目人工成本)
|
||
|
||
| 字段 | 类型 | 约束 | 说明 |
|
||
|------|------|------|------|
|
||
| id | BIGINT | PK, AUTO_INCREMENT | 主键 |
|
||
| project_id | BIGINT | FK, NOT NULL | 项目ID |
|
||
| staff_level_id | BIGINT | FK, NOT NULL | 人员级别ID |
|
||
| duration_minutes | INT | NOT NULL | 操作时长(分钟)|
|
||
| hourly_rate | DECIMAL(10,2) | NOT NULL | 时薪(记录时快照)|
|
||
| labor_cost | DECIMAL(12,2) | NOT NULL | 人工成本(计算)|
|
||
| remark | VARCHAR(200) | - | 备注 |
|
||
| created_at | DATETIME | NOT NULL | 创建时间 |
|
||
| updated_at | DATETIME | NOT NULL | 更新时间 |
|
||
|
||
```sql
|
||
CREATE TABLE project_labor_costs (
|
||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||
project_id BIGINT NOT NULL,
|
||
staff_level_id BIGINT NOT NULL,
|
||
duration_minutes INT NOT NULL,
|
||
hourly_rate DECIMAL(10,2) NOT NULL COMMENT '记录时的时薪快照',
|
||
labor_cost DECIMAL(12,2) NOT NULL COMMENT '= duration/60 * hourly_rate',
|
||
remark VARCHAR(200),
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
INDEX idx_project_id (project_id),
|
||
INDEX idx_staff_level_id (staff_level_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
```
|
||
|
||
#### 3.2.6 fixed_costs(固定成本)
|
||
|
||
| 字段 | 类型 | 约束 | 说明 |
|
||
|------|------|------|------|
|
||
| id | BIGINT | PK, AUTO_INCREMENT | 主键 |
|
||
| cost_name | VARCHAR(100) | NOT NULL | 成本名称 |
|
||
| cost_type | VARCHAR(20) | NOT NULL | 类型:rent/utilities/property/other |
|
||
| monthly_amount | DECIMAL(12,2) | NOT NULL | 月度金额 |
|
||
| year_month | VARCHAR(7) | NOT NULL | 年月:2026-01 |
|
||
| allocation_method | VARCHAR(20) | NOT NULL, DEFAULT 'count' | 分摊方式:count/revenue/duration |
|
||
| is_active | TINYINT(1) | NOT NULL, DEFAULT 1 | 是否启用 |
|
||
| created_at | DATETIME | NOT NULL | 创建时间 |
|
||
| updated_at | DATETIME | NOT NULL | 更新时间 |
|
||
|
||
```sql
|
||
CREATE TABLE fixed_costs (
|
||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||
cost_name VARCHAR(100) NOT NULL,
|
||
cost_type VARCHAR(20) NOT NULL COMMENT 'rent-房租, utilities-水电, property-物业, other-其他',
|
||
monthly_amount DECIMAL(12,2) NOT NULL,
|
||
year_month VARCHAR(7) NOT NULL COMMENT '格式:2026-01',
|
||
allocation_method VARCHAR(20) NOT NULL DEFAULT 'count' COMMENT 'count-按项目数, revenue-按营收, duration-按时长',
|
||
is_active TINYINT(1) NOT NULL DEFAULT 1,
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
INDEX idx_year_month (year_month)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
```
|
||
|
||
#### 3.2.7 project_cost_summaries(项目成本汇总-视图或表)
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| id | BIGINT | 主键 |
|
||
| project_id | BIGINT | 项目ID |
|
||
| material_cost | DECIMAL(12,2) | 耗材成本 |
|
||
| equipment_cost | DECIMAL(12,2) | 设备折旧成本 |
|
||
| labor_cost | DECIMAL(12,2) | 人工成本 |
|
||
| fixed_cost_allocation | DECIMAL(12,2) | 固定成本分摊 |
|
||
| total_cost | DECIMAL(12,2) | 总成本(最低成本线)|
|
||
| calculated_at | DATETIME | 计算时间 |
|
||
|
||
```sql
|
||
CREATE TABLE project_cost_summaries (
|
||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||
project_id BIGINT NOT NULL UNIQUE,
|
||
material_cost DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||
equipment_cost DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||
labor_cost DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||
fixed_cost_allocation DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||
total_cost DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT '最低成本线',
|
||
calculated_at DATETIME NOT NULL,
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
INDEX idx_project_id (project_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
```
|
||
|
||
---
|
||
|
||
### 3.3 市场行情模块
|
||
|
||
#### 3.3.1 competitors(竞品机构)
|
||
|
||
| 字段 | 类型 | 约束 | 说明 |
|
||
|------|------|------|------|
|
||
| id | BIGINT | PK, AUTO_INCREMENT | 主键 |
|
||
| competitor_name | VARCHAR(100) | NOT NULL | 机构名称 |
|
||
| address | VARCHAR(200) | - | 地址 |
|
||
| distance_km | DECIMAL(5,2) | - | 距离(公里)|
|
||
| positioning | VARCHAR(20) | NOT NULL | 定位:high/medium/budget |
|
||
| contact | VARCHAR(50) | - | 联系方式 |
|
||
| is_key_competitor | TINYINT(1) | NOT NULL, DEFAULT 0 | 是否重点关注 |
|
||
| is_active | TINYINT(1) | NOT NULL, DEFAULT 1 | 是否启用 |
|
||
| created_at | DATETIME | NOT NULL | 创建时间 |
|
||
| updated_at | DATETIME | NOT NULL | 更新时间 |
|
||
|
||
```sql
|
||
CREATE TABLE competitors (
|
||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||
competitor_name VARCHAR(100) NOT NULL,
|
||
address VARCHAR(200),
|
||
distance_km DECIMAL(5,2),
|
||
positioning VARCHAR(20) NOT NULL COMMENT 'high-高端, medium-中端, budget-大众',
|
||
contact VARCHAR(50),
|
||
is_key_competitor TINYINT(1) NOT NULL DEFAULT 0,
|
||
is_active TINYINT(1) NOT NULL DEFAULT 1,
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
INDEX idx_positioning (positioning),
|
||
INDEX idx_is_key (is_key_competitor)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
```
|
||
|
||
#### 3.3.2 competitor_prices(竞品价格)
|
||
|
||
| 字段 | 类型 | 约束 | 说明 |
|
||
|------|------|------|------|
|
||
| id | BIGINT | PK, AUTO_INCREMENT | 主键 |
|
||
| competitor_id | BIGINT | FK, NOT NULL | 竞品机构ID |
|
||
| project_id | BIGINT | FK | 关联本店项目ID(可空)|
|
||
| project_name | VARCHAR(100) | NOT NULL | 竞品项目名称 |
|
||
| original_price | DECIMAL(12,2) | NOT NULL | 原价 |
|
||
| promo_price | DECIMAL(12,2) | - | 促销价 |
|
||
| member_price | DECIMAL(12,2) | - | 会员价 |
|
||
| price_source | VARCHAR(20) | NOT NULL | 来源:official/meituan/dianping/survey |
|
||
| collected_at | DATE | NOT NULL | 采集日期 |
|
||
| remark | VARCHAR(200) | - | 备注 |
|
||
| created_at | DATETIME | NOT NULL | 创建时间 |
|
||
| updated_at | DATETIME | NOT NULL | 更新时间 |
|
||
|
||
```sql
|
||
CREATE TABLE competitor_prices (
|
||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||
competitor_id BIGINT NOT NULL,
|
||
project_id BIGINT COMMENT '关联本店项目',
|
||
project_name VARCHAR(100) NOT NULL COMMENT '竞品项目名称',
|
||
original_price DECIMAL(12,2) NOT NULL,
|
||
promo_price DECIMAL(12,2),
|
||
member_price DECIMAL(12,2),
|
||
price_source VARCHAR(20) NOT NULL COMMENT 'official-官网, meituan-美团, dianping-大众点评, survey-实地调研',
|
||
collected_at DATE NOT NULL,
|
||
remark VARCHAR(200),
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
INDEX idx_competitor_id (competitor_id),
|
||
INDEX idx_project_id (project_id),
|
||
INDEX idx_collected_at (collected_at)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
```
|
||
|
||
#### 3.3.3 benchmark_prices(标杆价格)
|
||
|
||
| 字段 | 类型 | 约束 | 说明 |
|
||
|------|------|------|------|
|
||
| id | BIGINT | PK, AUTO_INCREMENT | 主键 |
|
||
| benchmark_name | VARCHAR(100) | NOT NULL | 标杆机构名称 |
|
||
| category_id | BIGINT | FK | 项目分类ID |
|
||
| min_price | DECIMAL(12,2) | NOT NULL | 最低价 |
|
||
| max_price | DECIMAL(12,2) | NOT NULL | 最高价 |
|
||
| avg_price | DECIMAL(12,2) | NOT NULL | 均价 |
|
||
| price_tier | VARCHAR(20) | NOT NULL | 价格带:low/medium/high/premium |
|
||
| effective_date | DATE | NOT NULL | 生效日期 |
|
||
| remark | VARCHAR(200) | - | 备注 |
|
||
| created_at | DATETIME | NOT NULL | 创建时间 |
|
||
| updated_at | DATETIME | NOT NULL | 更新时间 |
|
||
|
||
```sql
|
||
CREATE TABLE benchmark_prices (
|
||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||
benchmark_name VARCHAR(100) NOT NULL,
|
||
category_id BIGINT,
|
||
min_price DECIMAL(12,2) NOT NULL,
|
||
max_price DECIMAL(12,2) NOT NULL,
|
||
avg_price DECIMAL(12,2) NOT NULL,
|
||
price_tier VARCHAR(20) NOT NULL COMMENT 'low-低端, medium-中端, high-高端, premium-奢华',
|
||
effective_date DATE NOT NULL,
|
||
remark VARCHAR(200),
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
INDEX idx_category_id (category_id),
|
||
INDEX idx_effective_date (effective_date)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
```
|
||
|
||
#### 3.3.4 market_analysis_results(市场分析结果)
|
||
|
||
| 字段 | 类型 | 约束 | 说明 |
|
||
|------|------|------|------|
|
||
| id | BIGINT | PK, AUTO_INCREMENT | 主键 |
|
||
| project_id | BIGINT | FK, NOT NULL | 项目ID |
|
||
| analysis_date | DATE | NOT NULL | 分析日期 |
|
||
| competitor_count | INT | NOT NULL | 样本竞品数量 |
|
||
| market_min_price | DECIMAL(12,2) | NOT NULL | 市场最低价 |
|
||
| market_max_price | DECIMAL(12,2) | NOT NULL | 市场最高价 |
|
||
| market_avg_price | DECIMAL(12,2) | NOT NULL | 市场均价 |
|
||
| market_median_price | DECIMAL(12,2) | NOT NULL | 市场中位价 |
|
||
| suggested_range_min | DECIMAL(12,2) | NOT NULL | 建议区间下限 |
|
||
| suggested_range_max | DECIMAL(12,2) | NOT NULL | 建议区间上限 |
|
||
| created_at | DATETIME | NOT NULL | 创建时间 |
|
||
|
||
```sql
|
||
CREATE TABLE market_analysis_results (
|
||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||
project_id BIGINT NOT NULL,
|
||
analysis_date DATE NOT NULL,
|
||
competitor_count INT NOT NULL,
|
||
market_min_price DECIMAL(12,2) NOT NULL,
|
||
market_max_price DECIMAL(12,2) NOT NULL,
|
||
market_avg_price DECIMAL(12,2) NOT NULL,
|
||
market_median_price DECIMAL(12,2) NOT NULL,
|
||
suggested_range_min DECIMAL(12,2) NOT NULL,
|
||
suggested_range_max DECIMAL(12,2) NOT NULL,
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
INDEX idx_project_id (project_id),
|
||
INDEX idx_analysis_date (analysis_date)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
```
|
||
|
||
---
|
||
|
||
### 3.4 定价与模拟模块
|
||
|
||
#### 3.4.1 pricing_plans(定价方案)
|
||
|
||
| 字段 | 类型 | 约束 | 说明 |
|
||
|------|------|------|------|
|
||
| id | BIGINT | PK, AUTO_INCREMENT | 主键 |
|
||
| project_id | BIGINT | FK, NOT NULL | 项目ID |
|
||
| plan_name | VARCHAR(100) | NOT NULL | 方案名称 |
|
||
| strategy_type | VARCHAR(20) | NOT NULL | 策略:traffic/profit/premium |
|
||
| base_cost | DECIMAL(12,2) | NOT NULL | 基础成本 |
|
||
| target_margin | DECIMAL(5,2) | NOT NULL | 目标毛利率(%) |
|
||
| suggested_price | DECIMAL(12,2) | NOT NULL | 建议价格 |
|
||
| final_price | DECIMAL(12,2) | - | 最终定价 |
|
||
| ai_advice | TEXT | - | AI 建议内容 |
|
||
| is_active | TINYINT(1) | NOT NULL, DEFAULT 1 | 是否启用 |
|
||
| created_at | DATETIME | NOT NULL | 创建时间 |
|
||
| updated_at | DATETIME | NOT NULL | 更新时间 |
|
||
| created_by | BIGINT | FK → users.id | 创建人 |
|
||
|
||
```sql
|
||
CREATE TABLE pricing_plans (
|
||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||
project_id BIGINT NOT NULL,
|
||
plan_name VARCHAR(100) NOT NULL,
|
||
strategy_type VARCHAR(20) NOT NULL COMMENT 'traffic-引流款, profit-利润款, premium-高端款',
|
||
base_cost DECIMAL(12,2) NOT NULL,
|
||
target_margin DECIMAL(5,2) NOT NULL,
|
||
suggested_price DECIMAL(12,2) NOT NULL,
|
||
final_price DECIMAL(12,2),
|
||
ai_advice TEXT,
|
||
is_active TINYINT(1) NOT NULL DEFAULT 1,
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
created_by BIGINT,
|
||
INDEX idx_project_id (project_id),
|
||
INDEX idx_strategy_type (strategy_type)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
```
|
||
|
||
#### 3.4.2 profit_simulations(利润模拟)
|
||
|
||
| 字段 | 类型 | 约束 | 说明 |
|
||
|------|------|------|------|
|
||
| id | BIGINT | PK, AUTO_INCREMENT | 主键 |
|
||
| pricing_plan_id | BIGINT | FK, NOT NULL | 定价方案ID |
|
||
| simulation_name | VARCHAR(100) | NOT NULL | 模拟名称 |
|
||
| price | DECIMAL(12,2) | NOT NULL | 模拟价格 |
|
||
| estimated_volume | INT | NOT NULL | 预估客量 |
|
||
| period_type | VARCHAR(20) | NOT NULL | 周期:daily/weekly/monthly |
|
||
| estimated_revenue | DECIMAL(14,2) | NOT NULL | 预估收入 |
|
||
| estimated_cost | DECIMAL(14,2) | NOT NULL | 预估成本 |
|
||
| estimated_profit | DECIMAL(14,2) | NOT NULL | 预估利润 |
|
||
| profit_margin | DECIMAL(5,2) | NOT NULL | 利润率(%) |
|
||
| breakeven_volume | INT | NOT NULL | 盈亏平衡客量 |
|
||
| created_at | DATETIME | NOT NULL | 创建时间 |
|
||
| created_by | BIGINT | FK → users.id | 创建人 |
|
||
|
||
```sql
|
||
CREATE TABLE profit_simulations (
|
||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||
pricing_plan_id BIGINT NOT NULL,
|
||
simulation_name VARCHAR(100) NOT NULL,
|
||
price DECIMAL(12,2) NOT NULL,
|
||
estimated_volume INT NOT NULL,
|
||
period_type VARCHAR(20) NOT NULL COMMENT 'daily-日, weekly-周, monthly-月',
|
||
estimated_revenue DECIMAL(14,2) NOT NULL,
|
||
estimated_cost DECIMAL(14,2) NOT NULL,
|
||
estimated_profit DECIMAL(14,2) NOT NULL,
|
||
profit_margin DECIMAL(5,2) NOT NULL,
|
||
breakeven_volume INT NOT NULL,
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
created_by BIGINT,
|
||
INDEX idx_pricing_plan_id (pricing_plan_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
```
|
||
|
||
#### 3.4.3 sensitivity_analyses(敏感性分析)
|
||
|
||
| 字段 | 类型 | 约束 | 说明 |
|
||
|------|------|------|------|
|
||
| id | BIGINT | PK, AUTO_INCREMENT | 主键 |
|
||
| simulation_id | BIGINT | FK, NOT NULL | 模拟ID |
|
||
| price_change_rate | DECIMAL(5,2) | NOT NULL | 价格变动率(%):-20,-15,-10,-5,0,5,10,15,20 |
|
||
| adjusted_price | DECIMAL(12,2) | NOT NULL | 调整后价格 |
|
||
| adjusted_profit | DECIMAL(14,2) | NOT NULL | 调整后利润 |
|
||
| profit_change_rate | DECIMAL(5,2) | NOT NULL | 利润变动率(%) |
|
||
| created_at | DATETIME | NOT NULL | 创建时间 |
|
||
|
||
```sql
|
||
CREATE TABLE sensitivity_analyses (
|
||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||
simulation_id BIGINT NOT NULL,
|
||
price_change_rate DECIMAL(5,2) NOT NULL COMMENT '如 -20, -10, 0, 10, 20',
|
||
adjusted_price DECIMAL(12,2) NOT NULL,
|
||
adjusted_profit DECIMAL(14,2) NOT NULL,
|
||
profit_change_rate DECIMAL(5,2) NOT NULL,
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
INDEX idx_simulation_id (simulation_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
```
|
||
|
||
---
|
||
|
||
### 3.5 系统模块
|
||
|
||
#### 3.5.1 users(用户-与门户系统关联)
|
||
|
||
| 字段 | 类型 | 约束 | 说明 |
|
||
|------|------|------|------|
|
||
| id | BIGINT | PK, AUTO_INCREMENT | 主键 |
|
||
| portal_user_id | BIGINT | UNIQUE, NOT NULL | 门户用户ID |
|
||
| username | VARCHAR(50) | NOT NULL | 用户名 |
|
||
| role | VARCHAR(20) | NOT NULL | 角色:admin/manager/operator |
|
||
| is_active | TINYINT(1) | NOT NULL, DEFAULT 1 | 是否启用 |
|
||
| created_at | DATETIME | NOT NULL | 创建时间 |
|
||
| updated_at | DATETIME | NOT NULL | 更新时间 |
|
||
|
||
```sql
|
||
CREATE TABLE users (
|
||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||
portal_user_id BIGINT NOT NULL UNIQUE,
|
||
username VARCHAR(50) NOT NULL,
|
||
role VARCHAR(20) NOT NULL COMMENT 'admin-管理员, manager-经理, operator-操作员',
|
||
is_active TINYINT(1) NOT NULL DEFAULT 1,
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
INDEX idx_portal_user_id (portal_user_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
```
|
||
|
||
#### 3.5.2 operation_logs(操作日志)
|
||
|
||
| 字段 | 类型 | 约束 | 说明 |
|
||
|------|------|------|------|
|
||
| id | BIGINT | PK, AUTO_INCREMENT | 主键 |
|
||
| user_id | BIGINT | FK | 用户ID |
|
||
| module | VARCHAR(50) | NOT NULL | 模块:cost/market/pricing/profit |
|
||
| action | VARCHAR(50) | NOT NULL | 操作:create/update/delete/export |
|
||
| target_type | VARCHAR(50) | NOT NULL | 对象类型 |
|
||
| target_id | BIGINT | - | 对象ID |
|
||
| detail | JSON | - | 详情 |
|
||
| ip_address | VARCHAR(45) | - | IP地址 |
|
||
| created_at | DATETIME | NOT NULL | 操作时间 |
|
||
|
||
```sql
|
||
CREATE TABLE operation_logs (
|
||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||
user_id BIGINT,
|
||
module VARCHAR(50) NOT NULL,
|
||
action VARCHAR(50) NOT NULL,
|
||
target_type VARCHAR(50) NOT NULL,
|
||
target_id BIGINT,
|
||
detail JSON,
|
||
ip_address VARCHAR(45),
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
INDEX idx_user_id (user_id),
|
||
INDEX idx_module (module),
|
||
INDEX idx_created_at (created_at)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
```
|
||
|
||
---
|
||
|
||
## 4. 数据字典
|
||
|
||
### 4.1 枚举值定义
|
||
|
||
#### material_type(耗材类型)
|
||
|
||
| 值 | 说明 |
|
||
|---|------|
|
||
| consumable | 一般耗材 |
|
||
| injectable | 针剂 |
|
||
| product | 产品 |
|
||
|
||
#### allocation_method(分摊方式)
|
||
|
||
| 值 | 说明 |
|
||
|---|------|
|
||
| count | 按项目数量平均分摊 |
|
||
| revenue | 按项目营收占比分摊 |
|
||
| duration | 按项目时长占比分摊 |
|
||
|
||
#### positioning(机构定位)
|
||
|
||
| 值 | 说明 |
|
||
|---|------|
|
||
| high | 高端 |
|
||
| medium | 中端 |
|
||
| budget | 大众 |
|
||
|
||
#### price_source(价格来源)
|
||
|
||
| 值 | 说明 |
|
||
|---|------|
|
||
| official | 官网 |
|
||
| meituan | 美团 |
|
||
| dianping | 大众点评 |
|
||
| survey | 实地调研 |
|
||
|
||
#### strategy_type(定价策略)
|
||
|
||
| 值 | 说明 |
|
||
|---|------|
|
||
| traffic | 引流款 |
|
||
| profit | 利润款 |
|
||
| premium | 高端款 |
|
||
|
||
#### period_type(周期类型)
|
||
|
||
| 值 | 说明 |
|
||
|---|------|
|
||
| daily | 日 |
|
||
| weekly | 周 |
|
||
| monthly | 月 |
|
||
|
||
---
|
||
|
||
## 5. 索引设计原则
|
||
|
||
1. **主键**:所有表使用 `id BIGINT AUTO_INCREMENT` 作为主键
|
||
2. **外键索引**:所有外键字段建立索引
|
||
3. **查询优化**:高频查询字段建立索引
|
||
4. **联合索引**:多条件查询使用联合索引,遵循最左前缀原则
|
||
5. **避免过度索引**:权衡查询性能与写入性能
|
||
|
||
---
|
||
|
||
## 6. 数据迁移
|
||
|
||
### 6.1 初始化脚本
|
||
|
||
```sql
|
||
-- 创建数据库
|
||
CREATE DATABASE IF NOT EXISTS pricing_model
|
||
DEFAULT CHARACTER SET utf8mb4
|
||
DEFAULT COLLATE utf8mb4_unicode_ci;
|
||
|
||
USE pricing_model;
|
||
|
||
-- 按依赖顺序创建表
|
||
-- 1. 基础表(无依赖)
|
||
-- categories, materials, equipments, staff_levels, fixed_costs, competitors
|
||
|
||
-- 2. 依赖基础表
|
||
-- projects, benchmark_prices
|
||
|
||
-- 3. 依赖项目表
|
||
-- project_cost_items, project_labor_costs, project_cost_summaries
|
||
-- competitor_prices, market_analysis_results
|
||
-- pricing_plans
|
||
|
||
-- 4. 依赖定价方案
|
||
-- profit_simulations
|
||
|
||
-- 5. 依赖模拟
|
||
-- sensitivity_analyses
|
||
|
||
-- 6. 系统表
|
||
-- users, operation_logs
|
||
```
|
||
|
||
### 6.2 初始数据
|
||
|
||
```sql
|
||
-- 人员级别初始数据
|
||
INSERT INTO staff_levels (level_code, level_name, hourly_rate) VALUES
|
||
('L1', '初级美容师', 30.00),
|
||
('L2', '中级美容师', 50.00),
|
||
('L3', '高级美容师', 80.00),
|
||
('L4', '资深美容师', 120.00),
|
||
('D1', '主治医师', 200.00),
|
||
('D2', '副主任医师', 350.00),
|
||
('D3', '主任医师', 500.00);
|
||
|
||
-- 项目分类初始数据
|
||
INSERT INTO categories (category_name, parent_id, sort_order) VALUES
|
||
('皮肤管理', NULL, 1),
|
||
('注射类', NULL, 2),
|
||
('光电类', NULL, 3),
|
||
('手术类', NULL, 4);
|
||
```
|
||
|
||
---
|
||
|
||
## 7. 附录
|
||
|
||
### 7.1 参考文档
|
||
|
||
- 《瑞小美系统技术栈标准与字符标准》
|
||
- MySQL 8.0 官方文档
|
||
|
||
---
|
||
|
||
*瑞小美技术团队 · 2026-01-19*
|