【问题标题】:Duplicating data in database - web application project在数据库中复制数据 - Web 应用程序项目
【发布时间】: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

User1User2 200$ 将生成一个条目:

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

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

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

【问题讨论】:

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

标签: database-design design-principles


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多