私は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の最速の方法は何ですか?
次のように私の考えは次のとおりです。
はT1を参照T2から外部キー制約をドロップします。
T1から主キー制約を削除します。
- はT1にアイデンティティ整数ID列を追加し、それが主キー
T2に列を追加し、T1へのそれの外部キーを作成します。
私は次のことを恐れています:ステップ3で、既存のデータのためにスクリプトが失敗する可能性があります。そうであれば、一時テーブルを作成し、データをエクスポートし、両方のテーブルからすべてを削除し、スキーマを変更して再インポートする必要があります。私はこれらのテーブルに実際のデータを持っているので、私の質問です。
このプロセスでは、関数の依存関係とBCNFの関係を正規化します。それは "ID整数ID列"を追加する必要はありません - 正規化*決して*新しい属性を導入します。あなたが解決しようとしている*本当の*問題は何ですか? –
@ MikeSherrill'CatRecall '、すべてが遅くなるテキストの列を含む3次元の主キーがあったので、代わりに1d数値の主キーを作成しました。 –
{T1K1、T1K2、T1K3}に 'not null unique'制約がありますか? –