🏷️ 会员模块数据库设计文档

支持多商户·多门店·实物卡·储值消费·积分体系·余额重算 · MySQL 8.0+

📅 版本:v3.0 (多商户版)📁 数据库:MySQL 8.0🧩 字符集:utf8mb4📐 金额精度:分 (BIGINT)📋 表数量:10 张🏢 支持:多商户 + 多门店

📖 概述

本数据库设计面向 多商户多门店会员卡管理系统,支持 实物卡(芯片ID) 与 无卡消费(手机号) 两种场景。 核心能力包括:储值充值、折扣消费、积分累积与兑换、余额变动全链路日志、余额重算 机制,以及 多商户/门店数据隔离。 设计时已预留 计次卡 扩展能力。

🏢 多商户多门店支持: 所有会员表已增加 fk_company_id 和 fk_store_id 字段,实现数据隔离。 每个商户/门店可独立配置积分规则、折扣比例、充值策略等。

🔗 实体关系图 (ER)

╔═══════════════════════════════════════════════════════════════════════════════════════════════════════╗ ║ 📦 多商户会员系统 ER 图 ║ ╠═══════════════════════════════════════════════════════════════════════════════════════════════════════╣ ║ ║ ║ ┌─────────────────────────────┐ ┌─────────────────────────────────┐ ║ ║ │ sauna_merchant │ │ sauna_merchant_store │ ║ ║ │ (商户公司表-已有) │ │ (门店表-已有) │ ║ ║ │─────────────────────────────│ │─────────────────────────────────│ ║ ║ │ key_id (PK) │◄─────────│ fk_company_id (FK) │ ║ ║ │ company_fullname │ 1 n │ key_id (PK) │ ║ ║ │ company_shortname │ │ name │ ║ ║ └─────────────────────────────┘ └─────────────────────────────────┘ ║ ║ │ │ ║ ║ │ 1 │ 1 ║ ║ ├───────────────────────┬──────────────────┘ ║ ║ │ │ ║ ║ ▼ ▼ ║ ║ ┌──────────────────────────────────────────────────────────────────────────────┐ ║ ║ │ member_card (会员卡主表) │ ║ ║ │──────────────────────────────────────────────────────────────────────────────│ ║ ║ │ key_id (PK) │ card_no (UK) │ chip_id (UK) │ phone (idx) │ ║ ║ │ fk_company_id (FK) │ fk_store_id (FK) │ status │ card_type │ ║ ║ │ current_principal │ current_gift │ current_points │ discount_rate │ ║ ║ └──────────────────────────────────────────────────────────────────────────────┘ ║ ║ │ ║ ║ │ 1 ║ ║ ├─────────────────────────────────────────────────────────────────┐ ║ ║ │ │ ║ ║ ▼ ▼ ║ ║ ┌─────────────────────────┐ ┌─────────────────────────────────────┐ ║ ║ │ member_recharge │ │ member_consume │ ║ ║ │ (充值记录表) │ │ (消费明细表) │ ║ ║ │─────────────────────────│ │─────────────────────────────────────│ ║ ║ │ key_id (PK) │ │ key_id (PK) │ ║ ║ │ card_key_id (FK) │ │ card_key_id (FK) │ ║ ║ │ recharge_no (UK) │ │ consume_no (UK) │ ║ ║ │ amount, gift_amount │ │ principal_amount, gift_amount │ ║ ║ └─────────────────────────┘ └─────────────────────────────────────┘ ║ ║ │ │ ║ ║ └───────────────────┬───────────────────┘ ║ ║ │ ║ ║ ▼ ║ ║ ┌─────────────────────────────────────────────────────────────────────────────┐ ║ ║ │ member_balance_log (余额变动日志-核心) │ ║ ║ │─────────────────────────────────────────────────────────────────────────────│ ║ ║ │ key_id (PK) │ card_key_id (FK) │ log_no (UK) │ change_type │ ║ ║ │ before_principal │ after_principal │ before_gift │ after_gift │ ║ ║ │ is_recalculated │ source_type │ source_id │ ║ ║ └─────────────────────────────────────────────────────────────────────────────┘ ║ ║ ║ ║ ┌─────────────────────────┐ ┌─────────────────────────────────────┐ ║ ║ │ member_points_exchange │ │ member_balance_recalc │ ║ ║ │ (积分兑换记录表) │ │ (余额重算记录表) │ ║ ║ │─────────────────────────│ │─────────────────────────────────────│ ║ ║ │ key_id (PK) │ │ key_id (PK) │ ║ ║ │ card_key_id (FK) │ │ card_key_id (FK) │ ║ ║ │ points_used │ │ old_principal, new_principal │ ║ ║ │ exchange_type │ │ diff_principal, diff_gift │ ║ ║ └─────────────────────────┘ └─────────────────────────────────────┘ ║ ║ ║ ║ ┌─────────────────────────────┐ ┌─────────────────────────────────┐ ║ ║ │ member_merchant_config │ │ member_operation_log │ ║ ║ │ (商户配置-新增) │ │ (操作审计日志-新增) │ ║ ║ │─────────────────────────────│ │─────────────────────────────────│ ║ ║ │ key_id (PK) │ │ key_id (PK) │ ║ ║ │ fk_company_id (FK) │ │ card_key_id (FK) │ ║ ║ │ fk_store_id (FK) │ │ operation_type │ ║ ║ │ gift_consume_ratio │ │ before_data, after_data │ ║ ║ │ points_rate │ │ ip_address, user_agent │ ║ ║ └─────────────────────────────┘ └─────────────────────────────────┘ ║ ║ ║ ║ ┌─────────────────────────────────────────────────────────────────────────────┐ ║ ║ │ system_consume_config (系统配置) │ ║ ║ │ config_key (UK) │ config_value │ description │ ║ ║ └─────────────────────────────────────────────────────────────────────────────┘ ║ ║ ║ ╚═══════════════════════════════════════════════════════════════════════════════════════════════════════╝

🆕 本次新增/变更:

  • 新增 fk_company_idfk_store_id 字段到所有会员表
  • 新增 member_merchant_config 表 - 商户/门店级别配置
  • 新增 member_operation_log 表 - 操作审计日志
  • 统一 所有表增加公用字段:key_idsort_indexcreate_bycreate_timeupdate_byupdate_time
  • 新增 v_member_card_full 视图 - 关联商户门店信息

📋 表结构详细设计

1. member_card会员卡主表

字段 类型 说明
id BIGINT UNSIGNED NO PK 自增主键
key_id VARCHAR(50) NO UK 业务主键ID
fk_company_id VARCHAR(50) NO FK 🏢 所属公司ID
fk_store_id VARCHAR(50) NO FK 🏪 所属门店ID
card_no VARCHAR(20) NO UK 会员卡编号(自编号)
chip_id VARCHAR(32) NO UK 芯片ID唯一码(实物卡)
phone VARCHAR(11) NO INDEX 绑定手机号(无卡消费)
card_type TINYINT NO - 1-储值卡,2-计次卡(预留)
status TINYINT NO INDEX 0-冻结,1-正常,2-挂失,3-注销
total_recharge BIGINT NO - 累计充值金额(不含赠送,分)
total_gift BIGINT NO - 累计赠送金额(分)
total_consume BIGINT NO - 累计消费本金(分)
total_gift_consume BIGINT NO - 累计赠送消费(分)
current_balance BIGINT NO - 当前可用总余额(本金+赠送)
current_principal BIGINT NO - 当前本金余额
current_gift BIGINT NO - 当前赠送余额
total_points INT NO - 累计获得积分
used_points INT NO - 已使用积分
current_points INT NO - 当前可用积分
discount_rate DECIMAL(5,2) NO - 折扣比例(100=不打折,90=9折)
open_date DATETIME NO - 开卡日期
expire_date DATETIME YES - 有效期(计次卡使用)
last_consume_time DATETIME YES - 最后消费时间
sort_index INT YES - 排序码
create_by VARCHAR(50) YES - 创建人
create_time DATETIME NO INDEX 创建时间
update_by VARCHAR(50) YES - 修改人
update_time DATETIME NO - 修改时间

🏢 多商户关键字段: fk_company_id 和 fk_store_id 实现数据隔离, 查询时务必带上这两个条件,确保不同商户/门店数据互不干扰。

2. member_recharge开卡/充值记录表

字段 类型 说明
id BIGINT UNSIGNED NO PK 自增主键
key_id VARCHAR(50) NO UK 业务主键ID
card_id BIGINT UNSIGNED NO FK 会员卡自增ID
card_key_id VARCHAR(50) NO FK 会员卡业务ID
recharge_no VARCHAR(32) NO UK 充值流水号
recharge_type TINYINT NO - 1-开卡,2-充值,3-赠送活动,4-手动调账
amount BIGINT NO - 充值金额(本金,分)
gift_amount BIGINT NO - 赠送金额(分)
pay_method TINYINT YES - 1-现金,2-微信,3-支付宝,4-银行卡
operator_id VARCHAR(50) YES - 操作人员ID
remark VARCHAR(255) YES - 备注
recharge_time DATETIME NO INDEX 充值时间
sort_index INT YES - 排序码
create_by VARCHAR(50) YES - 创建人
create_time DATETIME NO INDEX 创建时间
update_by VARCHAR(50) YES - 修改人
update_time DATETIME NO - 修改时间

3. member_consume消费明细表

字段 类型 说明
id BIGINT UNSIGNED NO PK 自增主键
key_id VARCHAR(50) NO UK 业务主键ID
card_id BIGINT UNSIGNED NO FK 会员卡自增ID
card_key_id VARCHAR(50) NO FK 会员卡业务ID
consume_no VARCHAR(32) NO UK 消费流水号
order_id VARCHAR(32) YES INDEX 关联订单号
total_amount BIGINT NO - 消费总金额(原始金额,分)
actual_amount BIGINT NO - 实际扣款金额(折扣后)
principal_amount BIGINT NO - 扣本金金额
gift_amount BIGINT NO - 扣赠送金额
discount_amount BIGINT NO - 优惠金额
earned_points INT NO - 获得积分
consume_time DATETIME NO INDEX 消费时间
operator_id VARCHAR(50) YES - 操作人员ID
remark VARCHAR(255) YES - 备注
sort_index INT YES - 排序码
create_by VARCHAR(50) YES - 创建人
create_time DATETIME NO INDEX 创建时间
update_by VARCHAR(50) YES - 修改人
update_time DATETIME NO - 修改时间

4. member_balance_log⭐ 余额变动日志表(核心)

字段 类型 说明
id BIGINT UNSIGNED NO PK 自增主键
key_id VARCHAR(50) NO UK 业务主键ID
card_id BIGINT UNSIGNED NO FK 会员卡自增ID
card_key_id VARCHAR(50) NO FK 会员卡业务ID
log_no VARCHAR(32) NO UK 日志流水号
change_type TINYINT NO - 1-开卡,2-充值,3-消费,4-退款,5-手动调整,6-积分兑换,7-余额重算修正
change_amount BIGINT NO - 变动金额(正数增加,负数减少,分)
before_principal BIGINT NO - 变动前本金余额
after_principal BIGINT NO - 变动后本金余额
before_gift BIGINT NO - 变动前赠送余额
after_gift BIGINT NO - 变动后赠送余额
before_total BIGINT NO - 变动前总余额
after_total BIGINT NO - 变动后总余额
source_type VARCHAR(30) YES INDEX 来源类型:recharge/consume/refund/adjust
source_id VARCHAR(50) YES INDEX 来源表KeyId
operator_id VARCHAR(50) YES - 操作人ID
remark VARCHAR(255) YES - 备注
is_recalculated TINYINT NO - 是否被重算修正:0-否,1-是
sort_index INT YES - 排序码
create_by VARCHAR(50) YES - 创建人
create_time DATETIME NO INDEX 创建时间
update_by VARCHAR(50) YES - 修改人
update_time DATETIME NO - 修改时间

5. member_points_exchange积分兑换记录表

字段 类型 说明
id BIGINT UNSIGNED NO PK 自增主键
key_id VARCHAR(50) NO UK 业务主键ID
card_id BIGINT UNSIGNED NO FK 会员卡自增ID
card_key_id VARCHAR(50) NO FK 会员卡业务ID
exchange_no VARCHAR(32) NO UK 兑换流水号
points_used INT NO - 使用的积分
exchange_type TINYINT NO - 1-抵现,2-兑换礼品,3-兑换优惠券
exchange_value BIGINT NO - 兑换价值(抵现金额或礼品价值,分)
consume_id BIGINT UNSIGNED YES - 关联消费自增ID
consume_key_id VARCHAR(50) YES - 关联消费业务ID
status TINYINT NO - 1-成功,2-取消,3-失效
exchange_time DATETIME NO INDEX 兑换时间
operator_id VARCHAR(50) YES - 操作人ID
remark VARCHAR(255) YES - 备注
sort_index INT YES - 排序码
create_by VARCHAR(50) YES - 创建人
create_time DATETIME NO INDEX 创建时间
update_by VARCHAR(50) YES - 修改人
update_time DATETIME NO - 修改时间

6. member_balance_recalc余额重算记录表(审计)

字段 类型 说明
id BIGINT UNSIGNED NO PK 自增主键
key_id VARCHAR(50) NO UK 业务主键ID
card_id BIGINT UNSIGNED NO FK 会员卡自增ID
card_key_id VARCHAR(50) NO FK 会员卡业务ID
recalc_no VARCHAR(32) NO UK 重算流水号
old_principal BIGINT NO - 重算前本金余额
new_principal BIGINT NO - 重算后本金余额
old_gift BIGINT NO - 重算前赠送余额
new_gift BIGINT NO - 重算后赠送余额
old_total BIGINT NO - 重算前总余额
new_total BIGINT NO - 重算后总余额
diff_principal BIGINT NO - 本金差异
diff_gift BIGINT NO - 赠送差异
recalc_reason VARCHAR(255) NO - 重算原因
operator_id VARCHAR(50) NO - 操作人ID
recalc_time DATETIME NO INDEX 重算时间
sort_index INT YES - 排序码
create_by VARCHAR(50) YES - 创建人
create_time DATETIME NO INDEX 创建时间
update_by VARCHAR(50) YES - 修改人
update_time DATETIME NO - 修改时间
Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐