2016-11-23 17 views
-1

私はリレーションでテーブルを作成する必要があります。どちらが良いですか? city.state.idまたはcity.state_id

  • ID

  • ID
  • 状態

どちらが優れていますか?

city.state.idまたはcity.state_id

+0

ベンチマークを試しましたか?前に状態にアクセスしましたか? – Sayse

+0

@Sayseいいえ。私はどのようにベンチマークを作ることができるのか分からない!状態にアクセスしていません! – Chalist

答えて

3

city.state_idとにかく優れているを使用していない前提としています。 city.stateはデータベースから別のフェッチを行います。select_relatedを使用するとこれを避けることができます。 forifgnキーだけが必要な場合は、select_relatedここをクリックしてください。city.state_idcityオブジェクトを与えるクエリではforiegnキーIDが取得されます。

1

city.state_idcity.state.idよりも優れています。なぜなら、2つではなくクエリだけを作成するからです。

ところで、Django Debug Toolbarを使用すると、クエリをデバッグできます。あなたが見る

1

<field>_idフィールドは、データベースのカラム名舞台裏

docs

で、Djangoはそのデータベースのカラム名を作成するには、フィールド名に「_id」を追加します。上記の例では、車のモデルのためのデータベーステーブルがMANUFACTURER_ID列

を持っていますので、これはそれが(詳細はSelect a single field from a foreign keyを参照してください)外部キーのインスタンスを取得するために別のクエリを作成する必要がないことを意味します。

しかし、これはあなたがselect_relatedまたはprefetch_related

+0

この場合、 'select_related'の違いは何ですか? – Chalist

+0

["....は、後で外部キー関係を使用する場合、データベースクエリを必要としません。"](https://docs.djangoproject.com/ja/1.10/ref/models/querysets/#select-related) – Sayse

関連する問題