2014-11-08 42 views
0

我的主要任务是在django应用程序中实现喜欢和评论,但我关心应用程序的模型结构和整体架构。更好性能的模型设计

我想要什么来实现的:

基本上我只有两个型号(例如图书和作者),我想被人喜欢,分享和评论。很显然,我需要创建相应的表格。问题是,如何引用Book和Author行中的每个Like,Share和Comment。

1-ST的解决方案:里面传来记住的第一件事情就是要增加相应的ForeignKeys在LikeShareComment这将指向AuthorBook。因此,例如Like表将在接下来的形式:

|---------|-----------|-----------| 
| ID | AUTHOR_ID | BOOK_ID | 

IDLikeAUTHOR_IDBOOK_ID是ForeignKeys到AuthorBook行ID。

这个解决方案的问题是,如果你想添加'喜欢'更多东西的能力,你需要添加新列到Like表。我认为这个解决方案很不好,因为Like表可以很快成长起来。

第二个解决方案:我已阅读this question解决方案建议创建一个父表,它可以被喜欢,然后继承它的书和作者表。

这个解决方案对我来说似乎非常好,但现在关注的是Django ORM中的具体继承。在书Two scoops of Django作者建议避免它几乎无处不在。

请问您是否应该选择多种(具体)继承来实现我想要的?或者,也许另一个更美丽和干净的解决方案?

感谢

回答

3

这正是那种认为generic relations创建来解决问题。该链接的文档描述了一个标签系统,但它可以很容易地应用于喜欢。

+0

感谢您的回复。我读过几篇关于GenericForeignKeys的文章,看起来他们在过滤方面有限。例如:如果我需要按content_type过滤喜欢,我可以做到吗? – 2014-11-08 17:22:23

+0

当然,因为content_type是Like模型本身的一个字段。您无法轻松完成的任务是在目标模型上进行过滤,例如书籍和作者,这很有意义,因为您无法预先知道相关对象是否具有该属性。 – 2014-11-08 17:26:03