【发布时间】:2017-04-09 11:00:31
【问题描述】:
虽然人们普遍认为多表继承从长远来看不是一个好主意(Jacobian、Others),但我想知道在某些用例中是否由 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 与具体继承相关的“额外连接” ?
【问题讨论】:
标签: django inheritance django-models multiple-inheritance django-inheritance