我的主要任务是在django应用程序中实现喜欢和评论,但我关心应用程序的模型结构和整体架构。更好性能的模型设计
我想要什么来实现的:
基本上我只有两个型号(例如图书和作者),我想被人喜欢,分享和评论。很显然,我需要创建相应的表格。问题是,如何引用Book和Author行中的每个Like,Share和Comment。
1-ST的解决方案:里面传来记住的第一件事情就是要增加相应的ForeignKeys在Like
,Share
和Comment
这将指向Author
和Book
。因此,例如Like
表将在接下来的形式:
|---------|-----------|-----------|
| ID | AUTHOR_ID | BOOK_ID |
凡ID
是Like
,AUTHOR_ID
和BOOK_ID
是ForeignKeys到Author
和Book
行ID。
这个解决方案的问题是,如果你想添加'喜欢'更多东西的能力,你需要添加新列到Like
表。我认为这个解决方案很不好,因为Like
表可以很快成长起来。
第二个解决方案:我已阅读this question解决方案建议创建一个父表,它可以被喜欢,然后继承它的书和作者表。
这个解决方案对我来说似乎非常好,但现在关注的是Django ORM中的具体继承。在书Two scoops of Django
作者建议避免它几乎无处不在。
请问您是否应该选择多种(具体)继承来实现我想要的?或者,也许另一个更美丽和干净的解决方案?
感谢
感谢您的回复。我读过几篇关于GenericForeignKeys的文章,看起来他们在过滤方面有限。例如:如果我需要按content_type过滤喜欢,我可以做到吗? – 2014-11-08 17:22:23
当然,因为content_type是Like模型本身的一个字段。您无法轻松完成的任务是在目标模型上进行过滤,例如书籍和作者,这很有意义,因为您无法预先知道相关对象是否具有该属性。 – 2014-11-08 17:26:03