2011-10-20 6 views
1

私は次のようになり、既存のテーブルの構造を有する:既存のDBの共有プライマリキーに変更しますか?

AnimalTable 
------------- 
|Id   | 
|Color  | 
|Weight  | 
|AnimalType | 
------------- 

CatTable 
---------------- 
|Id   | 
|MeowSound  | 
|AnimalTableId | 
---------------- 

DogTable 
---------------- 
|Id   | 
|BarkSound  | 
|AnimalTableId | 
---------------- 

AnimalTypeは「猫」や「犬」のいずれかです。基本的には、それは「Table Per Type」構造体と、AnimalTableの追加の「AnimalType」識別器です。これは明らかに工夫された例ですが、私のプロジェクトはかなりの時間使用されている同様の設定を持っています。私たちはいくつかのものをEFコードファーストのアプローチを使用するように変換し始めています。この同じスキーマを使用したいので、抽象的なAnimalクラスと具体的なCatクラスとクラスがあります。

これを最初から設定するのはかなり簡単なようですが、EFを使用しているかのように既存のテーブルの主キーを変更するのが最善の方法はわかりません。誰もがこれを行い、いくつかのヒント/方向を提供することができますか?前もって感謝します。

答えて

0

私は、基本的にCatTableDogTableId列を落としたストアドプロシージャを書いてしまったIdAnimalTableIdと改名し、プライマリキーと判断。簡単に聞こえますが、難しい部分はすでにCatTable.IdDogTable.Idに指摘されているすべての外部キーを一般的に修正するものを書いていました。

0

アップグレードスクリプト。

今後、スキーマの他の変更によって、同じ決定に直面するでしょう。あなたの開発では、クラスをリファクタリングし、EFがあなたのためにデータベースを生成できるようにします。プロダクションに移行する場合は、プロダクションをアップグレードするスクリプトも作成する必要があります。主キーを変更するには

は使用:

EXEC sp_rename 'CatTable.Id', 'AnimalTableId', 'COLUMN'; 
関連する問題