【问题标题】:generate unique voucher/code for every customer/user为每个客户/用户生成唯一的凭证/代码
【发布时间】:2019-03-25 12:48:42
【问题描述】:
我尝试建立像grou这样的网站,这是一个在商家中销售某些商品的代金券的平台。
customer 或user 可以购买vouchers 并根据他们购买的vouchers 在线下商店(或商家)兑换。
我对兑换凭证的逻辑或数据库设计感到困惑。我想问什么:
如何为users 购买的每张优惠券/优惠券 生成唯一代码。每张在网站上发布的凭证都有主键。如果10位客户购买了同一张优惠券,如何避免重复兑换。如果我添加唯一代码,我应该在vouchers 表中添加还是在users 结帐后生成它。
我是否应该为兑换和兑换细节制作表格。以及如果该凭证已被使用如何提供标志。
请给我一些建议。谢谢。
【问题讨论】:
标签:
database
laravel
database-design
data-modeling
laravel-5.6
【解决方案1】:
我认为您应该查看users 和vouchers 表/模型之间的many to many relationships。这基本上意味着许多users 可以有许多vouchers,反之亦然。
然后该表可以包含其他字段,例如 redeemed(可能是 dateTime 字段)和 notes/details。将redeemed 作为日期时间字段意味着您可以设置user 兑换此优惠券的确切时间。
这可用于使user 不会多次兑换优惠券。
【解决方案2】:
第一个问题
您可以使用凭证 ID,例如用户 ID。因此,如果我们有 2 个用户和 1 个凭证,那么这个唯一代码将是这样的:1-1、1-2。
如果它们看起来像 1-1 和 1-2,那么在 - 标记上进行简单分解,您将拥有两个元素数组,其中第一个是凭证 ID,第二个是用户 ID。您可以将其存储在凭证表中...
但更好的方法是使用多对多关系。您正在创建 Users、Vouchers 和 UserVouchers 表并在它们之间连接函数。用户可以有多个 userVoucher,但 userVoucher 只有一张凭证。看看我的皮卡数据库:http://www.laravelsd.com/share/8O0xtZ。这称为枢轴,您在将用户与凭证连接时创建它。
第二个问题
从UserVoucher 关系中,您将知道此优惠券已使用了多少次。您只需要在 Vouchers 表中有一列,例如max_users,如果您在那里写例如 4,如果您在 UserVoucher 中有 4 行或在前端有 4 行,则需要防止创建新的交互,您可以检查这个并且不要t 显示购买按钮。两种安全方式都会很好;)