2017-10-30 11 views
0

T-SQLでは、正規化されていない大きなテーブルがあります。このようなデータを持つテーブルを正規化し、nvarchar列を外部キー参照に変換するためのベストプラクティス

tbl_Item: 
ItemID 
ItemName 
ItemGroup 
Price 

:それは以下の構造を有する想像し、二つに

1 - ItemA - GroupA - $9.99 
2 - ItemB - GroupA - $9.99 
3 - ItemC - GroupA - $9.99 
4 - ItemX - GroupB - $4.00 
5 - ItemY - GroupB - $4.00 

私はそれを正常化したいが全く新しいテーブル:

tbl_Item: 
ItemID 
ItemName 
FK_Group 

と:

tbl_Group: 
GroupID 
GroupName 
Price 

問題は、最初のテーブルからItemGroupデータを取り出し、それを新しいテーブルの対応するGroupIDに置き換えることです。

SELECT DISTINCT ItemGroup FROM tbl_Item 

...を実行し、すべての値をtbl_Groupに挿入して、ID番号を指定して、tbl_Groupテーブルに値を設定します。

私が見ることができる唯一の方法は、tbl_Itemをループし、新しいtbl_Groupテーブルに対してItemGroup列を照会し、そのIDを新しい項目テーブルのFK_Group列に挿入するスクリプトを書くことです。

これを行うより良い方法はありますか?

+0

:としてテーブルを作成し、また

select identity() as GroupId, GroupName, Price into tbl_groups from tbl_item group by GroupName, Price; 

それ。 – philipxy

答えて

1

あなたのようにテーブルを作成することができます。この変換はバックに参加することの予測でテーブルを置き換える「正規化」、ではありません

create table tbl_groups (
    GroupId int identity() primary key, 
    GroupName varchar(255), 
    Price number(10, 2) 
); 

insert into tbl_groups(GroupName, Price) 
    select distinct GroupName, Price 
    from tbl_Items; 
関連する問題