2013-01-08 68 views
1

我和2个朋友正在开始一个项目,简单的社交网络应用程序。问题在于,我们有一个表Wallet,它将存储两个用户之间的所有事务值的总和。复制数据库中的数据 - web应用程序项目

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 

User1由于User2 $ 200会产生一个条目:

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

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

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

+1

在关系建模,*复制数据*不意味着具有相同的值。这意味着具有相同的值*具有相同的含义*。 –

回答

0

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

0

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

对于它的整个例子,请参见本post

相关问题