Django 重要指标应该在单独的布尔域中跟踪,还是一个CharField就足够了?

Django 重要指标应该在单独的布尔域中跟踪,还是一个CharField就足够了?,django,django-models,Django,Django Models,我想跟踪应用程序中消息的统计信息。一个重要的指标是“初始消息”,因为这意味着新的对话开始了。将初始消息作为一个单独的布尔字段更好,还是将“初始消息”作为消息类别字段中的字符串进行跟踪就足够了 请说明您是推荐A型、B型还是其他方法,以及原因 我想使用这个模型来增强我在应用程序的用户仪表板中显示的图表 # Model A class Data(models.Model): product = models.ForeignKey(Product, on_delete=models.CASCAD

我想跟踪应用程序中消息的统计信息。一个重要的指标是“初始消息”,因为这意味着新的对话开始了。将初始消息作为一个单独的布尔字段更好,还是将“初始消息”作为消息类别字段中的字符串进行跟踪就足够了

请说明您是推荐A型、B型还是其他方法,以及原因

我想使用这个模型来增强我在应用程序的用户仪表板中显示的图表

# Model A
class Data(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    message = models.CharField(max_length=20)
    message_channel= models.CharField(max_length=20) #Facebook, Twitter, SMS
    message_category = models.CharField(max_length=20) #initial message, reply, feedback_reply
    initial_message = models.BooleanField()
    created_at = models.DateTimeField(auto_now_add=True)


就数据库规范化而言,如果要在表中存储有关消息的信息,正确的方法是在消息表和消息类别表之间有一个外键,那么就数据库规范化而言,只需在类别表(模型B)中创建一个带有“初始消息”的新行即可,如果要在表中存储有关消息的信息,正确的方法是在messages表和messages category表之间有一个外键,那么只需在category表(Model B)

Manuel中创建一个带有“Initial Message”的新行,但我只计划为Message category创建一个字段。那么,为消息类别创建一个全新的表有什么意义呢?它与您系统的可伸缩性有关,今天是一条消息,一年内可能会有10条,创建多个字段以达到相同的目标是没有意义的OK,仅仅使用message_category=models.CharField(max_length=20)#初始消息,回复、反馈和回复,只是将结果过滤到我的图表的“初始消息”字符串?没有任何危险,两种模型都可以工作,但B更好。一个原因是数据库中的过滤器可以很好地处理数字主键字段(通过添加fk关系),而不是varchar字段,也可以使用initial_message boolean=TrueManuel进行过滤,但我只计划为消息类别设置一个字段。那么,为消息类别创建一个全新的表有什么意义呢?它与您系统的可伸缩性有关,今天是一条消息,一年内可能会有10条,创建多个字段以达到相同的目标是没有意义的OK,仅仅使用message_category=models.CharField(max_length=20)#初始消息,回复、反馈和回复,只是将结果过滤到我的图表的“初始消息”字符串?没有任何危险,两种模型都可以工作,但B更好。一个原因是,数据库中的过滤器适用于数字主键字段(通过添加fk关系),而不适用于varchar字段,还可以使用初始消息布尔=True进行过滤
# Model B
class Data(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    message = models.CharField(max_length=20)
    message_channel= models.CharField(max_length=20) #Facebook, Twitter, SMS
    message_category = models.CharField(max_length=20) #initial message, reply, feedback reply
    created_at = models.DateTimeField(auto_now_add=True)