Alex が示すように、ロール ソリューションについては同意します。あなたが持っているのは、人々の異なるサブクラスではありません。あなたには、人が持つことができるさまざまな役割があります。
しかし、あなたが言うのを聞いたことがあります:「おい、忍者はプロパティ「numberOfStars」を持つことができ、歌手はプロパティ「highestNote」を持つことができる一方、シンガーは sing() と getWasted() を持つことができ、ベーシストは goFunky() と slapPop() を持つことができます。
ここにあるのは、データ モデルが非常に緩いスキーマを必要とする場合です。非常に緩いため、実際にはスキーマがまったくありません。歌手がベースを取り、曲を即興で演奏することに決めた場合、それは問題ありません。彼が忍者として行動したい場合、throwStar を呼び出すと、星がないためエラーが返されますが、原則として、歌手に星を割り当てて星を投げさせることができます。
あなたが冒険しているのは、スキーマではなく、オントロジーの世界です。「何か」であるリソースがあり、この何かは何らかのタイプであり、いくつかのプロパティを持つことができます。一部のプロパティの存在はタイプを推測でき、一部のタイプの存在は他のタイプを推測できます。単純な django データ モデルでは、この情報を簡単に記述することはできません。必要なのは、AllegroGraph などのコンテキスト認識型の推論グラフ ストアか、rdflib を使用してハッキングされたソリューションを実装することです。