1

私と 2 人の友人は、単純なソーシャル Web アプリのプロジェクトを開始しています。私を悩ませている問題は、Wallet2 人のユーザー間のすべてのトランザクション値の合計を格納する table があることです。

TABLE WALLET:
ID,
UserID,
FriendID,
TotalDebtAmount

以前のバージョンからの経験に基づいて、ウォレット エントリを複製することにしました。したがって、合計で200 ドルのUser1借りがある場合、 2 つのエントリがあります。User2Wallet

ID  :  UserID  :  FriendID  :  TotalDebtAmount
1      User1      User2           -200
2      User2      USer1            200

これは、すべてのエントリを選択できるため、すべてのユーザーの債務とクレジットのリストを作成するときに役立ちますWHERE UserID=user。金額が正の場合、友人は私たちに借りがあり、負の場合は友人に借りがあります。

以前のコンセプトは次のようになりました。

TABLE WALLET:
ID,
CreditorUserID,
DebtorUserID,
TotalDebtAmount

200$をUser1支払うと、 User21 つのエントリが生成されます。

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

ただし、すべてのクレジットと負債を選択する必要がWHERE CreditorUserId=user OR DebtorUserID=userあり、それを表示するときに、現在のユーザーがどの列にリストされているかを確認し、それに応じて金額を変更する必要があります (正の金額はDebtorUser負っていることを意味しCreditorUser、負の金額は反対であるため、ウェブサイトで負債/クレジットを表示する場合User2、-200$ を列のとおり 200$ に変更する必要がありUser2ますDebtorUserID)。

データの複製ソリューションの方がはるかに簡単ですが、このプロジェクトは主に教育目的であるため、適切なプログラミング手法を使用することが優先されます。また、データの複製はそうではないと言う人もいます。どう思いますか?

4

2 に答える 2

0

トランザクションに対してクレジットとデビットの 2 つのレコードを書き込むというあなたのアプローチは良いものです。これは、何百年もの間会計で使用されてきた複式簿記の基礎を形成します。質問で指摘したように、これにより多くの操作とクエリの処理が容易になります。

完全に機能する例については、この投稿を参照してください

于 2013-01-08T16:55:32.480 に答える
0

不要なデータを複製します。最初のタイプのテーブル レイアウトでもクエリを実行できます。もちろん、クエリはもう少し複雑になりますが、私の意見では、データを複製する価値はありません。

于 2013-01-08T16:23:14.907 に答える