2016-10-27 2 views
1

私はT1、T2、T3の3つのテーブルを持っています。 T1は(T1K1、T1K2、T1K3)の3次元主キーを有する。 T3は(T3K1)の1次元主キーを有する。 T1とT3の間にはT2で表されるn:mの関係がある。 T2は(T2K1)の1次元主キーを有する。 T2は、(T2T1K1、T2T1K2、T2T1K3)を介してT1(T1K1、T1K2、T1K3)を参照し、T2(T2T3K1)を介してT3(T3K1)を参照する。 T1をBCNFに変更したいので、単一列の主キーを追加して(T1K1、T1K2、T1K3)を主キーに変更したいと思います。 T2にはT1へのプライマリキーがあるので、最初にそこから外部キー制約を削除する必要があります。 T1、T2、T3にはすでにレコードがあります。テーブルを3NFからBCNFに変更する手順と、SSMSを使用してその依存関係を変更する手順は何ですか?

私の質問は:私が望むものを達成するためのSSMSの最速の方法は何ですか?

次のように私の考えは次のとおりです。

  1. はT1を参照T2から外部キー制約をドロップします。

  2. T1から主キー制約を削除します。

  3. はT1にアイデンティティ整数ID列を追加し、それが主キー

  4. T2に列を追加し、T1へのそれの外部キーを作成します。

私は次のことを恐れています:ステップ3で、既存のデータのためにスクリプトが失敗する可能性があります。そうであれば、一時テーブルを作成し、データをエクスポートし、両方のテーブルからすべてを削除し、スキーマを変更して再インポートする必要があります。私はこれらのテーブルに実際のデータを持っているので、私の質問です。

+0

このプロセスでは、関数の依存関係とBCNFの関係を正規化します。それは "ID整数ID列"を追加する必要はありません - 正規化*決して*新しい属性を導入します。あなたが解決しようとしている*本当の*問題は何ですか? –

+0

@ MikeSherrill'CatRecall '、すべてが遅くなるテキストの列を含む3次元の主キーがあったので、代わりに1d数値の主キーを作成しました。 –

+0

{T1K1、T1K2、T1K3}に 'not null unique'制約がありますか? –

答えて

0

正しい答えは、次のように見える:

  • columnを追加primary keyとアイデンティティ
  • としてT1にcolumnを追加T1
  • から
  • primary keyを削除T2
  • からforeign keyを削除します以前のステップで説明した新しいcolumnと同じタイプのT2に変更します。
  • 新しいcolumnをT2 foreign keyにしてインデックスにする
関連する問題