1

这根本不是一个编程问题。让我解释一下:我正在创建一个游戏,为此我需要一个数据库来存储用户注册数据(例如用户名、电子邮件、密码)。如果用户获胜,他/她将获得现金积分。用户将能够用真钱兑换他/她的现金积分,所以我认为现金积分是一个非常非常关键的数据。我的问题是:您会将现金积分数据存储在同一个“用户”表中吗?或者您会创建一个名为“cash”的新表(例如),然后将其存储到其中?(从安全的角度来看)

谢谢

4

4 回答 4

1

如果您将现金积分存储在用户表中,则认为这是糟糕的设计。表应该是normalized. 您应该将现金积分存储在单独的表中,并将userId用作该表中的外键。您也可以研究加密现金积分表数据。

于 2013-07-15T19:56:15.270 回答
1

Cashpoints 肯定在一个单独的表中,但不是从安全角度来看。从设计的角度来看,它会更好,并且可以让您记录每个用户的 CashPoint 更改。

于 2013-07-15T19:57:37.637 回答
1

最好实现一个简单的分类帐系统,将交易记录为用户帐户的贷方或借方,并且帐户本身有一个可以审计的总数。

如果您涉及现金或类似现金的货币,您必须记录已执行的交易。如果有人抱怨缺少资金,您需要能够验证影响其余额的每笔交易并发现任何差异。

这也假定您正在使用事务来避免提交不完整的事务。余额调整和交易记录应属于同一笔交易。

与往常一样,尽可能无情地测试它。

于 2013-07-15T20:01:34.527 回答
1

那么您应该创建一个类似于银行余额的数据库设计。这样您就可以跟踪所有更改,这是

create table balance
(id int,
debit numeric (10,2),
credit numeric (10,2),
balance_before numeric(10,2),
balance_after numeric(10,2),
timestamp datetime,
user_id int,
description varchar(32),
...
);
于 2013-07-15T20:01:37.480 回答