# 商城系统用户表兼容性分析报告

## 一、现有 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` 管理商城角色
   - 应用层根据业务模块使用相应角色字段

#### 优势:
- ✅ 最大化复用现有基础设施
- ✅ 避免核心用户表的破坏性修改
- ✅ 商城业务数据独立可控
- ✅ 支持用户在两套系统间自由切换
- ✅ 便于后续扩展其他业务模块

这种方案既保护了现有运动平台的稳定性，又为商城系统提供了完整的用户管理能力，是最佳的平衡方案。
