【发布时间】:2009-11-02 10:43:00
【问题描述】:
我们正在推出一个网站(付费订阅),注册过程包括输入激活码。激活码印在刮刮卡上,并通过线下渠道销售。其中一些卡可以使用 1 个月。其他的是3个月和1年。激活码是唯一的 10 位随机数。
当访问到期时,用户可以购买另一张激活卡并通过输入新的激活码来延长订阅。此外,如果他们要求,我们也应该能够延长他们的订阅。例如,直到某个日期(例如再延长 1 周)。
考虑到以上信息,您将如何设计用户-激活码关系的数据库?你觉得这个设计好不好?
tbl_user
----------------
id
name
status_id
tbl_user_status
----------------
id
description
tbl_activation_code
----------------
activation_code
activation_code_type_id
activation_code_status_id
user_id
activated_date
expiry_date
tbl_activation_code_type
----------------
id
description
tbl_activation_code_status
----------------
id
description
更新:仅需要激活码:
1) 初次注册时
2) 接近访问到期日期(例如 7 天)时,系统会显示通知,其中包含指向输入激活码的页面的链接
3) 过期后,当用户尝试登录时,会要求她提供激活码
因此,不希望用户在需要时键入激活码。
【问题讨论】:
-
+1 表示“随机数”。仍然有很多傻瓜在这里使用序列:(
-
确保随机数空间足够大,否则我可能会猜到它们,这意味着您需要的地址空间是您需要的地址空间的 100-1000 倍(因此多出 3-4 个数字)。所以对你来说,听起来你可以安全地发行几百万/几千万张卡,请记住这一点。
-
Kurt,你的意思是用 10 位数的随机码我可以“安全地发行几百万/几千万张卡”吗?
-
随机是个好主意。但是,如果您决定使用某种类型的序列,您可以将校验和数字附加到递增数字的末尾。这具有序列带来的好处(很容易准确地知道你给出了多少,相对的分布顺序),而不会在黑客或打字错误的情况下真正放弃商店。
标签: mysql database database-design data-structures