2014-11-21 86 views
0

我正在寫一個在線工資系統,我有問題來設計我的數據庫。 客戶可以訂購我們的程序。他的信息存儲在模型「客戶端」中。客戶可以擁有一個或多個公司(模型「公司」)。每個公司都有工作人員(模型「工作人員」),工作人員還有一系列用於地址,稅務,社會保障等的其他模型。 如果工作人員的數據發生變化(例如婚禮後的新名稱或稅務數據)一個新的記錄與更改的日期將被註冊(模型中的字段「xxx_valid」)。由於歷史原因,舊的記錄必須保存在數據庫中。Django數據庫設計

這裏是我的模型:

class Client (models.Model): 
    client_name = models.CharField (...) 
    .... 

class Company (models.Model): 
    clientID = models.ForeignKey(Client) 
    company_name = models.CharField (...) 
    .... 

class Staff (models.Model): 
    clientID = models.ForeignKey(Client) 
    companyID = models.ForeignKey(Company) 
    staff_nr = models.IntegerField (....) 
    staff_valid = models.DateField (....) 
    staff_name = models.CharField (...) 
    .... 

class StaffTax (model.Model): 
    clientID = models.ForeignKey(Client) 
    companyID = models.ForeignKey(Company) 
    staffID = models.ForeignKey(Staff) 
    tax_valid = models.DateField (....) 
    tax_nr = models.CharField (...) 
    .... 

class StaffSocSec (model.Model): 
    clientID = models.ForeignKey(Client) 
    companyID = models.ForeignKey(Company) 
    staffID = models.ForeignKey(Staff) 
    sosec_valid = models.DateField (....) 
    sosec_nr = models.CharField (....) 
    .... 

一切工作正常,如果工作人員沒有歷史。 現在讓我們說,一名員工在模特Staff(field staff_valie)中獲得一個新的時期,因爲他的地址已經改變。這個新記錄將得到一個新的ID(pk) 如果工資計算開始,將使用最新的工作人員記錄。 對StaffTayx等的查詢集使用StaffID製作。 但稅務信息與模型Staff中的第一條(舊)記錄相關,並且查詢集沒有找到任何記錄。

當然,我可以忽略ID,在模型StaffTax(和其他人)中將staffID定義爲正常的Charfield,並使用此正常Charfield而不是使用主鍵ID來創建我的查詢集。 但是我會失去很多fun​​cionality,比如在modelformset中爲自動創建的選項。

我也不能設置staffID有主鍵,因爲其他客戶端可能有相同的StaffID,並且我得到一個唯一的錯誤。

有人有一個想法如何解決這個問題?

非常感謝你們!

回答

0

這聽起來像你只是想保持模型數據變化的歷史。有幾個選項,請參閱this list on Django packages

在編輯歷史和查看報告方面,django-simple-history可能是一個很好的匹配。那很容易admin integrationquery the history的能力。

或者

+0

感謝seddonym,但我不確定django-revions是否適合我。用戶通常希望訪問舊記錄,可以使用舊數據打印報告,並且用戶可以編輯舊數據以糾正錯誤並重新計算舊記錄的工資單。 我讀了文檔,它接縫我總是必須恢復使用它們之前的舊數據,這使得事情變得非常複雜 – sascha2014 2014-11-21 09:59:30

+0

還有其他一些軟件包可能會有所幫助,因此我已經更新了我的答案。 – seddonym 2014-11-21 11:14:38

+0

django-simple-history看起來不錯。非常感謝你的幫助 – sascha2014 2014-11-21 13:07:54