1

我和 2 个朋友正在开始一个项目,一个简单的社交网络应用程序。困扰我的问题是我们有一个表Wallet,它将存储两个用户之间所有交易值的总和。

TABLE WALLET:
ID,
UserID,
FriendID,
TotalDebtAmount

根据以前版本的经验,我们决定复制钱包条目,因此如果总共User1User2200 美元,Wallet将有 2 个条目:

ID  :  UserID  :  FriendID  :  TotalDebtAmount
1      User1      User2           -200
2      User2      USer1            200

这在创建所有用户债务和信用的列表时会很有帮助,因为我们可以只选择所有条目,WHERE UserID=user. 如果金额为正,我们的朋友欠我们,如果为负,我们欠我们的朋友。

以前的概念是这样的:

TABLE WALLET:
ID,
CreditorUserID,
DebtorUserID,
TotalDebtAmount

User1200User2美元将生成一个条目:

ID  :  CreditorUserID  :  DebtorUserID  :  TotalDebtAmount
1      User1              User2               -200

但是选择所有信用和债务将需要WHERE CreditorUserId=user OR DebtorUserID=user并且在显示它时我们必须检查当前用户在哪一列中列出并相应地修改金额(正数表示欠款和负数 - 相反,因此在网站上显示债务/信用DebtorUser时,我们需要将 -200$ 更改为 200$,如列中所示)。CreditorUserUser2User2DebtorUserID

我们发现重复数据解决方案要容易得多,但这个项目主要用于教育目的,所以我们的首要任务是使用良好的编程实践,有些人说重复数据不是一个。你怎么看?

4

2 回答 2

0

您为一笔交易编写两条记录(贷方和借方)的方法是一种很好的方法。这构成了复式记账的基础,它在会计中已经使用了数百年。正如您在问题中所指出的,这将使许多操作和查询更容易处理。

有关它的完整示例,请参阅这篇文章

于 2013-01-08T16:55:32.480 回答
0

您重复数据,这是不必要的。您也可以使用第一种类型的表格布局进行查询。当然,查询会更复杂一些,但我认为不值得复制数据。

于 2013-01-08T16:23:14.907 回答