Files
akmon/doc_mall/analysis/user_compatibility_analysis.md
2026-01-20 08:04:15 +08:00

196 lines
7.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 商城系统用户表兼容性分析报告
## 一、现有 ak_users 表结构分析
### 1. 核心字段对比
| 字段名 | 运动平台用途 | 商城系统需求 | 兼容性 | 备注 |
|--------|-------------|-------------|--------|------|
| id | 用户唯一标识 | 用户唯一标识 | ✅ 完全兼容 | UUID主键 |
| username | 用户名 | 用户名 | ✅ 完全兼容 | VARCHAR(64) |
| email | 邮箱 | 邮箱 | ✅ 完全兼容 | VARCHAR(128) |
| password_hash | 密码哈希 | 密码哈希 | ✅ 完全兼容 | VARCHAR(256) |
| phone | 手机号 | 手机号 | ✅ 完全兼容 | VARCHAR(32) |
| avatar_url | 头像 | 头像 | ✅ 完全兼容 | TEXT |
| created_at | 创建时间 | 创建时间 | ✅ 完全兼容 | TIMESTAMP |
| updated_at | 更新时间 | 更新时间 | ✅ 完全兼容 | TIMESTAMP |
### 2. 运动平台特有字段
| 字段名 | 用途 | 商城系统影响 | 处理建议 |
|--------|------|-------------|----------|
| gender | 性别 | 🔄 可选利用 | 商城可用于个性化推荐 |
| birthday | 生日 | 🔄 可选利用 | 可用于会员生日营销 |
| height_cm | 身高 | ❌ 不相关 | 保留但不使用 |
| weight_kg | 体重 | ❌ 不相关 | 保留但不使用 |
| bio | 个人简介 | 🔄 可选利用 | 可用于用户展示 |
| region_id | 所属地区 | 🔄 部分兼容 | 可用于配送区域判断 |
| school_id | 所属学校 | ❌ 不相关 | 对商城无意义 |
| grade_id | 所属年级 | ❌ 不相关 | 对商城无意义 |
| class_id | 所属班级 | ❌ 不相关 | 对商城无意义 |
| role | 用户角色 | ⚠️ 冲突风险 | 需要扩展支持商城角色 |
### 3. 商城系统缺少字段
| 字段名 | 商城需求 | 解决方案 |
|--------|----------|----------|
| user_type | 用户类型(消费者/商家/配送员) | 扩展 role 字段或新增字段 |
| status | 用户状态(正常/冻结/注销) | 新增字段 |
| real_name | 真实姓名 | 新增字段(商家认证、配送员等需要) |
| id_card | 身份证号 | 新增字段(商家/配送员认证) |
## 二、地址表缺失分析
### 1. 现状
- ❌ 运动平台没有专门的用户地址表
- ❌ 商城系统必需收货地址管理功能
- 订单中 `delivery_address` 字段使用 JSONB 存储,缺乏结构化管理
### 2. 地址表设计需求
```sql
-- 用户地址表
CREATE TABLE public.ak_user_addresses (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
user_id uuid REFERENCES public.ak_users(id) ON DELETE CASCADE,
receiver_name VARCHAR(64) NOT NULL, -- 收货人姓名
receiver_phone VARCHAR(32) NOT NULL, -- 收货人手机
province VARCHAR(64) NOT NULL, -- 省份
city VARCHAR(64) NOT NULL, -- 城市
district VARCHAR(64) NOT NULL, -- 区县
address_detail TEXT NOT NULL, -- 详细地址
postal_code VARCHAR(16), -- 邮编
is_default BOOLEAN DEFAULT false, -- 是否默认地址
label VARCHAR(32), -- 地址标签(家/公司/学校等)
coordinates POINT, -- 经纬度坐标
created_at TIMESTAMP WITH TIME ZONE DEFAULT now(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT now()
);
```
## 三、兼容性问题分析
### 1. 高风险冲突 ⚠️
#### A. 角色系统冲突
- **运动平台角色**: `student`, `teacher`, `admin` 等教育相关
- **商城系统角色**: `consumer`, `merchant`, `delivery`, `service`, `admin` 等商务相关
- **解决方案**:
- 方案1: 扩展 role 字段支持多系统角色 (`sport_student`, `mall_consumer`)
- 方案2: 新增 `system_roles` JSON字段存储多系统角色映射
- 方案3: 创建独立的用户角色关联表
#### B. 业务逻辑冲突
- **运动平台**: 强绑定学校/班级体系,基于教育场景
- **商城系统**: 基于地理位置和商业场景,无教育概念
- **影响**: 数据查询、权限控制、业务流程存在根本差异
### 2. 中等风险问题 🔄
#### A. 数据完整性
- 运动平台用户可能缺少商城必需信息(真实姓名、身份认证)
- 商城用户可能不需要运动平台的教育信息
- **解决方案**: 建立数据补全机制和可选字段策略
#### B. 性能影响
- 单表存储两套业务数据,查询条件复杂
- 索引策略需要同时优化两套业务场景
- **解决方案**: 合理设计索引,考虑分区表或读写分离
### 3. 低风险问题 ✅
#### A. 基础字段兼容
- 用户基本信息(用户名、邮箱、手机、头像)完全兼容
- 认证体系(password_hash, auth_id)可共用
- 时间字段(created_at, updated_at)格式一致
## 四、推荐方案
### 方案1: 共用方案(推荐度: ⭐⭐⭐)
#### 优点:
- 用户账号统一,单点登录
- 减少数据冗余
- 开发成本相对较低
#### 缺点:
- 业务耦合度高
- 角色系统复杂
- 性能优化困难
#### 实施步骤:
1. 扩展 `ak_users` 表字段
2. 创建 `ak_user_addresses` 地址表
3. 设计多系统角色管理机制
4. 建立数据迁移和兼容策略
### 方案2: 独立方案(推荐度: ⭐⭐⭐⭐⭐)
#### 优点:
- 业务隔离,各自优化
- 扩展性强,维护简单
- 避免相互影响
#### 缺点:
- 需要账号同步机制
- 数据可能冗余
- 初期开发成本高
#### 实施步骤:
1. 创建独立的商城用户表 `mall_users`
2. 创建商城地址表 `mall_user_addresses`
3. 建立账号同步/关联机制
4. 设计跨系统数据共享策略
### 方案3: 混合方案(推荐度: ⭐⭐⭐⭐)
#### 优点:
- 核心用户信息共用
- 业务特定数据隔离
- 平衡复杂度和效率
#### 实施策略:
- 共用 `ak_users` 核心用户表
- 创建 `mall_user_profiles` 商城用户扩展表
- 创建 `mall_user_addresses` 商城地址表
- 通过 user_id 关联,实现业务数据隔离
## 五、最终建议
### 🎯 强烈推荐方案3(混合方案)
#### 实施细节:
1. **保持 `ak_users` 表不变**,作为用户主表
2. **新增商城扩展表**:
```sql
CREATE TABLE public.mall_user_profiles (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
user_id uuid UNIQUE REFERENCES public.ak_users(id) ON DELETE CASCADE,
user_type INTEGER DEFAULT 1, -- 1消费者 2商家 3配送员
status INTEGER DEFAULT 1, -- 1正常 2冻结 3注销
real_name VARCHAR(64), -- 真实姓名
id_card VARCHAR(32), -- 身份证号
credit_score INTEGER DEFAULT 100, -- 信用分数
mall_role VARCHAR(32) DEFAULT 'consumer', -- 商城角色
created_at TIMESTAMP WITH TIME ZONE DEFAULT now(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT now()
);
```
3. **创建地址表** `ak_user_addresses`(如上设计)
4. **角色管理策略**:
- `ak_users.role` 保持运动平台角色
- `mall_user_profiles.mall_role` 管理商城角色
- 应用层根据业务模块使用相应角色字段
#### 优势:
- ✅ 最大化复用现有基础设施
- ✅ 避免核心用户表的破坏性修改
- ✅ 商城业务数据独立可控
- ✅ 支持用户在两套系统间自由切换
- ✅ 便于后续扩展其他业务模块
这种方案既保护了现有运动平台的稳定性,又为商城系统提供了完整的用户管理能力,是最佳的平衡方案。