我正在寫一個在線工資系統,我有問題來設計我的數據庫。 客戶可以訂購我們的程序。他的信息存儲在模型「客戶端」中。客戶可以擁有一個或多個公司(模型「公司」)。每個公司都有工作人員(模型「工作人員」),工作人員還有一系列用於地址,稅務,社會保障等的其他模型。 如果工作人員的數據發生變化(例如婚禮後的新名稱或稅務數據)一個新的記錄與更改的日期將被註冊(模型中的字段「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來創建我的查詢集。 但是我會失去很多funcionality,比如在modelformset中爲自動創建的選項。
我也不能設置staffID有主鍵,因爲其他客戶端可能有相同的StaffID,並且我得到一個唯一的錯誤。
有人有一個想法如何解決這個問題?
非常感謝你們!
感謝seddonym,但我不確定django-revions是否適合我。用戶通常希望訪問舊記錄,可以使用舊數據打印報告,並且用戶可以編輯舊數據以糾正錯誤並重新計算舊記錄的工資單。 我讀了文檔,它接縫我總是必須恢復使用它們之前的舊數據,這使得事情變得非常複雜 – sascha2014 2014-11-21 09:59:30
還有其他一些軟件包可能會有所幫助,因此我已經更新了我的答案。 – seddonym 2014-11-21 11:14:38
django-simple-history看起來不錯。非常感謝你的幫助 – sascha2014 2014-11-21 13:07:54