2

在 PHP/MySQL 中构建虚拟积分系统的最佳方法是什么?

我显然需要为每笔交易(借方/贷方)提供一张表格。我想我需要该表中的以下列:

  • TransactionID(唯一的交易 ID 从 1 开始,自动递增)

  • UserID(主用户表中的用户唯一 ID)

  • Type(赚取、购买、花费等)

  • ItemID(如果花在一个项目上)

  • Amount(正面或负面)。

问题:

1) 我需要此表中的任何其他列吗?

2)为此我需要任何其他表格吗?

例如,我是否需要另一个表来跟踪每个用户的总数?还是我会简单地将每个用户的总数计算为他们所有交易的总和?

起初,这个信用系统将纯粹是“玩钱”,但我确实希望将来添加一个“购买信用”选项,所以也许我应该为 3rd 方支付处理器 Unique Transaction ID 添加一列?或者我应该为购买的积分创建一个单独的表,然后通过我的脚本将两者联系在一起(例如总积分 = 获得的积分 + 购买的积分 - 花费的积分)?

除了回答我上面的问题之外,我将不胜感激任何和所有的见解和想法,包括指向如何解决这个问题的具体文章的链接,因为我以前从未编写过这样的东西。

谢谢!

4

2 回答 2

4

一些笔记。

我认为,如果您想建立一个处理财务的可靠系统,那么使用金融界的一些基本概念是有意义的。我不想说您必须完全实现所有会计功能,但很多事情对我来说似乎是合理的。

首先,金融交易涉及将钱从一个账户转移到另一个账户,所以user_id我不会使用account_id. 每个用户可能有多个帐户,每个帐户都有一个类型(查找)和货币。另外,我会避免使用“用户”一词来支持“派对”(派对角色关系模型)。

其次,总是至少涉及两方:资金从一个账户转移到另一个账户。购买物品时,个人账户余额减少,组织账户余额增加。

另外,我不会使用item_id,而是使用event_id. 每笔交易都与一个业务事件相关联。事件是系统中可能发生的各种事件的公共父表。每个Event的详细信息表都将保存特定于事件类型的信息。例如,您可以拥有purchase_event,deposit_event等。

因为transactiontable 是许多(可能是数千个)插入的主题,所以我不会在每次需要帐户余额时查询它。account在表格中保持合并余额是有意义的。

我希望这是有道理的。

于 2012-05-21T15:13:02.173 回答
0

除非你真的知道系统应该做什么,否则很难说数据库的架构。但我还是试试。

我认为在一张表中存储这么多信息不是一个好主意。

我会以这种方式做得更好 -transactions(id, user_id, amount, timestamp)这张表包含有关每笔付款的最少信息。

其他一切都是分开的,例如transactions_types(transaction_id, type)transactions_items(transaction_id, item)

关于学分。如果购买的货币相同,您只需再添加一种交易类型,如有必要,将表格添加为transactions_psid(transaction_id, psid).

如果货币不同,则完全取决于系统上的负载。只有一个具有唯一 transaction_id 的表是好的,直到它变得太多记录。

于 2012-05-21T15:26:07.857 回答