这是一个数据库模型设计问题.假设我正在设计像Slack这样的应用程序. Slack有多个组织,每个组织内都有对象,只有该组织才能访问(例如,聊天记录,文件等).在Django中设置这些每个组织对象的最佳方法是什么?
一个简单的解决方案是将ForeignKey附加到这些对象中的每一个.像这样:
class Organization(models.Model): # ... class File(models.Model): organization = models.ForeignKey( 'Organization',on_delete=models.CASCADE,) # ... class ChatThread(models.Model): organization = models.ForeignKey( 'Organization',) # ...
但是如果我们这样做,我们需要在组织上放一个索引,因为有很多这样的每个组织对象,所以看起来有点浪费.
有没有更简洁的设计方法?
解决方法
我认为你的方法和它需要的一样好.在索引组织列方面,您可以使用db_index = False来禁用索引的创建.
如果要抽象组织字段并在所有组织对象上使用某些方法,则可以使用如下的抽象模型:
class Organization(models.Model): # ... class OrganizationModel(models.Model): organization = models.ForeignKey( 'Organization',db_index=False,) class Meta: abstract = True class File(OrganizationModel): # ... class ChatThread(OrganizationModel): # ...