2011-07-15 39 views
0

我真的很擔心設計完美的桌子來處理交易和佣金。特別是我們真的不希望表格在任何情況下都不同步。如何從電子商務應用程序設計收入表?

基本上這就像ebay,商家出售給買家,我們從每筆交易中獲得佣金。

的應用程序使用笨已經建成,它具有:

Merchants(id,name,balance) 
Transactions(id,merchant_id,buyer_id,amount,transaction_id) 

我們做什麼其他表,如果需要,使我們能夠獲取我們收入和賣方收入,什麼是處理退款的最佳數據庫機制?

我們是否應該將每個存款的另一個表格與商戶餘額進行比較,而不是+ balance行。

+0

Transactions表中的transaction_id是什麼? – Sukumar

+0

這是授權網絡交易ID – Ryan

回答

2

每當您處理任何財務任務時,請始終存儲儘可能多的信息。

保持所有表格同步的方法有兩種。

  • 數據庫級別 - 使用選項,例如存儲過程和觸發器

  • 應用水平 - 使用交易(InnoDB的),並確保該交易是原子。 (我建議去與此)

關於數據庫設計 -

添加列commissionTransactions跟蹤你的佣金。這些數據可以預先在物品定價時或在交易過程中實時計算。

買方支付product cost + commission,賣方得到product cost,你得到commission。如果您的佣金是一個變量(不是固定的費率和每個項目之間的變化),您可以在Items表中存儲一列。從現在起事情應該是微不足道的。你只需要維護一個History表,它保存了與用戶相關的交易列表。它看起來像

AccountHistory(id, transaction_type, transaction_id, amount) 

你可能分裂AccountHistory爲兩個 - 一個用於傳入錢,另一個用於傳出的錢。

所以每次交易發生以下情況

  1. 加入WTO對Transactions表。
  2. 入世AccountHistory買方
  3. 更新買家平衡
  4. 入世AccountHistory爲賣家
  5. 更新賣家平衡

這一切都應該是原子的。

對於回滾,您可以添加一列transaction_type來區分回退與正常事務,或者您可以維護一個單獨的表。

0

曾與一個數據庫工作,其中設計的金融交易分散在一堆不同的表中,我可以告訴你,將所有的交易記錄在一張表中會好得多。您應該將事務類型添加到事務表(以及事務類型的查找表)。

然後每筆交易可以有一個單獨的線,用於佣金和賣家產品成本。稍後撤消的交易將以負數輸入。對於這些類型的事物添加父事務處理字段也很有幫助,以便您可以輕鬆識別它正在更改的事務。

構成事務一部分的所有數據條目都應該位於存儲過程中並具有事務,以便如果插入的一部分失敗,則整個事件立即回滾。這很關鍵。它需要存儲在proc中,以便任何人(除了系統dbas)都可以直接訪問存儲財務記錄的表。

當您開始考慮處理金融交易時,您可以做的最糟糕的事情是單獨爲用戶界面設計。您需要設計您需要的財務報告。您需要諮詢將對您的財務進行審計的人員,以瞭解他們需要哪些信息以及他們期望您採取何種內部控制措施來防止內部欺詐和外部欺詐。

相關問題