只是一個quickey。我正在開發網站,您可以在那裏購買積分,然後花費在網站上。 我的問題是,是否可以存儲與用戶(用戶表,列信用和迭代量)信用額度或有必要(或只是更好)與用戶ID和金額單獨的表?在數據庫中儲存積分
感謝
只是一個quickey。我正在開發網站,您可以在那裏購買積分,然後花費在網站上。 我的問題是,是否可以存儲與用戶(用戶表,列信用和迭代量)信用額度或有必要(或只是更好)與用戶ID和金額單獨的表?在數據庫中儲存積分
感謝
兩者實際上都是。
考慮到您將通過貨幣交易來獲得這些信用,您希望能夠獲得所有交易的日誌(取決於您所在國家/地區的法律,您將需要此信息)。因此,您需要一個credits_transactions
表。
user_id, transaction_id, transaction_details, transaction_delta
由於編程計算你當前的餘額會過於昂貴的有很多交易的用戶,您還需要在用戶表中的credit_balance
行,以便快速訪問。每當從credits_transactions
插入一行時,使用觸發器自動更新該列(技術上,update
和delete
不應在該表中允許)。這是插入觸發器的代碼。
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
;;
我有存儲的購買,買學分,與用戶ID的表。 然後根據這個計算每次,如果它被索引,它應該很快,這樣你就可以很容易地有一個購買歷史。
如果您存儲在單獨的表格中,則可以保留更改信用的日誌。如果您在列中存儲,則只會有當前的信用額度。
我也有網站包含學分,發現它最容易將它們存儲在用戶表中,主要是因爲您需要在每個頁面(當用戶登錄時)訪問它。它只是一個整數,所以不會造成太大的傷害。我認爲實際爲這個值創建一個新表格可能會更糟,因爲它需要一個索引aswel。
一個很好的經驗法則是爲每個頁面上需要的信息創建一個用戶表,並將每個頁面上不需要的數據標準化(例如地址信息,描述等)。
編輯: 見此等反應,
如果你想擁有事務日誌aswel我會seperately存儲它們,因爲它們主要是用於記錄(或者如果用戶想要查看它們)。從日誌中即時計算它們對於較小的站點來說是很好的,但如果你真的需要擠壓性能,只需將實際值存儲在用戶表中。
如果你想保持信用歷史記錄的記錄像
我覺得買它能夠更好地把這個單獨的表。通過這種方式,您可以通過應用數學運算來獲得這些結果。
是啊,這正是我認爲將是最有效的方式。我認爲,從日誌計算平衡的其他想法會非常慢,認爲該網站的目標是有超過10萬用戶,並猜測他們會做交易或每天。 – Tom
但我仍然有一個問題,你說過使用觸發器,你能解釋一下嗎? – Tom
你的觸發器只適用於添加信用權嗎?花錢怎麼樣?在transaction_delta中可以爲負值? – Tom