复制数据库中的数据 - Web应用程序项目

时间:2013-01-08 11:54:08

标签: database-design design-principles

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

TABLE WALLET:
ID,
UserID,
FriendID,
TotalDebtAmount

根据以前版本的经验,我们决定复制钱包条目,因此,如果总共User1User2 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 1}}和否定 - 相反,所以当在User2的网站上显示债务/信用时,我们需要将-200 $更改为200 $,因为User2列在DebtorUserID列中。

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您为交易编写两个记录(信用卡和借记卡)的方法很好。这构成了double entry bookkeeping的基础,已在会计中使用了数百年。正如您在问题中所提到的,这将使许多操作和查询更容易处理。

有关它的完整工作示例,请参阅此post