2016-05-13 9 views
0

最大長20文字の英数字データがあります。このデータをタイプNVARCHAR(20)の列に格納します。NVARCHARまたはINT UNIQUE制約付きプライマリキー

これらのデータはCODESであり、一意でなければならないため、私はそれを主キー列にすることにしました。

しかし、another questionに質問すると、誰かがINT列を主キーとして使用するように「提案」しています。

あなたはどう思いますか? INTプライマリキーを使用し、UNIQUEという制約または現在のデザインの列を追加しますか?

NVARCHAR(20)カラムを検索して重複を避ける必要があるため、使用しない新しいカラムを追加すると思います。言い換えれば、私のwhere節の99%にはNVARCHARという列があります。

答えて

1

私は数値の合成主キーの強力なファンです。あなたが望むキーのようなものは、uniqueと宣言し、キーの属性にすることができます。

は、ここではいくつかの理由である:

  • 数字キーが4つのまたは8バイトを占有し、固定長です。これは、索引を作成するためにより効率的です。
  • 数値キーは文字列キーより短いことがよくあります。これにより、外部キー参照のためのスペースが節約されます。
  • 通常、合成キーは自動インクリメント列を使用して挿入されます。これで、挿入順序を知りましょう。注:一部のアプリケーションでは、順序を知ることは欠点かもしれませんが、それは珍しいことです。
  • 一意の文字列の値が変更された場合は、外部キー参照を持つすべてのテーブルではなく、1か所で値を変更するだけで済みます。また、外部キー参照を省略すると、データベースの整合性が危険にさらされます。
  • 行が複数のキーで識別される場合、1つの数値キーがより効率的です。
  • シンセシスキーは、セキュリティを維持するのに役立ちます。

これは単なるガイドラインです。あなたの疑問が、合成数字キーがいい考えです。別の問題があります。たとえば、スペース使用量が本当に大きな懸念事項である場合、たとえば、数値キーとユニークインデックスのための追加スペースが他の懸案事項を凌駕する可能性があります。

+0

INTプライマリキーを使用する予定がない場合、ここにどのような利点が追加されるのか分かりません。私のすべての操作は、その 'NVARCHAR(20)'カラムで動作します。 – VansFannel

+0

こんにちは、INT列にsring入力のハッシュ値を挿入することができます(oracleではORA_HASH関数を使用してテーブル値(ORA_HASH( 'somt string))に挿入することができます)。私はこのようなことをすることができます "myIntColumn = ORA_HASH( 'INPUT STRING) – elirevach

+0

@VansFannel。。。インデックスの参照と外部キー参照の両方に対して、より効率的な格納。 –

関連する問題