我正在扩展一个现有的Django论坛应用程序(DjangoBB),以允许用户选择加入/退出特定论坛和/或特定主题的通知。我的网站上已经有了一个现有的通知基础架构,还有一个现有的全局设置可以开启/关闭论坛通知。Django论坛数据库设计
我想要做的是允许每个用户订阅/取消订阅特定论坛或主题,有效覆盖其全局设置。例如,如果我的全局设置是“通知关闭”,那么我将不会收到任何通知,除非我设置特定论坛为“通知开启”,在这种情况下,我会收到该论坛中所有内容的通知,除非我设置了该论坛中的一个线索“通知关闭”。如果任何线程或主题没有设置设置,则默认链接。
我的问题是什么是在Django的数据库中表示所有这些的最佳方式?我有两个想法:
class ForumNotificationSetting(models.Model):
user = models.ForeignKey(User)
forum = models.ForeignKey(Forum)
setting = models.NullBooleanField(default=None)
我也有一个类似的模型为TopicNotificationSetting。这样,每当用户更改其论坛设置时,我都会创建(或修改)NotificationSetting对象以反映其新设置。这种方法看起来很简单,但缺点是如果许多人为很多论坛创建设置,那么每当创建新的论坛帖子时,为每个人创建通知将是O(n^2)。 (我认为...?)
我能想到的第二种方法是在每个用户的配置文件中为其所设置的所有论坛创建一个ManyToMany字段。这种方式似乎更加复杂(因为我必须为'论坛','关闭论坛','主题'和'主题关闭'共有4个M2M字段),而且我不确定是否会有任何性能优势与否。
你会如何解决这个问题?
你现在有什么是一个M2M领域,只是一个与一个额外的领域。当您创建常规M2M时,会自动为关系创建这样的表格。 – agf 2012-04-09 21:41:57