2012-03-14 6 views
0

最後のモデルを削除した後、作成される次のモデルには削除されたモデルpkが割り当てられます。つまり、削除されたモデルへのリンクはすべて新しいモデルを指します。は絶対IDとして有効なpkですか? (Django)

私たちはPKを使うべきですかUUIDを作成する必要がありますか?たとえば、ユーザプロファイルである の場合、いくつかの上位レベルのプロファイルは、削除されると完全に新しいプロファイルを指し示すことになる。

  • このサイトは、スタックオーバーフローを私が書いていることは、最も単純な意味では
  • もここ
+0

そのことについてあなたは必ず「最後のモデルを削除した後、作成されます。次のモデルが削除されたモデルのPKが割り当てられますか」?あなたはそれをテストしましたか?もしそうなら、どのDBを使用していますか?少なくとも、Postgresはこの動作をしませんでした。削除されたものにかかわらず、IDは増分し続けます。他のDBバックエンドについてはわかりません。 – AdamKG

+0

私はこれを何度かテストしました。ローカルホストのDjango sqliteは、おそらく本番環境ではこの動作が必要なMySqlを使用しています。 –

答えて

1

を適用する場合、私は疑問、質問のためにPKを使用して、データベースがPKフィールドのカウンタを使用しています新しいレコードが追加されたときにインクリメントします。削除/更新操作ではカウンタは変更されません。したがって、dbが同じ値を2回使用することは不可能です。

EDIT:OOps、これはSqliteの機能のようです。詳細はこちら:何のROWIDが挿入時に指定されていない場合、または指定されたROWIDがNULLの 値を持っている場合は、適切なROWIDが自動的に作成され

http://sqlite.org/autoinc.html

は、ドキュメントを引用します。 通常、新しく作成された行には、挿入前の表の最大ROWIDよりも大きい のROWIDを与えます。

そして:

上述した通常ROWID選択アルゴリズムは、限り、あなたは 最大ROWID値を使用することはありませんし、あなたが とテーブルのエントリを削除したことがないよう 単調に増加するユニークなROWIDを生成します。最大のROWID。

+0

- 'django.db.backends.sqlite3'をデータベースとしてローカルでテストする場合、実際には新しいモデルに削除されたpkを使用します。または少なくともMySqlを使用している場合PKは予想通り増分され、常に一意です –

0

あなたは、実際には、same linkからあなたの主キーにAUTOINCREMENTを作成すると、この迷惑を停止することを学ぶことができます。

試してみてください。

CREATE TABLE "Pity" (
"ID" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL); 
関連する問題