设计原则.数据库中数据的复制.web应用程序项目



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

TABLE WALLET:
ID,
UserID,
FriendID,
TotalDebtAmount

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

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

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

之前的概念是这样的:

TABLE WALLET:
ID,
CreditorUserID,
DebtorUserID,
TotalDebtAmount

User1User2 200$将生成一个条目:

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

但是选择所有的信用和债务都需要WHERE CreditorUserId=user OR DebtorUserID=user,当显示它时,我们必须检查当前用户列出的列并相应地修改金额(正数意味着DebtorUserCreditorUser,负数-相反,所以当在网站上显示User2的债务/信用时,我们需要将-200$更改为200$,因为User2DebtorUserID列)。

我们发现复制数据的解决方案更容易,但是这个项目主要是为了教育目的,所以我们的首要任务是使用良好的编程实践,有些人说复制数据不是其中之一。你觉得呢?

您复制了数据,这是不必要的。您也可以使用第一种表格布局类型执行查询。当然,查询会稍微复杂一点,但在我看来,复制数据是不值得的。

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

对于一个完整的工作示例,请参阅这篇文章

最新更新