2014-11-21 4 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_valie)에서 새로운 기간을 갖게됩니다. 이 새 레코드는 새로운 ID (pk)를 받게됩니다 급여 계산이 시작되면 직원의 최신 레코드가 사용됩니다. Querysets to StaffTayx 등은 StaffID를 사용하여 만들어집니다. 세금 정보는 모델 직원의 첫 번째 (이전) 레코드와 관련이 있으며 쿼리 세트는 레코드를 찾지 않습니다.

당연히 ID를 무시하고 모델 StaffTax (및 기타)에서 staffID를 일반 Charfield로 정의하고 기본 키드 ID 대신이 일반 Charfield를 사용하여 쿼리 세트를 만들 수 있습니다. 하지만 modelformset에 대한 자동 생성 옵션과 같은 많은 기능이 느슨합니다.

다른 클라이언트가 동일한 StaffID를 가질 수 있으며 고유 오류가 발생하여 staffID에 primery 키가 있습니다.

아무도이 문제를 해결하는 방법을 알고 있습니까?

고마워요!

답변

0

모델 데이터의 변경 기록을 보관할 수있게하려는 것 같습니다. 밖에 몇 가지 옵션이 있습니다 (this list on Django packages 참조).

기록을 편집하고 보고서를 보는 관점에서 보면 django-simple-history이 적합 할 수 있습니다. 그게 admin integration이고 능력은 query the history입니다.

또는

+0

감사합니다 seddonym,하지만 장고 - 부흥이 나를 위해 작동하는지 모르겠습니다. 사용자는 오래된 레코드에 자주 액세스하려고하며 이전 데이터로 보고서를 인쇄 할 수 있으며 사용자는 이전 데이터를 편집하여 오류를 수정하고 이전 레코드에 대한 급여를 다시 계산할 수 있습니다. 필자는 문서와 이음새를 읽었습니다. 필자는 이전 데이터를 사용하기 전에 항상 데이터를 복원해야만합니다. 따라서 매우 복잡한 작업을 수행하게됩니다. – sascha2014

+0

그에 대한 도움이 될만한 몇 가지 패키지가 있습니다. – seddonym

+0

django-simple-history가 좋습니다. 도와 주셔서 정말로 고맙습니다 – sascha2014