Dja*_*rei 0 python django database-design django-models django-views
我一直在问人们应该如何组织我的模型,他们一直告诉我要规范化数据库.
有人能给我看一个规范化的Django模型的例子吗?
规范化不是Django甚至Python概念 - 它是设计关系数据库模式的更广泛方法,可以删除重复并消除冗余.
在django中,这意味着您可能拥有多个较小的模型而不是一个模型,这些模型表示数据库表之间的关系ForeignKey以及Model APIManyToMany提供的字段.
因此,使用django docs设计的一个例子,说我们为一家报纸公司工作,我们希望跟踪每个记者和他们发布的文章.你可以先设计一个这样的模型
class Newspaper(models.Model):
reporter = models.CharField(max_length=30)
email = models.EmailField()
headline = models.CharField(max_length=100)
Run Code Online (Sandbox Code Playgroud)
如果我们填充这个模型,一旦记者发布了多篇文章,我们就会有冗余,因为我们将复制电子邮件信息,将相同的电子邮件地址存储在多行中.这是一个问题,因为将来如果我们想要更新记者电子邮件地址,我们可能会错过行并破坏我们的数据.
所以我们可以开始对此进行改进,并开始通过定义两个单独的表来规范化我们的模型,这两个表使用一个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)
Run Code Online (Sandbox Code Playgroud)
现在我们不会复制记者电子邮件地址,因为我们可以将此ONCE存储在Reporter表中,以便将来更容易更新此值.
现在这是一个有点人为的答案,我相信你可以进一步改进这个设计,但希望它能证明这一点.我真的建议你阅读django文档,讨论关系建模和各种规范化程度.