【发布时间】:2015-07-14 22:27:26
【问题描述】:
我想在我一直致力于的自定义论坛上开发货币系统,但我不知道最好的方法。
我应该在我的用户表中添加一个新的“黄金”字段并使用 sql 语句递增吗?
id, user, pass, created_at, gold
逻辑:用户创建新的论坛帖子;更新用户表:gold + 1
或
我是否应该添加一个记录所有内容的事务表并执行count where user = x?
id, user_id, amount
1 3 1 (new forum post)
2 3 1 (new forum post)
3 12 -5 (item purchase)
4 3 -1 (deleted post)
5 9 1 (new forum post)
或者有更好的方法吗?
【问题讨论】:
-
货币系统到底是干什么用的?就像我根据您的示例假设的声誉一样?如果磁盘空间不是问题,我建议记录每个事务,以便您记录所有内容。当您无法解决其帐户的声誉/黄金/经验/等问题时,用户可能会变得挑剔。
-
嗯,有一个叫做Database Normalization的东西。部分原因意味着您不应该在表上创建大量的列。但这也取决于您要保存的数据类型以及您将来将如何处理这些数据。你打算有额外的收入天吗?金币活动?在这种情况下,最好使用事务表。但如果不是,它真的只是黄金,用户表中的一列就可以了。
-
我想在某种程度上它类似于声誉。这个想法是每次用户添加评论时将“黄金”增加 X 数量。如果我有数千行,
count()是否会变得低效? -
除了上面的 cmets,你可以同时做这两个 - 事务日志将显示总数是如何确定的,并且用户表将具有当前的效率平衡。但是数据库的黄金法则之一是不要将相同的数据存储两次。例如,可能存在性能至关重要的例外情况,但除非必要,否则应避免使用。所以,如果你只有一个,保留日志会更好(假设信息实际上是有用的)。如果
user_id上有索引,那么select sum(amount) from table2 where user_id = 1应该是相当有效的。
标签: php mysql sql laravel currency