2011-06-29 44 views
3

只是一個quickey。我正在開發網站,您可以在那裏購買積分,然後花費在網站上。 我的問題是,是否可以存儲與用戶(用戶表,列信用和迭代量)信用額度或有必要(或只是更好)與用戶ID和金額單獨的表?在數據庫中儲存積分

感謝

回答

4

兩者實際上都是

考慮到您將通過貨幣交易來獲得這些信用,您希望能夠獲得所有交易的日誌(取決於您所在國家/地區的法律,您將需要此信息)。因此,您需要一個credits_transactions表。

user_id, transaction_id, transaction_details, transaction_delta 

由於編程計算你當前的餘額會過於昂貴的有很多交易的用戶,您還需要在用戶表中的credit_balance行,以便快速訪問。每當從credits_transactions插入一行時,使用觸發器自動更新該列(技術上,updatedelete不應在該表中允許)。這是插入觸發器的代碼。

CREATE TRIGGER ct_insert 
AFTER INSERT ON credits_transactions 
BEGIN 
    UPDATE users SET credit_balance = credit_balance + NEW.transaction_delta WHERE user_id = NEW.user_id; 
END 
;; 
+0

是啊,這正是我認爲將是最有效的方式。我認爲,從日誌計算平衡的其他想法會非常慢,認爲該網站的目標是有超過10萬用戶,並猜測他們會做交易或每天。 – Tom

+0

但我仍然有一個問題,你說過使用觸發器,你能解釋一下嗎? – Tom

+0

你的觸發器只適用於添加信用權嗎?花錢怎麼樣?在transaction_delta中可以爲負值? – Tom

0

我有存儲的購買,買學分,與用戶ID的表。 然後根據這個計算每次,如果它被索引,它應該很快,這樣你就可以很容易地有一個購買歷史。

1

如果您存儲在單獨的表格中,則可以保留更改信用的日誌。如果您在列中存儲,則只會有當前的信用額度。

2

我也有網站包含學分,發現它最容易將它們存儲在用戶表中,主要是因爲您需要在每個頁面(當用戶登錄時)訪問它。它只是一個整數,所以不會造成太大的傷害。我認爲實際爲這個值創建一個新表格可能會更糟,因爲它需要一個索引aswel。

一個很好的經驗法則是爲每個頁面上需要的信息創建一個用戶表,並將每個頁面上不需要的數據標準化(例如地址信息,描述等)。

編輯: 見此等反應,

如果你想擁有事務日誌aswel我會seperately存儲它們,因爲它們主要是用於記錄(或者如果用戶想要查看它們)。從日誌中即時計算它們對於較小的站點來說是很好的,但如果你真的需要擠壓性能,只需將實際值存儲在用戶表中。

1

如果你想保持信用歷史記錄的記錄像

  • 今天有多少信貸買。
  • 昨天花了多少錢。
  • 你是怎麼用學分

我覺得買它能夠更好地把這個單獨的表。通過這種方式,您可以通過應用數學運算來獲得這些結果。

0

學分就像金錢。如果用戶需要購買他們,那麼他們是錢。資金使用帳戶進行跟蹤。賬戶有關聯交易,存款取款 - 和餘額。搜索SO或Google搜索數據庫和帳戶。這裏僅僅是幾個例子: