我使用的是Postgres 9.6和Django 1.10,但这可能比我使用的软件包更通用。但是由于Django ORM限制或/和我的理解,它可能依赖于这些软件包。
我的问题是我想设计帖子和评论表。尽管看起来很简单,但我会大量使用同时获取Posts
和Comments
的查询
按日期排序,这是两个表格中的时间戳,所以我可以像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
所排序的comments
和created_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
列,因此这种方法可以轻松获取comments
和created_on
。但是,这可能会导致惩罚,因为我发布的帖子比评论更频繁,但每次我想要获取Comments
的正文时,我都必须查看post
表,body
posts
和comments
的最大长度要求不同。此方法也使用Django ORM更难获取回复的计数(即注释的数量 - 1是OP)。
如何以更有效的方式设计这些表格,以便获得: