DeepSeek幫我設計的會員模塊

📅 2026/6/29 18:34:52
DeepSeek幫我設計的會員模塊
️ 会员模块数据库设计文档支持多商户·多门店·实物卡·储值消费·积分体系·余额重算 · 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_id、fk_store_id字段到所有会员表新增member_merchant_config表 - 商户/门店级别配置新增member_operation_log表 - 操作审计日志统一所有表增加公用字段key_id、sort_index、create_by、create_time、update_by、update_time新增v_member_card_full视图 - 关联商户门店信息 表结构详细设计1. member_card会员卡主表字段类型空键说明idBIGINT UNSIGNEDNOPK自增主键key_idVARCHAR(50)NOUK业务主键IDfk_company_idVARCHAR(50)NOFK 所属公司IDfk_store_idVARCHAR(50)NOFK 所属门店IDcard_noVARCHAR(20)NOUK会员卡编号自编号chip_idVARCHAR(32)NOUK芯片ID唯一码实物卡phoneVARCHAR(11)NOINDEX绑定手机号无卡消费card_typeTINYINTNO-1-储值卡2-计次卡预留statusTINYINTNOINDEX0-冻结1-正常2-挂失3-注销total_rechargeBIGINTNO-累计充值金额不含赠送分total_giftBIGINTNO-累计赠送金额分total_consumeBIGINTNO-累计消费本金分total_gift_consumeBIGINTNO-累计赠送消费分current_balanceBIGINTNO-当前可用总余额本金赠送current_principalBIGINTNO-当前本金余额current_giftBIGINTNO-当前赠送余额total_pointsINTNO-累计获得积分used_pointsINTNO-已使用积分current_pointsINTNO-当前可用积分discount_rateDECIMAL(5,2)NO-折扣比例100不打折909折open_dateDATETIMENO-开卡日期expire_dateDATETIMEYES-有效期计次卡使用last_consume_timeDATETIMEYES-最后消费时间sort_indexINTYES-排序码create_byVARCHAR(50)YES-创建人create_timeDATETIMENOINDEX创建时间update_byVARCHAR(50)YES-修改人update_timeDATETIMENO-修改时间 多商户关键字段fk_company_id和fk_store_id实现数据隔离 查询时务必带上这两个条件确保不同商户/门店数据互不干扰。2. member_recharge开卡/充值记录表字段类型空键说明idBIGINT UNSIGNEDNOPK自增主键key_idVARCHAR(50)NOUK业务主键IDcard_idBIGINT UNSIGNEDNOFK会员卡自增IDcard_key_idVARCHAR(50)NOFK会员卡业务IDrecharge_noVARCHAR(32)NOUK充值流水号recharge_typeTINYINTNO-1-开卡2-充值3-赠送活动4-手动调账amountBIGINTNO-充值金额本金分gift_amountBIGINTNO-赠送金额分pay_methodTINYINTYES-1-现金2-微信3-支付宝4-银行卡operator_idVARCHAR(50)YES-操作人员IDremarkVARCHAR(255)YES-备注recharge_timeDATETIMENOINDEX充值时间sort_indexINTYES-排序码create_byVARCHAR(50)YES-创建人create_timeDATETIMENOINDEX创建时间update_byVARCHAR(50)YES-修改人update_timeDATETIMENO-修改时间3. member_consume消费明细表字段类型空键说明idBIGINT UNSIGNEDNOPK自增主键key_idVARCHAR(50)NOUK业务主键IDcard_idBIGINT UNSIGNEDNOFK会员卡自增IDcard_key_idVARCHAR(50)NOFK会员卡业务IDconsume_noVARCHAR(32)NOUK消费流水号order_idVARCHAR(32)YESINDEX关联订单号total_amountBIGINTNO-消费总金额原始金额分actual_amountBIGINTNO-实际扣款金额折扣后principal_amountBIGINTNO-扣本金金额gift_amountBIGINTNO-扣赠送金额discount_amountBIGINTNO-优惠金额earned_pointsINTNO-获得积分consume_timeDATETIMENOINDEX消费时间operator_idVARCHAR(50)YES-操作人员IDremarkVARCHAR(255)YES-备注sort_indexINTYES-排序码create_byVARCHAR(50)YES-创建人create_timeDATETIMENOINDEX创建时间update_byVARCHAR(50)YES-修改人update_timeDATETIMENO-修改时间4. member_balance_log⭐ 余额变动日志表核心字段类型空键说明idBIGINT UNSIGNEDNOPK自增主键key_idVARCHAR(50)NOUK业务主键IDcard_idBIGINT UNSIGNEDNOFK会员卡自增IDcard_key_idVARCHAR(50)NOFK会员卡业务IDlog_noVARCHAR(32)NOUK日志流水号change_typeTINYINTNO-1-开卡2-充值3-消费4-退款5-手动调整6-积分兑换7-余额重算修正change_amountBIGINTNO-变动金额正数增加负数减少分before_principalBIGINTNO-变动前本金余额after_principalBIGINTNO-变动后本金余额before_giftBIGINTNO-变动前赠送余额after_giftBIGINTNO-变动后赠送余额before_totalBIGINTNO-变动前总余额after_totalBIGINTNO-变动后总余额source_typeVARCHAR(30)YESINDEX来源类型recharge/consume/refund/adjustsource_idVARCHAR(50)YESINDEX来源表KeyIdoperator_idVARCHAR(50)YES-操作人IDremarkVARCHAR(255)YES-备注is_recalculatedTINYINTNO-是否被重算修正0-否1-是sort_indexINTYES-排序码create_byVARCHAR(50)YES-创建人create_timeDATETIMENOINDEX创建时间update_byVARCHAR(50)YES-修改人update_timeDATETIMENO-修改时间5. member_points_exchange积分兑换记录表字段类型空键说明idBIGINT UNSIGNEDNOPK自增主键key_idVARCHAR(50)NOUK业务主键IDcard_idBIGINT UNSIGNEDNOFK会员卡自增IDcard_key_idVARCHAR(50)NOFK会员卡业务IDexchange_noVARCHAR(32)NOUK兑换流水号points_usedINTNO-使用的积分exchange_typeTINYINTNO-1-抵现2-兑换礼品3-兑换优惠券exchange_valueBIGINTNO-兑换价值抵现金额或礼品价值分consume_idBIGINT UNSIGNEDYES-关联消费自增IDconsume_key_idVARCHAR(50)YES-关联消费业务IDstatusTINYINTNO-1-成功2-取消3-失效exchange_timeDATETIMENOINDEX兑换时间operator_idVARCHAR(50)YES-操作人IDremarkVARCHAR(255)YES-备注sort_indexINTYES-排序码create_byVARCHAR(50)YES-创建人create_timeDATETIMENOINDEX创建时间update_byVARCHAR(50)YES-修改人update_timeDATETIMENO-修改时间6. member_balance_recalc余额重算记录表审计字段类型空键说明idBIGINT UNSIGNEDNOPK自增主键key_idVARCHAR(50)NOUK业务主键IDcard_idBIGINT UNSIGNEDNOFK会员卡自增IDcard_key_idVARCHAR(50)NOFK会员卡业务IDrecalc_noVARCHAR(32)NOUK重算流水号old_principalBIGINTNO-重算前本金余额new_principalBIGINTNO-重算后本金余额old_giftBIGINTNO-重算前赠送余额new_giftBIGINTNO-重算后赠送余额old_totalBIGINTNO-重算前总余额new_totalBIGINTNO-重算后总余额diff_principalBIGINTNO-本金差异diff_giftBIGINTNO-赠送差异recalc_reasonVARCHAR(255)NO-重算原因operator_idVARCHAR(50)NO-操作人IDrecalc_timeDATETIMENOINDEX重算时间sort_indexINTYES-排序码create_byVARCHAR(50)YES-创建人create_timeDATETIMENOINDEX创建时间update_byVARCHAR(50)YES-修改人update_timeDATETIMENO-修改时间