Python Django数据库设计
我正在写一个在线工资系统,我在设计数据库时遇到了问题。 客户可以签约我们的项目。他的信息存储在模型客户机中。客户可以有一个或多个公司模型公司。每个公司都有员工模型员工,一名员工有一套其他的地址、税务、社会保障等模型。 如果员工的数据发生变化,例如婚礼后的新姓名,或税务数据发生变化,则带有变化日期的新记录将在xxx_字段中注册,并在模型中有效。由于历史原因,旧记录必须保存在数据库中 以下是我的模型:Python Django数据库设计,python,django,database,Python,Django,Database,我正在写一个在线工资系统,我在设计数据库时遇到了问题。 客户可以签约我们的项目。他的信息存储在模型客户机中。客户可以有一个或多个公司模型公司。每个公司都有员工模型员工,一名员工有一套其他的地址、税务、社会保障等模型。 如果员工的数据发生变化,例如婚礼后的新姓名,或税务数据发生变化,则带有变化日期的新记录将在xxx_字段中注册,并在模型中有效。由于历史原因,旧记录必须保存在数据库中 以下是我的模型: class Client (models.Model): client_name = mo
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 (....)
....
如果员工没有任何历史记录,那么一切都正常。
现在让我们假设,一名员工在ModelStaff field staff_valie中获得了一个新的句号,因为他的地址已更改。此新记录将获得一个新的id pk
如果开始工资计算,将使用员工的最新记录。
对StaffTayx等的查询设置使用StaffID进行。
但是税务信息与model Staff中的第一个旧记录相关,查询集找不到任何记录
当然,我可以忽略ID,将StaffTax和其他模型中的staffID定义为普通Charfield,并使用这个普通Charfield而不是primery key ID创建查询集。
但我会失去很多功能性,比如在modelformset中自动创建的选项
我也不能将staffID设置为primery key,因为其他客户机可能具有相同的staffID,而我会得到一个唯一的错误
有人知道如何解决这个问题吗
谢谢大家 听起来您只是希望能够保存模型数据更改的历史记录。有几种选择,请参阅 在编辑历史和查看报告方面,可能是一个很好的匹配。这有助于提高效率,并有能力轻松实现
或者谢谢seddonym,但我不确定django修订版是否适合我。用户经常希望访问旧记录,可以使用旧数据打印报告,用户可以编辑旧数据以更正错误并重新计算旧记录的工资单。我阅读了文档,在使用它们之前,我总是要还原旧数据,这使得事情变得非常复杂。这里有一些其他的软件包可能会有帮助,我已经相应地更新了我的答案。