1

私はdjangoを使用しており、Customer、Location、Departmentの3つのオブジェクトがあります。それぞれに関連する設定オブジェクトがあります。

オプション/nullの外部キーを持つ単一のテーブルを作成する方が良いですか?

または、3 つのエンティティのそれぞれに異なる設定オブジェクト/テーブルを作成するには?

4

1 に答える 1

1

いくつかのオプションがあります

  1. 別の設定テーブルを作成し、すべてのオブジェクトから設定テーブルへの null 許容の ForeignKey を用意します。このオプションを選択した場合は、Settings テーブルへの ForeignKey を持つ抽象基本クラスを作成し、その抽象基本クラスから継承する必要があります。そうすれば、新しいモデルを作成するたびに ForeignKey を追加する必要がなくなります。

  2. 別の設定テーブルを作成し、設定テーブルのGenericForeignKeysを使用してオブジェクト (Customer、Location、および Department) を参照します。これには、設定が必要なすべてのテーブルに余分な列がないという利点があります。ただし、Django ORM の通常の API を介して GenericForeignKeys で DB 結合を行うことはできません。生のSQLを使用する必要があります。また、select_related は GenericForeignKeys では機能しないため、代わりに prefetch_related を使用する必要があります。

  3. 設定をデータベースの列に保存します。何らかの形式 (JSON が好き) でデータを操作し、それを文字列にシリアル化して DB に格納する必要があります。次に、設定を読み取るために、文字列を逆シリアル化して JSON に戻し、それを操作できます。この方法では、設定を取得するために別のテーブルに参加する必要はなく、新しい設定を追加するたびに移行を実行する必要もありません。また、別の設定テーブルも必要ありません。ただし、特定の設定でオブジェクトを検索するためのクエリを作成するのは面倒で、おそらくクエリも遅くなります。

各オプションには長所と短所があります。だから、あなたの毒を選んでください;)

于 2013-07-28T06:43:30.120 に答える