7.0 KiB
7.0 KiB
商城系统用户表兼容性分析报告
一、现有 ak_users 表结构分析
1. 核心字段对比
| 字段名 | 运动平台用途 | 商城系统需求 | 兼容性 | 备注 |
|---|---|---|---|---|
| id | 用户唯一标识 | 用户唯一标识 | ✅ 完全兼容 | UUID主键 |
| username | 用户名 | 用户名 | ✅ 完全兼容 | VARCHAR(64) |
| 邮箱 | 邮箱 | ✅ 完全兼容 | 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. 地址表设计需求
-- 用户地址表
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_rolesJSON字段存储多系统角色映射 - 方案3: 创建独立的用户角色关联表
- 方案1: 扩展 role 字段支持多系统角色 (
B. 业务逻辑冲突
- 运动平台: 强绑定学校/班级体系,基于教育场景
- 商城系统: 基于地理位置和商业场景,无教育概念
- 影响: 数据查询、权限控制、业务流程存在根本差异
2. 中等风险问题 🔄
A. 数据完整性
- 运动平台用户可能缺少商城必需信息(真实姓名、身份认证)
- 商城用户可能不需要运动平台的教育信息
- 解决方案: 建立数据补全机制和可选字段策略
B. 性能影响
- 单表存储两套业务数据,查询条件复杂
- 索引策略需要同时优化两套业务场景
- 解决方案: 合理设计索引,考虑分区表或读写分离
3. 低风险问题 ✅
A. 基础字段兼容
- 用户基本信息(用户名、邮箱、手机、头像)完全兼容
- 认证体系(password_hash, auth_id)可共用
- 时间字段(created_at, updated_at)格式一致
四、推荐方案
方案1: 共用方案(推荐度: ⭐⭐⭐)
优点:
- 用户账号统一,单点登录
- 减少数据冗余
- 开发成本相对较低
缺点:
- 业务耦合度高
- 角色系统复杂
- 性能优化困难
实施步骤:
- 扩展
ak_users表字段 - 创建
ak_user_addresses地址表 - 设计多系统角色管理机制
- 建立数据迁移和兼容策略
方案2: 独立方案(推荐度: ⭐⭐⭐⭐⭐)
优点:
- 业务隔离,各自优化
- 扩展性强,维护简单
- 避免相互影响
缺点:
- 需要账号同步机制
- 数据可能冗余
- 初期开发成本高
实施步骤:
- 创建独立的商城用户表
mall_users - 创建商城地址表
mall_user_addresses - 建立账号同步/关联机制
- 设计跨系统数据共享策略
方案3: 混合方案(推荐度: ⭐⭐⭐⭐)
优点:
- 核心用户信息共用
- 业务特定数据隔离
- 平衡复杂度和效率
实施策略:
- 共用
ak_users核心用户表 - 创建
mall_user_profiles商城用户扩展表 - 创建
mall_user_addresses商城地址表 - 通过 user_id 关联,实现业务数据隔离
五、最终建议
🎯 强烈推荐:方案3(混合方案)
实施细节:
-
保持
ak_users表不变,作为用户主表 -
新增商城扩展表:
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() ); -
创建地址表
ak_user_addresses(如上设计) -
角色管理策略:
ak_users.role保持运动平台角色mall_user_profiles.mall_role管理商城角色- 应用层根据业务模块使用相应角色字段
优势:
- ✅ 最大化复用现有基础设施
- ✅ 避免核心用户表的破坏性修改
- ✅ 商城业务数据独立可控
- ✅ 支持用户在两套系统间自由切换
- ✅ 便于后续扩展其他业务模块
这种方案既保护了现有运动平台的稳定性,又为商城系统提供了完整的用户管理能力,是最佳的平衡方案。