マルチテーブルの継承は長期的には非常に良いアイデアではありませんが(Jacobian、)、ユースケースによっては、クエリ中にdjangoによって作成された「余分な結合」が価値がある。DjangoのMutiTable Vs.抽象継承
私の問題は、データベースに単一の真実の源を持っています。 Identity NumberとIdentity Typeを使用して識別されたPersonオブジェクトについて、言います。例えば。 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)
抽象的な継承では、任意のサブクラスモデル、例えば、人抽象クラスから継承する学生、親、スーパーバイザー、従業員などは、それら全てが同じテーブルを共有しているので、私は私が作成した場合ことを確認することができ、マルチテーブル継承では、それぞれのテーブルに格納されidentity_number
& identity_type
を持っていますPersonモデルの両方の列に一意の制約がある場合、はと重複しません。
抽象継承では、データベースに重複を残さないために、アプリケーションに余分な検証ロジックを組み込む必要があります。したがって、パフォーマンスがやや低下します。これは、djangoがコンクリート継承?
私はOOがリレーショナルデータベースにあまり適していないということを示すポインタが好きです。次に、データに焦点を当てて、それがどのように関連しているかを思い出させます。現在のプロジェクトでは、オプション1を使用します。 – lukik