使用者可以获得点数并用来买东西,但是点数有使用期限,
使用点数时会自动优先从最快过期的点数开始使用。
考虑到人为操作时总会有出错的时候,或者使用者可能会想要取消购买,
所以资料表需要记录足够的资讯,让资料可以进行修改或是删除。
假设使用者 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 也只会跑出一堆不相关的结果。