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
owesUser2
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
)
我们发现复制数据解决方案容易得多,但这个项目主要是出于教育目的,所以我们的首要任务是使用良好的编程实践,有些人说复制数据不是其中之一。你认为呢?你复制了数据,这是不必要的。你也可以使用第一种类型的表布局进行查询查询当然会有点复杂,但我认为不值得重复数据。你为一笔交易写两个记录,一个贷方和一个借方,这是一个很好的方法。这构成了的基础,在会计中已经使用了数百年。正如你在问题中所指出的,这将进行许多操作而且查询更容易处理 有关完整的示例,请参见关系建模中的,复制数据并不意味着拥有相同的值,而是意味着拥有具有相同含义的相同值。