模型冗余django表?

时间:2014-08-18 21:50:33

标签: python database django database-design django-models

我正在努力找出Django项目的模型:一个跟踪Books的应用。

在其他字段中,每本书都有/ PrinterPublisher,它们基本相同。所以,这就是它的立场:

class Book(models.Model):
    title     = models.CharField(max_length=100)
    printer   = models.ForeignKey('Printer')
    publisher = models.ForeignKey('Publisher')

class Printer(models.Model):
    name      = models.CharField(max_length=100)
    location  = models.CharField(max_length=100)

class Publisher(models.Model):
    name      = models.CharField(max_length=100)
    location  = models.CharField(max_length=100)

在我看来,这是一个糟糕的数据库形式:它不是DRY。此外,通常情况下,Book可能由出版相同或另一本书的公司打印:换句话说,表格可以重叠。因此,两个模型PrinterPublisher应该真正合并,而它们需要在管理员中保持不同。

我的问题:如何做到最好?我应该创建另一个模型Firm,并在其与Printer / Publisher之间创建一对一的关系吗?

1 个答案:

答案 0 :(得分:0)

Django处理它的方法是创建Abstract Base Model。这是创建模型的干燥方式。这是代码:

class BaseModel(models.Model):
    name      = models.CharField(max_length=100)
    location  = models.CharField(max_length=100)

    class Meta:
        abstract = True

class Printer(BaseModel):
    pass

class Publisher(BaseModel):
    pass

这将允许您只指定一次冗余字段。此外,如果您需要向一个模型添加任何额外字段,只需添加它们而不是使用pass