チーム環境でのデータベース オブジェクトのリファクタリング
Visual Studio Team System Database Edition では、オフライン形式のデータベース スキーマ (データベース プロジェクトと呼ばれる) をバージョン管理システムに置くことにより、変更を管理します。 チームのメンバはデータベース プロジェクトに変更を加えることができます。これらの変更は、後でビルドし、ライブ データベースに配置する必要があります。 このような場合は、1 つのデータベースについて最大で次の 4 つの形式が存在することになります。
ライブ データベースとデータが含まれるデータベース サーバー。
オフライン形式のデータベース スキーマであるデータベース プロジェクト。
データベース スキーマを任意のターゲット データベースおよびサーバーに配置するために必要な情報を含む、コンパイルされた .dbschema ファイル。 このファイルは、データベース プロジェクトをビルドするたびに作成されます。
チームの各メンバがデータベース プロジェクトに加えたすべての変更を追跡するバージョン管理リポジトリ。
詳細については、「チーム データベース開発の開始」を参照してください。
チーム環境でのリファクタリング
リファクタリングを使用してデータベース オブジェクトの名前を変更したり、別のスキーマに移動したり、名前を変更したオブジェクトまたは移動したオブジェクトを参照する他のオブジェクトが、新しい名前またはスキーマに合わせて自動的に更新されます。 たとえば、テーブルの列名を変更した場合、その列を参照するストアド プロシージャが、新しい名前に合わせて自動的に更新されます。詳細については、「データベース オブジェクトへのすべての参照の名前を変更する」または「別のスキーマにデータベース オブジェクトを移動する」を参照してください。
データベース オブジェクトを更新する前に、更新する必要のあるすべてのオブジェクトのファイルをソース管理からチェックアウトする必要があります。 ファイルを自動的にチェックアウトするようにソース管理のオプションが設定されている場合は、ファイルが自動的にチェックアウトされます。 自動的にチェックアウトする設定が有効でない場合は、ファイルのチェックアウトを求めるメッセージが表示されます。
リファクタリング操作は、次の状況では失敗します。
1 つ以上のファイルを他のユーザーがロックした場合、メッセージが表示され、リファクタリング操作はキャンセルされます。 ファイルのロックが解除されてから、操作をやり直してください。
チェックアウトしたファイルがプロジェクトのファイルより新しいバージョンである場合、メッセージが表示され、リファクタリング操作はキャンセルされます。 ファイルのバージョンを調整して、操作を再試行する必要があります。
ファイルをチェックアウトするよう求めるメッセージが表示されたときに [キャンセル] をクリックすると、リファクタリング操作はキャンセルされます。
メモ : データベース オブジェクトの名前を変更しても、そのオブジェクトが定義されている .sql ファイルの名前は変更しません。 このファイルの名前は、ソリューション エクスプローラで手動で変更できます。
リファクタリング ログおよび目的の保存
リファクタリングを使用して、データベース オブジェクトの名前を変更したり、移動したりすると、ProjectName.refactorlog ファイルは、その操作の詳細によって更新されます。 変更の配置時には、このログが変更の目的を保存するのに役立ちます。
複数の開発者がリファクタリング ログを更新する変更を行う場合、そのログ ファイルへの変更をマージする必要があります。 .refactoring ファイルは単純なスキーマを含む XML ファイルであるため、更新のマージは困難ではありません。 リファクタリング操作が正しい順序で適用されることを確認できるように、各操作には日付と時間が含まれています。
注意 : |
---|
リファクタリング ログ内の変更を自動的にマージすると、エラーが発生する可能性があります。 データベース プロジェクトの配置を試みる前に、変更の自動マージまたは手動によるマージの結果を必ず確認してください。 |
リファクタリング ログは、次のコード例のようになります。
<?xml version="1.0" encoding="utf-16"?>
<Operations>
<Operation Name="Move Schema" Key="677a0ee6-1707-413a-985f-b392b1a2d68b" ChangeDateTime="04/07/2008 21:59:00">
<Property Name="ElementName" Value="[Person].[AbsenceHistory]" />
<Property Name="ElementType" Value="ISql90Table" />
<Property Name="NewSchema" Value="HumanResources" />
<Property Name="IsNewSchemaExternal" Value="True" />
</Operation>
<Operation Name="Rename Refactor" Key="fb88992c-cd6e-43d0-aa54-ed80f155d202" ChangeDateTime="04/07/2008 21:59:26">
<Property Name="ElementName" Value="[HumanResources].[AbsenceHistory].[column_1]" />
<Property Name="ElementType" Value="ISqlSimpleColumn" />
<Property Name="ParentElementName" Value="[HumanResources].[AbsenceHistory]" />
<Property Name="ParentElementType" Value="ISql90Table" />
<Property Name="NewName" Value="EmployeeID" />
</Operation>
</Operations>
このログの例では、2 つのリファクタリング操作が記録されました。 最初の操作では、[AbsenceHistory] テーブルが、[Person] スキーマから [HumanResources] スキーマに移動されました。 2 番目の操作では、[AbsenceHistory] テーブルの [column_1] 列の名前が [EmployeeID] に変更されました。