データベースの主キーとしての GUID の使用を調査してきました。これまでのところ、長所が短所を上回っているようです。ただし、GUID が必要なものではない可能性がある点が 1 つあります。
私のアプリケーションでは、ユーザーはわかりやすい ID に基づいてオブジェクトを識別できる必要があります。したがって、たとえば、フルネームを入力せずに特定の製品を入手したい場合は、製品の ID を使用できます。そのような場合、GUID を覚えるのは簡単ではありません。
私が考えてきた解決策は、GUID と自動インクリメント整数の両方を使用することです。GUID は行の主キーになり、自動インクリメント整数はアプリケーションのフィルタリング関数で使用されるインデックスになります。ただし、すべての SQL SELECT、UPDATE、DELETE ステートメントは GUID を使用します。
GUID を使用する主な理由は、2 つのデータベースをマージする際の衝突を防ぐためです。データベース #1 とデータベース #2 の両方に製品 #2 がある場合、インポーター スクリプトは ID とそれを参照するすべての外部キーを変更する必要があります。GUID を使用すると、テーブル自体のわかりやすい ID を変更するだけで済みますが、外部キーはインポートされた各レコードに固有の GUID を使用するため、変更しなくても機能します。
それで、私の質問は次のとおりです。自動インクリメント整数インデックスと GUID プライマリ キーを持つことで、(GUID フィールドのサイズと簡単なページの断片化以外に) 大きな問題はありますか?