Python 每个表的Django型号与每个选择的型号

Python 每个表的Django型号与每个选择的型号,python,django,django-models,Python,Django,Django Models,我与Django合作了一段时间,现在我的树和整个数据库都充满了数据注:现有的数据库,我想知道在这一点上,每个表一个模型是否真的比每个选择一个模型更好 我有一张桌子——objtree。这是我存储所有节点品牌、类别、标签等的地方。你可以想象,在我的政府中,它被大量使用。今天我不得不为另一个表添加另一个外键,但我已经在那里添加了两个外键。问题是,我几乎在所有情况下都使用这个模型,但是外键很少使用,更不用说这次使用的第三个外键了。由于这些表中的每一个表都有20k+的最小行,而且外键很少使用,我想知道在每

我与Django合作了一段时间,现在我的树和整个数据库都充满了数据注:现有的数据库,我想知道在这一点上,每个表一个模型是否真的比每个选择一个模型更好

我有一张桌子——objtree。这是我存储所有节点品牌、类别、标签等的地方。你可以想象,在我的政府中,它被大量使用。今天我不得不为另一个表添加另一个外键,但我已经在那里添加了两个外键。问题是,我几乎在所有情况下都使用这个模型,但是外键很少使用,更不用说这次使用的第三个外键了。由于这些表中的每一个表都有20k+的最小行,而且外键很少使用,我想知道在每个select-speed-wise中使用一个模型类是否更好

这种方法会影响速度吗?到目前为止,它对我每个表的模型都很好,但是对于如此大的数据库来说,这不是一种过度的杀伤力吗

如有任何意见,我们将不胜感激

问候

编辑:

这是模型。这3个外键很少需要,但现在,它们仍然被选中,即使我不需要它们,也许有一种简单的方法可以指定我在执行操作时不想使用的外键,例如Model.objects.all

所以问题是如果有3个模型会更好,我会分别使用外键。这会影响速度吗?还是坏方法?也许我做错了什么,我不知道

class Objtree(models.Model):
  node_id = models.AutoField(
    primary_key = True
  )
  type_id = models.IntegerField()
  parent_id = models.IntegerField()
  sort_order = models.IntegerField(
    null = True, 
    blank = True
  )
  name = models.CharField(
    unique = True, 
    max_length = 255, 
    blank = True
  )
  lft = models.IntegerField()
  rgt = models.IntegerField()
  depth = models.IntegerField()
  added_on = models.DateTimeField()
  updated_on = models.DateTimeField()
  status = models.IntegerField()
  point_to = models.IntegerField(
    null = True, 
    blank = True
  )
  node = models.ForeignKey(
    'Objtree_labels', 
    verbose_name = 'Objtree_labels', 
    to_field = 'node_id'
  )
  specs = models.ForeignKey(
    'OptionSpecs', 
    verbose_name = 'OptionSpecs', 
    db_column = 'node_id', 
    null = True, 
    blank = True
  )
  ct = models.ForeignKey(
    'CategoryTemplate',
    verbose_name = 'CategoryTemplate',
    db_column = 'node_id',
    to_field = 'group_id',
    null = True,
    blank = True
  )
我想知道在这一点上,每个表一个模型是否真的比每个选择一个模型更好

每个选择的型号是什么?听起来你的模型错了

问题是,我几乎在所有情况下都使用这个模型,但是外键很少使用,更不用说这次使用的第三个外键了

你在干什么?这听起来好像您没有正确地完成工作中的数据库建模部分。从这个简短的描述听起来,你好像在随意地向模型扔属性

没有任何合理的替代方案可以替代每个表的模型。你应该问的问题是我在做什么?这个真实世界的物体是什么?对这件事的关系数据库描述是什么

如果最好有3个模型,我会分别使用外键吗

三个模型表示树结构的三个副本,每个副本只有一个外键

然而,基本问题仍然存在

这是什么?这三件事是分开的吗?这三个方面是一件事吗?这些不是技术问题,而是现实问题。不要为表现而烦恼。以极大的逼真度为现实建模而烦恼

“对象树标签”、“选项规范”、“类别模板”-这些是什么真实世界的对象?标签-现实世界中通常不存在。选项规格可能是有形的。类别模板听起来不像是真的

这会影响速度吗

从来没有。一个表有很多外键,三个表各有一个外键,在速度上几乎无法区分。当然,除非您经常需要在单独的表之间匹配值,否则单独的表之间的连接将产生一些成本

但是如果这三个值是真正独立的——三个独立的东西——它们必须在单独的表格中,以反映它们是不同种类的东西这一事实