组合模型子类并使用未使用的字段或创建具体的子类是否更好?

时间:2016-10-23 06:02:57

标签: django inheritance django-models orm

我正在Django中编写一个应用程序,我有一个实例,我想创建一个带有单层继承到多个子类的模型。即:

车辆   - >汽车,自行车,公共汽车

我需要能够将项目作为Vehicle超类进行搜索和存储,但是在大多数情况下,需要向子类进行向下转换以使用其他字段。在Django中,这将导致数据库检索子模型或大量连接和查询的大量命中。

我应该使用具体的子类并获得性能影响,还是应该将额外的字段添加到一个车辆模型中,然后在各种对象中使用未使用的字段?

我应该注意,附加字段通常是1-3个小字段,即Char字符串,总共4个子类(每个模型最多9个未使用的字段)

1 个答案:

答案 0 :(得分:1)

这个问题的基本答案是 - 无论你在SQL数据库方案中避免'JOIN',你应该避免它。

原因在于,JOIN命令的复杂性最高且占用时间最多。所以一般来说,建议如下:

  1. 如果关系是OneToOne,并且知道,这种关系永远不会成为OTM(OneToMany),那么将所有关系放在同一个表中。
  2. 如果关系是OTO但包含高风险内容(如密码哈希等),出于安全原因,应避免将其放在同一张桌子上。
  3. 如果关系是OTM或MTM,除了拆分之外,你别无其他选择。