我和2个朋友正在开始一个项目,简单的社交网络应用程序。问题在于,我们有一个表Wallet
,它将存储两个用户之间的所有事务值的总和。复制数据库中的数据 - web应用程序项目
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
和User1
由于User2
$ 200会产生一个条目:
ID : CreditorUserID : DebtorUserID : TotalDebtAmount
1 User1 User2 -200
但选择所有债权,债务将需要WHERE CreditorUserId=user OR DebtorUserID=user
并显示它时,我们会必须检查当前用户列在哪一列,并相应地修改金额(正数意味着DebtorUser
欠CreditorUser
并且负数 - 相反,所以当在网站上显示User2
的债务/信用时,我们需要将-200 $更改为200 $,因为User2
在DebtorUserID
列中)。
我们发现重复数据解决方案要容易得多,但该项目主要用于教育目的,因此我们的首要任务是使用良好的编程实践,并且有人说重复数据不是一种。你怎么看?
在关系建模,*复制数据*不意味着具有相同的值。这意味着具有相同的值*具有相同的含义*。 –