データベースIDを生成する最適な戦略は何ですか?データベースジェネレータを使用していますか?カスタムジェネレータを使用していますか?それぞれのメリットとデメリットは何ですか?アプリケーションIDジェネレータとデータベースIDジェネレータの使用
答えて
DBジェネレータ:
- 簡単に確認してください、それは
- は余分なラウンドトリップが必要ユニークだ作るために
- 多くの場合、非常に簡単(シーケンス)
- (あなたが戻って生成されたIDを読み取る必要があります)トランザクションはロールバックされ、ギャップはシーケンス内に表示されます(これを指摘するためにKristenがあります)。
のApp IDジェネレータ
- あなたが使用しない限り、あなたが(ハード
- を一意にするために(あなたがしたい場合たとえば、あなたはIDでオブジェクト型をエンコードすることができます)必要な限り複雑になることがありますUUID)
- あなたもDB
に話をせずにIDを割り当てることができるのUUIDはかなり高価であるため、[EDIT](多くのDBでいないネイティブサポート、インデックスfragmentaなど)、ほとんどのアプリはDBベースのジェネレータを使用しています。
覚えておくべきもう1つのことは、データベースへのすべての挿入がアプリケーションから行われるわけではないことです。アプリケーション駆動型のGUIDを使用するには、新規顧客を獲得したときに傷ついてしまい、最後のベンダーから10万レコードを移行する必要があります。
私はあなたの答えからのポイントを取得しない申し訳ありません。誰もそれをクリアすることはできますか? – bastianneu
データベース以外の場所でIDを生成すると、データを危険にさらしていることになります。 – HLGEM
+1、あなたの設定や対話するシステムの種類によっては、データベース内のすべてのレコードがアプリケーション内から生成されることを保証できないことがあります。将来のある時点で、ワンタイム移行(HLGEMが示すように)またはバッチロードプロセスの一環として、外部ソースからのデータを組み込む必要があります。どちらの場合でも、あなたのIDがアプリケーション内から来た場合、それらのレコードをロードする方がはるかに難しいでしょう。 Webサービスや他の種類のAPIを使用することもできますが、パフォーマンスに影響します。 –
私は最も重要なことは、あなたのビジネスで識別子として有用に使用できるものを選ぶことだと思います。たとえば、DMVはお客様のライセンス番号をカードに記載し、ウォレットを忘れて番号を覚えている場合は、その番号を使用して身元を確認することができます(例:警官が引き取った場合)。あなたはカードにUUIDを入れません。
あなたのビジネスの識別子を隠すことは、混乱を招く可能性が高いため、顧客、クライアント、ビジネスパートナーには気にしないことを選んでください。私は誰もがそれを覚えることができるはずではないが、領収書(例えば)を見ているなら少なくとも電話で誰かにそれを読むことができるべきであると言っている。
パフォーマンスには例外がありますが、注意して使用する必要がありますが、目に見える識別子は付いていません。
を参照してください。blog post
+1すばらしい読み込み。リンクありがとうございました – bastianneu
ビジネスキーと技術キーを混在させないでください。識別子は、オブジェクトを一意に識別するための技術キー(例えば、外部キー)です。彼らはインデックスでうまくいく、彼らは小さく、一貫して、または他の方法で一貫しています。ライセンスキーのようなビジネスキーは外部に表示するものですが、信頼できない(何らかの方法で変更でき、ルールではなく現実に従う)ため、プライマリキーとしてそのキーに依存してはいけません。名前を考える:結婚するとあなたの名前が変わることがあります。または、データベースに同じ生年月日の2つの「John Smith」を置くこともできます。 –
@Aaron: "ビジネスキーと技術キーを混在させないでください。"私はそれらを混同しなかった、私は具体的に違いを対処した。 @アーロン: "同じ誕生日の2人のジョン・スミスを持つ"それは技術的な理由ではなく、新しい識別子を発明するビジネス上の理由です。 –
- 1. SybaseとのHibernateのIDジェネレータ
- 2. アンドロイド:ユニークなIDジェネレータとロケール
- 3. スプリングデータCrudRepositoryカスタムIDジェネレータ
- 4. idジェネレータのanglejsの実装
- 5. BSON IDジェネレータのC#implementaion?
- 6. 構成IDシーケンスhibernateジェネレータ
- 7. Excel VBA固有IDジェネレータ
- 8. MongoDb IDジェネレータが動作しません
- 9. Rails 3.2データベースなしのジェネレータ
- 10. nhibernate hilo IDジェネレータは奇妙なID番号を生成します
- 11. Springのコンテキストでカスタムhibernate idジェネレータを設定する
- 12. ジェネレータを使用してジェネレータをソートしますか?
- 13. .NET用HTMLジェネレータ?
- 14. ジェネレータ `
- 15. Pythonジェネレータとreduce
- 16. Keras model.fit_generator用のジェネレータを使用
- 17. コルーチンとコンティニュエーションとジェネレータ
- 18. アンドロイド用勾配ジェネレータ
- 19. Ruby用Datamatrixバーコードリーダ/ジェネレータ?
- 20. Rails 4:ジェネレータからのデータベースへのアクセス
- 21. NHibernate HiLo IDジェネレータが挿入されたデータベースごとの往復を実行しています
- 22. 変換リスト(ジェネレータa)をジェネレータ(リストa)
- 23. ジェネレータ10011
- 24. "タグクラウド"ジェネレータ?
- 25. HTMLジェネレータ?
- 26. 損失関数のジェネレータを使用
- 27. データベースのIDフィールドを使用
- 28. Scala.jsのJavascriptジェネレータ
- 29. Javascriptジェネレータのキャッチエラー
- 30. textviewsの行ジェネレータ
ありがとうございます。 IDジェネレータを配置するためのベストプラクティスはありますか? DB Generatorは私にとっては簡単に聞こえます。 – bastianneu
私の編集を参照してください。クラスタリングソフトウェアを作成しない限り、ジェネレータは通常DBにあります。 –
私はこの答えが一番好きです。あなたが考慮しなければならない重要な点を持つ簡単なリストを作成します。ありがとうございました! – bastianneu