0

現在、フィールドを持つテーブルがありIDENTITYます。フィールドはINT型として宣言されます。問題は、いくつかの新しい一意の値があることですが、そうではありませんINT。それらは英数字なので、INTフィールドに入れることはできません。別の列を作成し、これらを新しいNON-IDENTITY列に貼り付ける唯一のオプションですか、それとも別の方法がありますか? 上記の例は 2 つの異なる ID 形式の例ですが、さらに多くの ID 形式を取得し始めるとどうなりますか? フォーマットされたアルファ(数値)のすべてのタイプに対して列を作成する必要はありません。

4

2 に答える 2

0

テーブルに一意である必要がある複数の列があることは珍しくありません。本当の問題は、ここでどのレベルの正規化を目指しているのか、そしてその列を追加することで、関係の正常化の目標レベルをサポートしたり、それを破ったり、許容できると思われるものを追加したりすることだと思いますか?

たとえば、第3法線および/または有名な「キー以外のすべての属性は、キー、キー全体、およびキー以外の何もないことについての事実を明らかにします.... Coddを助けてください」.

追加する新しい一意の値は、キーによって識別される行に関する事実を追加しますか?

さらに、通常、主キーはクラスター化インデックスですが、そうである必要はありません。同じテーブルに他の一意のインデックスを設定することもできます。これは、「達成しようとしていること」のコンテキスト内で「OK」と見なされ、最適化されます。

于 2012-10-08T21:06:59.400 に答える
0

別の方法は次のとおりです。

  1. 古いテーブルとまったく同じスキームで一時テーブルを作成します
  2. テーブルの値を新しい一時テーブルにコピーします
  3. 古いテーブルをドロップ
  4. 古いテーブルのスキームに基づいて新しいテーブルを作成しますが、テキスト ID を使用します
  5. テキスト ID を使用して、一時テーブルから新しく作成されたテーブルにデータをコピーします。
  6. 一時テーブルを削除します

もちろん、その過程でこのテーブルに関する潜在的なアクションに注意を払う必要があります。

于 2012-10-08T21:14:56.697 に答える