Database design 在数据库中复制数据-web应用程序项目

Database design 在数据库中复制数据-web应用程序项目,database-design,design-principles,Database Design,Design Principles,我和两个朋友正在启动一个简单的社交网络应用程序。让我烦恼的问题是,我们有一个表钱包,它将存储两个用户之间所有交易值的总和 TABLE WALLET: ID, UserID, FriendID, TotalDebtAmount 根据上一版本的经验,我们决定复制钱包条目,因此,如果总共User1owesUser2200$,wallet将有两个条目: ID : UserID : FriendID : TotalDebtAmount 1 User1 User2

我和两个朋友正在启动一个简单的社交网络应用程序。让我烦恼的问题是,我们有一个表
钱包
,它将存储两个用户之间所有交易值的总和

TABLE WALLET:
ID,
UserID,
FriendID,
TotalDebtAmount
根据上一版本的经验,我们决定复制钱包条目,因此,如果总共
User1
owes
User2
200$,
wallet
将有两个条目:

ID  :  UserID  :  FriendID  :  TotalDebtAmount
1      User1      User2           -200
2      User2      USer1            200
这将有助于创建所有用户债务和信用的列表,因为我们只需选择所有条目,
,其中UserID=user
。如果金额为正,我们的朋友欠我们;如果金额为负,我们欠朋友

以前的概念是这样的:

TABLE WALLET:
ID,
CreditorUserID,
DebtorUserID,
TotalDebtAmount
User1
由于
User2
200$将生成一个条目:

ID  :  CreditorUserID  :  DebtorUserID  :  TotalDebtAmount
1      User1              User2               -200
但选择所有信用和债务需要
其中CreditorUserId=user或debortoruserid=user
,在显示时,我们必须检查当前用户列在哪一列,并相应修改金额(正金额意味着
debortoruser
CreditorUser
,负-相反,因此当在网站上显示
User2
的债务/信用时,我们需要将-200美元更改为200美元,因为
debortoruserid
列中有
User2


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

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

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

有关完整的示例,请参见关系建模中的

,复制数据并不意味着拥有相同的值,而是意味着拥有具有相同含义的相同值。