设计多个表格“例如发布和评论”,在两个表

时间:2016-12-08 04:53:36

标签: sql django postgresql django-models

我使用的是Postgres 9.6和Django 1.10,但这可能比我使用的软件包更通用。但是由于Django ORM限制或/和我的理解,它可能依赖于这些软件包。

我的问题是我想设计帖子和评论表。尽管看起来很简单,但我会大量使用同时获取PostsComments的查询 按日期排序,这是两个表格中的时间戳,所以我可以像1小时前发布,发布2小时前,发表评论3小时前,发布4小时前

初步设计可以是:

Posts

`id`(serial primary key) | `author`(foreign key) | `title`(string) | `body`(string) | `created_on`(timestamp)

Comments

`id`(serial primary key) | post(foreign key to `Posts`) | `author`(foreign key) | `body`(string) | `created_on`(timestamp)

我不知道使用本机SQL或SQLAlchemy之类的东西是否可行,但我认为无法合并两个表的posts所排序的commentscreated_on

我还研究了将帖子和评论设置成这样的东西:

Posts

`id`(serial primary key) | `author`(foreign key) | `title`(string) | `created_on`(timestamp)

Comments

`id`(serial primary key) | post(foreign key to `Posts`) | `author`(foreign key) | `body`(string) | `created_on`(timestamp) | `is_op` (Boolean)

其中is_op表示是OP(即帖子)还是帖子评论。由于我只有一个posts列,因此这种方法可以轻松获取commentscreated_on。但是,这可能会导致惩罚,因为我发布的帖子比评论更频繁,但每次我想要获取Comments的正文时,我都必须查看post表,body postscomments的最大长度要求不同。此方法也使用Django ORM更难获取回复的计数(即注释的数量 - 1是OP)。

如何以更有效的方式设计这些表格,以便获得:

  1. 按日期排序的评论和帖子。
  2. annotate(根据Django命名约定)一个查询中任何帖子的回复/喜欢数量。

0 个答案:

没有答案