2012-01-05 5 views
0

私はデータベースに2つの列を持っています。両方ともidsです。私は1つの数字を自動増分しています。これは、私が主キーとして選択したものです。しかし、他の列には独自の自動生成idsも含まれていなければなりません。主キーのID(すなわち、数値の自動インクリメント列)と異なるものでなければなりません。したがって、私はこの列にGUIDを使用することを考えていました。 BUT:列が主キーでない場合は、列にGUIDを使用できますか?

列が主キーでない場合、列にGUIDを使用できますか? いい練習ですか?

+0

2つの固有の自動生成されたIDは何に必要ですか? – ean5533

+1

はい - 確かに - どうしてですか? GUID列はプライマリキーでなければならないと思いますか? GUIDは文字列やINTのようなデータの単なるデータです - それを格納して検索し、変更してください...... –

+0

@ ean5533:おそらく、すべてのもっともらしいシステムにわたって一意の識別子が必要ですしたがってGUIDは、DB内のアイテムの数が4バイトの値がDB内で使用するのに十分小さいほど十分に小さいですか? –

答えて

2

これは可能であり、データサイズとパフォーマンス上のオーバーヘッド以外は問題ありません。

私の場合、テーブル内のデータを外部システムと同期させる必要がある場合は、通常の方法です。次にguidを使用して、同期のためのグローバルレコード識別子と、データベース内のリレーションの数値プライマリキー(guidのものよりも速いため)を維持します。

1

はい、できます。状況が良いかどうかは、状況によって異なりますが、一般的に問題はありません。さらに、参照整合性を強制するために、おそらくこの列に「一意のキー」を作成する必要があります(これにより、この列に関連する外部キーを作成することもできます)。

その列にクラスタード・インデックスを作成しないように注意してください。

2

明らかに、GUID列は一意になりますが、結合目的にはむしろ大きくなります。したがって、16バイトのGUID列ではなく、外部キー結合(4バイトまたは8バイトの整数量を結合する)のためにデータベース内の数値列を使用することが望ましい場合があります(文字列として格納しない限り、 32桁の16進数と4つのダッシュ)。数値列の場合、索引は小さくなります。参照テーブルは小さくなります。結合比較がより迅速になります。

したがって、GUIDをプライマリキーとしてではなく、テーブル上のセカンダリ(代替)ユニークキーとして使用するとよいでしょう。

+0

GUIDは16バイト(= 128ビット)です - 32ではなく、... - それ以外は - 私はあなたの声明に完全に同意します! –

+1

@ marc_s:情報を誤読しました(32桁の16文字= 16バイト)。私は修正します。ありがとう。 –

関連する問題