2012-07-19 80 views
4

我們有一個計費系統,我們處理個人費用以及經常性費用(訂閱)。用於處理個人和經常性費用的數據庫設計

有兩個SQL表:

StandardCharges 
RecurringCharges 

StandardCharges表保存1個月,客戶購買的單個產品。

RecurringCharges表包含按日期收費的重複項目。到時,我們的系統會自動創建一個重複請求,該請求會向StandardCharges表中添加一行,並在RecurringCharges表中將收費按日期增加到下個月。

在每個月末,我們從StandardCharges表中獲取每個客戶的總價值並創建發票。

有沒有一種設計模式或其他方式做到這一點?這是正確的數據庫設計嗎?理想情況下,我想在一個Charges表中持有所有費用,並從那裏管理經常性費用?

謝謝

+0

介意給你更多的建模背景嗎? – user1494736 2012-07-20 03:47:29

回答

2

我懷疑你的設計確實是正確的。

在考慮現實世界中的數據時,「可能的」交易(IE,交易尚未發生並且可能不會實現,可能是因爲客戶超出了信用額度)沒有意義承諾和實際交易。

將數據合併到單個表格中也會使報告變得困難,因爲您必須應用特殊的過濾標準並存儲額外的元數據(如TransactionCompleted和TransactionIsFutureCharge)。

如果我提出一個建議,將被重命名StandardCharges的東西更接近它擁有像CompletedTransactions數據和RecurringTransactionsPendingTransactions

+1

我投票保留第二個表名並按照建議更改第一個表名。 – ErikE 2012-07-20 08:14:32

+0

@ErikE,我爲這個名字辛勤工作,但認爲待處理交易在命名(Future,Recurring,OnEvent等)方面提供了更多的靈活性,而不僅僅是重複收費。如果沒有更多的上下文,很難說兩種方式。 – Kane 2012-07-20 08:24:14

+1

待定意味着每次充電一行,並且不需要重現信息。這是一個模板,而不是僅僅等待的實際費用。 – ErikE 2012-07-20 08:33:01

0

目前的設計對我來說似乎很合理。但是,如果要合併這兩個表格,則可以簡單地添加名爲IsRecurring或IsFuture或IsScheduled的BIT列,或者您希望用來指定否則將在RecurringCharges中執行的費用的任何內容。然後,當您的到期日期被重複收費時,您只需插入同一張表格而不是另一張表格。至於發票,您只需在查詢中添加條件以篩選出設置了BIT列的費用。

+0

我不同意他們可以合理地在同一張桌子上。這使得事情變得複雜,因爲**沒有很好的理由。 – ErikE 2012-07-20 08:16:34

相關問題