Django - 如何标准化数据库? [关闭]

2023-12-09

我一直问人们应该如何组织我的模型,他们一直告诉我规范化数据库。

有人能给我看一个规范化 Django 模型的示例吗?


规范化不是 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 文档讨论关系建模不同程度的标准化.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django - 如何标准化数据库? [关闭] 的相关文章

随机推荐