2013-01-08 32 views
1

我和2個朋友正在開始一個項目,簡單的社交網絡應用程序。問題在於,我們有一個表Wallet,它將存儲兩個用戶之間的所有事務值的總和。複製數據庫中的數據 - web應用程序項目

TABLE WALLET: 
ID, 
UserID, 
FriendID, 
TotalDebtAmount 

根據先前版本的經驗,我們決定複製錢包項,因此,如果在總User1User2 200 $,Wallet將有2項:

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

創建時,這會有所幫助所有用戶債務和信用清單,因爲我們可以選擇所有條目,WHERE UserID=user。如果金額是積極的,我們的朋友欠我們,如果是消極的,我們欠我們的朋友。

上的概念是這樣的:

TABLE WALLET: 
ID, 
CreditorUserID, 
DebtorUserID, 
TotalDebtAmount 

User1由於User2 $ 200會產生一個條目:

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

但選擇所有債權,債務將需要WHERE CreditorUserId=user OR DebtorUserID=user並顯示它時,我們會必須檢查當前用戶列在哪一列,並相應地修改金額(正數意味着DebtorUserCreditorUser並且負數 - 相反,所以當在網站上顯示User2的債務/信用時,我們需要將-200 $更改爲200 $,因爲User2DebtorUserID列中)。

我們發現重複數據解決方案要容易得多,但該項目主要用於教育目的,因此我們的首要任務是使用良好的編程實踐,並且有人說重複數據不是一種。你怎麼看?

+1

在關係建模,*複製數據*不意味着具有相同的值。這意味着具有相同的值*具有相同的含義*。 –

回答

0

重複數據,這是不必要的。您也可以使用第一種表格佈局來進行查詢。當然,查詢會有點複雜,但我認爲不值得複製數據。

0

您爲交易編寫兩筆記錄(一種信用卡和一張借記卡)的方法是一種很好的方法。這構成了double entry bookkeeping的基礎,這已被用於會計數百年。正如你在你的問題中提到的那樣,這將使許多操作和查詢更容易處理。

對於它的整個例子,請參見本post

相關問題