虽然普遍认为多表继承从长远来看不是一个好主意(雅可比,其他),但我想知道在某些用例中,django 在查询期间创建的“额外连接”是否值得。
我的问题是数据库中有一个单一的真相来源。比如说,对于使用身份号码和身份类型识别的人员对象。例如 ID 号 222,类型护照。
class Person(models.Model):
identity_number = models.CharField(max_length=20)
identity_type = models.IntegerField()
class Student(Person):
student_number = models.CharField(max_length=20)
class Employee(Person):
employee_number = models.CharField(max_length=20)
在抽象继承中,从 Person 抽象类继承的任何子类模型(例如 Student、Parent、Supervisor、Employee 等identity_number
)都将identity_type
存储在各自的表中
在多表继承中,由于它们都共享同一个表,我可以确定如果我在 Person 模型中的两个列上创建唯一约束,那么数据库中将不存在重复项。
在抽象继承中,为了避免数据库中的重复,必须在应用程序中构建额外的验证逻辑,因此也会稍微降低性能,这意味着它取消了 django 与具体继承有关的“额外连接”?