私と 2 人の友人は、単純なソーシャル Web アプリのプロジェクトを開始しています。私を悩ませている問題は、Wallet
2 人のユーザー間のすべてのトランザクション値の合計を格納する table があることです。
TABLE WALLET:
ID,
UserID,
FriendID,
TotalDebtAmount
以前のバージョンからの経験に基づいて、ウォレット エントリを複製することにしました。したがって、合計で200 ドルのUser1
借りがある場合、 2 つのエントリがあります。User2
Wallet
ID : UserID : FriendID : TotalDebtAmount
1 User1 User2 -200
2 User2 USer1 200
これは、すべてのエントリを選択できるため、すべてのユーザーの債務とクレジットのリストを作成するときに役立ちますWHERE UserID=user
。金額が正の場合、友人は私たちに借りがあり、負の場合は友人に借りがあります。
以前のコンセプトは次のようになりました。
TABLE WALLET:
ID,
CreditorUserID,
DebtorUserID,
TotalDebtAmount
200$をUser1
支払うと、 User2
1 つのエントリが生成されます。
ID : CreditorUserID : DebtorUserID : TotalDebtAmount
1 User1 User2 -200
ただし、すべてのクレジットと負債を選択する必要がWHERE CreditorUserId=user OR DebtorUserID=user
あり、それを表示するときに、現在のユーザーがどの列にリストされているかを確認し、それに応じて金額を変更する必要があります (正の金額はDebtorUser
負っていることを意味しCreditorUser
、負の金額は反対であるため、ウェブサイトで負債/クレジットを表示する場合User2
、-200$ を列のとおり 200$ に変更する必要がありUser2
ますDebtorUserID
)。
データの複製ソリューションの方がはるかに簡単ですが、このプロジェクトは主に教育目的であるため、適切なプログラミング手法を使用することが優先されます。また、データの複製はそうではないと言う人もいます。どう思いますか?