货币 SQL 数据结构

Currency SQL data structure

我想在我一直致力于开发的自定义论坛上开发一个货币系统,但我不知道最好的方法。

我应该向我的用户 table 添加一个新的 "gold" 字段并使用 sql 语句递增吗?

id, user, pass, created_at, gold

逻辑:用户创建新论坛post;更新用户 table:gold + 1

我是否应该添加记录所有内容的事务 table 并执行 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)

是否有更好的方法?

这在很大程度上取决于您想用它做什么以及您喜欢哪种编程方式。

虽然要用一些事实来接近它:

  • 我希望论坛快点。为此,您应该只使用简单的 Select。像 SUM() 这样的函数需要更多的时间来执行。在一个小系统中这很可能不是问题,但是 mysql-db 通常伸缩性很差,所以你应该从一开始就记住这一点。

  • 您肯定想要一种跟踪交易的方法。主要是为了能够检查实际发生了什么。即使你建立了一个很好的系统来处理你的黄金,你仍然希望不时跟踪发生的事情。为此,存储交易更方便。

  • 冗余数据和事务同步可能是个问题。每个交易系统都存在保持一切同步的问题。使用 MySQL 并不难,因为 table 可以在您执行事务时被锁定。但是冗余数据更让人痛苦。您必须确保在其他操作干扰之前同时更改所有位置的数据。

在基本系统上,我会将数据存储在用户 table 中,并将所有事务作为日志保存在另一个 table 中。但切勿将其用于向用户输出。至于更进一步,这取决于您的系统需要什么。