2012-06-15 59 views
7

我正在編寫一個應用程序,它將涉及每月(或每週)固定金額的定期結算,並且可以持續到訂閱被取消爲止。客戶可以提前幾個週期支付。 他可以取消訂閱,然後在某些無薪期後回來。 我需要系統讓我知道一段時間過去了。定期結算數據庫設計

所以我燒了如何設計數據庫(也許不是一個數據庫的問題,而是一個編程)我的大腦,

是否有任何人來這樣的應用程序?採取了什麼方法?

回答

2

我認爲你已經過度複雜了。

創建表用戶:

pk id_user 
nm_user 
fl_status (active, canceled, pendent, etc) 

創建一個表預訂一個用戶到許多訂閱:

pk id_subscription 
fk id_user 
fl_type (maybe there are different subscriptions, with different prices) 
dt_in 
dt_out 

創建一個表支付一個訂閱了許多付款:

pk id_payment 
fk id_subscription 
fl_type (card, payment order, something else) 
fl_status (generated, sent, confirmed, canceled because of subscription canceled, canceled because of something else, etc) 
dt_generated 
dt_sent 
dt_confirmed 
dt_canceled 
[I think you will need another fields to follow and confirm the payment, but it depends of your payment model) 

現在您需要構建一些在特定時間每天運行的機器人。

如果您獲得所有活動客戶和每個客戶的最後一筆付款,您將知道是否需要生成新付款(如果最後一筆確認付款比實際日期多出x天)預付費,後付費等)。如果是,則生成新的付款訂單。

一個機器人會發送一封電子郵件或其他東西的訂單(和標誌然後)。

另一個機器人會使用您的付款模式確認付款。

當然,您需要非常好地定義您的模型,因爲每個用戶狀態都需要一個機器人來保存事情,直到它被取消或由於缺少付款而發送給法官。這是一個很多工作要做,但沒有什麼大不了的。

ps:如果它是一個更復雜的系統,數據庫將會持續存在,你將獲得所有你需要的信息,你有每個訂單的日誌,你知道每個訂單發生了什麼,因爲它們有日期和狀態。你可以估計一下,你將有多少到期的日期,一天之後支付多少,兩天之後等等。

+1

我會將付款分成發票和付款表,並使用更標準的字段名稱('id','subscription_id'等),除此之外,這看起來不錯。 Agile Toolkit可以處理不同的數據庫設計佈局:http:// agiletoolkit。組織/學習/理解/模型/加 – romaninsh

4

我想你可能會試圖讓設計變得太聰明,並且過度使用它。如果您考慮業務問題,每個付款間隔實際上都是發票。爲什麼不只是創建發票表並讓計劃作業根據每個帳戶的週期性以及在該時間間隔內是否處於活動狀態以特定間隔插入發票。

通過擁有實際的發票行,您可以獲得InvoiceID,您可以在向客戶尋求付款時參考並針對每個結算分別跟蹤付款狀態。

有時候簡單是最好的。