作者Kenqr (function(){})()
看板Database
标题[SQL ] 会过期的点数,获得和使用的记录方式
时间Wed Jan 18 17:20:16 2023
使用者可以获得点数并用来买东西,但是点数有使用期限,
使用点数时会自动优先从最快过期的点数开始使用。
考虑到人为操作时总会有出错的时候,或者使用者可能会想要取消购买,
所以资料表需要记录足够的资讯,让资料可以进行修改或是删除。
假设使用者 foo 获得了 200 点会在 2023-05-01 过期的点数,
以及 300 点会在 2023-07-01 过期的点数。
之後花费 450 点进行购买,会把 5 月过期的 200 点都用掉,
并且把 7 月过期的 300 点用掉 250 点,剩下 50 点。
目前设想的记录方式如下(时间、备注等栏位省略):
credit
id user balance expire credit_id payment_id
1 foo 200 2023-05-01 null null
2 foo 300 2023-07-01 null null
3 foo -200 null 1 1
4 foo -250 null 2 1
payment
id user credit product_id
1 foo 450 5
不知道这样的设计是否合理,或者应该要如何修改比较好?
感觉应该是很常见的问题,但就算想 Google 也只会跑出一堆不相关的结果。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.194.140.105 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Database/M.1674033621.A.DBB.html
※ 编辑: Kenqr (123.194.140.105 台湾), 01/18/2023 17:27:07
1F:→ kop14922000: 路过,只是觉得好有亲切感,我前年第一份工作的点数 01/18 19:09
2F:→ kop14922000: 系统也是在想怎麽规划XD 01/18 19:09
3F:推 CSBS: 购买後点数逾期再取消购买你还不还点数 01/25 23:05
4F:→ CSBS: 点数这种东西基本要累点兑点还点到期还要逾期扣点这五个型态 01/25 23:07
5F:→ CSBS: 才会有正确的balance 01/25 23:08
6F:→ CSBS: 要更多功能性还可能要延迟生效所以不只建立日还要一个生效日 01/25 23:11
7F:→ CSBS: 预算可能来自不同单位的话还要名目及点数来源的栏位 01/25 23:13
这个实际上是公司内部使用的系统,所以需求没有一般的点数系统那麽复杂,
逾期後取消购买、延迟生效、预算来自不同单位这些都不在需求内。
累点兑点应该是指获得和使用点数,逾期扣点也没有问题,剩下的两个型态是指什麽呢?
※ 编辑: Kenqr (123.194.140.105 台湾), 01/30/2023 17:42:58