【发布时间】:2013-01-08 11:54:08
【问题描述】:
我和 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
而User1 欠User2 200$ 将生成一个条目:
ID : CreditorUserID : DebtorUserID : TotalDebtAmount
1 User1 User2 -200
但是选择所有信用和债务需要WHERE CreditorUserId=user OR DebtorUserID=user,并且在显示它时,我们必须检查当前用户在哪一列中列出并相应地修改金额(正数表示DebtorUser欠CreditorUser,负数 -相反,所以当在网站上显示 User2 的债务/信用时,我们需要将 -200$ 更改为 200$,因为 User2 在 DebtorUserID 列中)。
我们发现重复数据解决方案要容易得多,但这个项目主要用于教育目的,所以我们的首要任务是使用良好的编程实践,有些人说重复数据不是一个。你怎么看?
【问题讨论】:
-
在关系建模中,复制数据并不意味着具有相同的值。这意味着具有相同的值具有相同的含义。
标签: database-design design-principles