1

モデルとテーブルをさらに発展させる方法についてアドバイスをお願いします。

このモデルでは現在、m2m 関係で疾患と状態にリンクするオプションを保存できます。結果を保存したい場合、これをさらに構築するにはどうすればよいでしょうか。状態、疾患、およびオプションにリンクする関連する値です。

たとえば、結果には特定のオプションが関連付けられます。オプションは、特定の病気に関連する特定の状態になります。特定のオプションにリンクされたすべての結果には、それに割り当てられた値があります。

ユーザーが割り当てる結果値のために、中間テーブルが必要だと思います。オプションはm2mなので、結果をオプションにリンクする方法がわかりません。

class Option(models.Model):
    disease = models.ForeignKey(Disease)
    option = models.CharField(max_length=300)

class Outcome(models.Model):      
   disease = models.ForeignKey(Disease)
   outcome = models.CharField(max_length=200)

class DiseaseState(models.Model):
   state = models.CharField(max_length=300)
   disease = models.ForeignKey(Disease)
   option = models.ManyToManyField(Option, blank=True)
   #outcome = models.ManyToManyField(Outcome, blank=True) #will adding this solve my use case? It does not seem like outcome will link to option.

アップデート:

明確にするために: 病気には DiseaseState があります。DiseaseState には Option があります。オプションには結果があります。結果には値が割り当てられています。Option と Outcomes はどちらもリストであり、ユーザーはリストから選択できます。

4

2 に答える 2

1

あなたのクラス構造全体 (病気?、状態?) を見ることができないので、あまり具体的には言えませんが、DB 設計について少し話そうと思います。

私は人を乗せるテーブルを持っています。私は彼らの名前と、彼らが運転している車の種類を知りたいです:

tbl_person
id int(11)
name varchar(32)

これで、person テーブルに車の列を入れることができましたが、複数の車を運転する人もいます。そこで、車を並べたテーブルを作成し、各車と人物を関連付けます (関連付けます)。

tbl_car
id int(11)
car_name varchar(32)
person_id int(11)

そうすれば、car テーブルの各行に person.id が含まれます。これはForeign Key関係です。

ここでの問題は、車のテーブルにデータが重複する列がたくさんあることです。たとえば、そこにはたくさんのトヨタ車があるためです。

すべての自動車メーカーをテーブルに入れ、すべての人を別のテーブルに入れ、それらの間に結合テーブルを作成した方がよいでしょう。

だから私は今持っていますtbl_person_car

id int(11)
car_id int(11)
person_id int(11)

このテーブルの各行には、Foreign Keysまたはが 2 つしか含まれていないことに注意してくださいFKs。この結合テーブルには、結合を実行するために必要なものだけが含まれていることが非常に重要です。FKsそうしないと、データベース全体の参照整合性が損なわれます。

もちろん、モデルで ManyToMany フィールドを使用する場合は常に、Django がこの結合テーブルを作成します。そのため、心配する必要はありません (1 つの間違った動きがすべてを台無しにする可能性があるため、これは素晴らしいことです)。

初歩的すぎて申し訳ありませんが、結合テーブルにさらにデータが必要だと思われる場合は、おそらく設計に問題があることを説明していただければ幸いです。

モデルの動作に慣れ、DB についてはあまり心配しないことをお勧めします。Django を始めた頃は DB 側から考えすぎていて、ちょっと苦労しました。

だからあなたの場合、「病気には何があるか?」と自問してみてください。「病気には結果がある」と言うかもしれません。has a関係は、OO 設計において理解することが不可欠です。

たとえばオプションがあるのは何ですか? それは病気、患者、結果ですか?それが何であれ、それはおそらく結果が属するモデルです。

これは理にかなっていますか?お役に立てば幸いです。

于 2013-08-22T17:56:28.417 に答える