规范化不是 Django 甚至 Python 的概念 - 它是一种更广泛的设计关系数据库模式的方法,可以消除重复并消除冗余。
在 django 中,这意味着您可能拥有多个较小的模型,而不是一个模型,它们通过以下方式表示数据库表之间的关系ForeignKey and ManyToMany提供的字段模型API.
因此,使用一个来自Django 文档,假设我们在一家报业公司工作,我们希望跟踪每位记者以及他们发表的文章。您可以首先设计一个这样的模型
class Newspaper(models.Model):
reporter = models.CharField(max_length=30)
email = models.EmailField()
headline = models.CharField(max_length=100)
如果我们填充这个模型,一旦记者发表多篇文章,我们就会产生冗余,因为我们将复制电子邮件信息,将相同的电子邮件地址存储在多行中。这是一个问题,因为将来如果我们想要更新记者的电子邮件地址,我们可能会丢失行并损坏我们的数据。
因此,我们可以开始对此进行改进,并通过定义两个单独的表来开始标准化我们的模型,这两个表使用ForeignKey
字段来映射多对一关系(即一名记者可以发表多篇文章,但一篇文章只有一名记者)。
class Reporter(models.Model):
name = models.CharField(max_length=30)
email = models.EmailField()
class Article(models.Model):
headline = models.CharField(max_length=100)
reporter = models.ForeignKey(Reporter)
现在我们不会复制记者的电子邮件地址,因为我们可以将其存储在记者表中一次,以便将来更轻松地更新该值。
现在这是一个有点人为的答案,我相信您可以进一步改进这个设计,但希望它能证明这一点。我真的建议你阅读django 文档讨论关系建模和不同程度的标准化.