2011-10-18 11 views
0

従業員情報を含むテーブルの1つにプライマリキーを割り当てる際に問題があります。そのテーブルには一意の列はありません。残りの唯一のオプションは、3つの列を組み合わせてプライマリキーとして使用することです。プライマリキー制約の警告メッセージ

  1. しかし、私は、これはデータを挿入するため、将来的に大きな問題になることを知っているようになったWarning! The maximum key length is 900 bytes. The index 'pk_hrempid' has maximum length of 1530 bytes.For some combination of large values, the insert/update operation will failように、警告メッセージを表示します。この警告の解決方法はありますか?

  2. その他の質問は一意のIDとして自動インクリメントの値を入力できますか?他の部門の従業員情報を含むテーブルが多数あるため、今後問題が発生しないようにしたいと考えています。いくつかの従業員は2つ以上のテーブルに存在する可能性があります

何か助けていただきありがとうございます!

+0

このエラーを引き起こした列データ型の定義を知りたい場合は、 – Widor

+1

私たちが見ることができないSQL DDLコードをデバッグするのは難しい;)恥ずかしがり屋ではなく、属性名のデータ型とサンプルデータを投稿する。あなたは、業界標準のキーまたは他の識別子の信頼できるソースの方向を指すことができる、あなたのビジネスエリアのドメイン知識を持つ人物をここに見つけることができます。 – onedaywhen

+0

@ Widor .. Could ..すべての私のデータ型は、列のデータには長すぎるデフォルトのnvarchar(255)(アクセスからサイズアップしているので)を持っていました。プライマリキー列の型は、プライマリキーの警告はありません!他のすべての列(nvarcharと比較すると小さなデータも含む)のデータ型を変更する必要がありますか...それともそのまま置くことはできますか? – user939615

答えて

0

「自然なキー」を使用するベストプラクティスを試みている複合主キーの試行では音が聞こえますが、自動インクリメントの「ID」フィールドを使用しても何も「間違っていません」。

提案されたフィールドが大きすぎてキーとして使用できない場合、おそらく最初の場所では最適な選択肢ではありませんでした。おそらく、より良いデータ型を持つ別の「自然な」キー列を追加できますか?

頻繁にクエリを実行するテーブルに対して、適切なインデックスと適切なデータ型を選択することで、可能な最適化を考慮に入れてください。

+0

ベスト・プラクティスとしてのナチュラル・キー、そこにある論争の声明のビット... – OTTA

+0

私はあなたに、「サロゲート・キーを使用すると何も「間違っている」ことはありません。 :私は同意しません)しかし、ここでの問題は、DBMSが自然なキーを強制することはできません。 – onedaywhen

+0

@OTTA私は、「自然キーが実現可能であれば」または「自然キーが主キーとなることができれば」と認めるべきです。つまり、「自然」と「代理」の両方が小さく、数字で、索引付け可能な場合は、毎回「自然」のものを使用します。 – Widor

0
  1. これは主キーの制限です。 900バイトを超えるPKを持つことはできません。

  2. テーブルにID列を追加し、プライマリキーとして設定できます。私はGuidsをグローバルにユニークなものとして使用することを好みます。

+1

1.これは確かにSQL Serverの制限事項ですか?これは、既存の3つの列に重複を防ぐことはできません。 – onedaywhen

0

私は主キーの自動インクリメント型のソリューションで行くと思いますが、この種のもののために個人データを使用しての問題点は、主キーの基本的な要件である一意性を保証することはできませんということです。