もともと投稿されて以来、私はこの質問に対する答えをどのように構成するかをいじっていました。VS2010の場合はツールの機能と利点を説明するものではないため、これは困難です。これは、読者にデータベース開発へのアプローチを根本的に変えるよう説得することです。簡単ではありません。
DBA、開発者/ dba、およびOLTPとデータウェアハウジングの両方にまたがるバックグラウンドミックスで、ベテランデータベースプロフェッショナルからのこの質問に対する回答があります。データベース開発のすべての面で一度にこれにアプローチすることは現実的ではないため、特定のシナリオについてケースを作成してみます。
プロジェクトがこれらの基準に適合する場合、VS2010には説得力のあるケースがあると思います。
- チームはアプリケーション開発にVS2010を使用しています。
- あなたのチームはソース管理とビルド管理にTFSを使用しています。
- データベースはSQL Serverです。
- あなたのチームは、VS自動テストをすでに持っているか、または興味を持っています。
あなたはデータベース開発のためのVS2010を評価している場合は、あなたのバイブルになりますVisual Studioのデータベース・ガイドからのVisual Studio ALMレンジャーズ。参照のない引用は、このドキュメントからのものです。
じゃあ行って...
データベース開発プロセスがアプリケーション開発と異なるのはなぜですか?
データ。その厄介なデータがなければ、データベースの開発は楽勝になります。すべてのリリースですべてを削除し、この面倒な変更管理を忘れることができました。
データベースのテーブルやその他のデータスキーマの形状に影響を与えるアプリケーション開発作業によって変更が導入されると、データはしばしば移行、変換、または再読み込みされるため、データの存在はデータベース変更プロセスを複雑にします。この変更プロセス全体を通じて、生産品質データと運用状態は、組織に対する整合性、価値、および有用性を危険にさらす可能性のある変更から保護する必要があります。
SSMSの何が問題になっていますか?
理由により、SQL Server Management Studioと呼ばれます。スタンドアロンツールとして、受け入れられているベストプラクティスに従う場合、開発作業を管理することは実用的ではありません。
スクリプトのみで、確立されたソース管理プラクティスを開発に有意義に適用するには、オブジェクト定義(CREATE TABLEスクリプトなど)と変更スクリプト(ALTER TABLEなど)の両方を維持し、それらが同期を維持するように努力する必要があります。
テーブルを変更するための一連のバージョンは、かなり迅速に作成されます。非常に単純な例:
-- Version 1
CREATE TABLE dbo.Widget (WidgetId INT, Name VARCHAR(20))
-- Version 2
CREATE TABLE dbo.Widget (WidgetId INT, Name VARCHAR(20), Description VARCHAR(50))
-- Version 3
CREATE TABLE dbo.Widget (WidgetId INT, Name VARCHAR(20), Description VARCHAR(100))
バージョン3までに、データベース変更スクリプトには以下が含まれます。
ALTER TABLE dbo.Widget ADD Description VARCHAR(50)
ALTER TABLE dbo.Widget ALTER COLUMN Description VARCHAR(100)
このデータベースのライブバージョンがバージョン1で、次のリリースがバージョン3である場合、必要なのは以下のスクリプトだけですが、代わりに両方のALTERステートメントが実行されます。
ALTER TABLE dbo.Widget ADD Description VARCHAR(100)
5年間の4週間のスプリントでは、いくつかの面白いバージョンのスクリプトが追加され、展開時間への影響を最小限に抑えるために追加の人手が必要になります。
SSMSに問題はありますか?いいえ、SQL Serverの管理と管理に適しています。それがするふりをしてさえいないのは、データベース管理者が変更を管理する(時には)非常に複雑なタスクを支援することです。
データベースのすべてのバージョンをソースからビルドして、将来のバージョンにアップグレードできない場合、ソース管理が破損します。そう思わない場合は、エリックシンクにお問い合わせください。
SSMS + <-スキーマ比較ツールの挿入->はどうですか?
これは間違いなく正しい方向への一歩であり、スクリプトを維持するために必要な手作業の多くを取り除きます。しかし(そしてそれは大きなですが)、通常は手動の手順が必要です。
一般的なスキーマ比較ツールは、完全に自動化してビルドプロセスに統合できます。ただし、私の経験では、より一般的な方法は、比較を手動で実行し、結果のスクリプトを目で確認してソース管理にチェックインし、手動で実行して展開することです。良くない。
フォールチブルな人間がビルドまたは展開のプロセスに関与しなければならないときはいつでも、リスクをもたらし、プロセスを繰り返し不可能にします。
あなたとあなたのチームが、完全に自動化されたスキーマの比較と展開を行っている数少ない人たちの中にいるなら、あなたに気を配ってください!皆さんは、VS2010が次のようなメリットを提供することに最も敏感です。
- 手動の手順は危険であることを既に受け入れています。
- 自動化の価値がわかります。
- あなたはそれを機能させるのに必要な時間を喜んで投資します。
単一のステップでビルドを作成できない場合、または単一のステップで展開できない場合、開発および展開プロセスは中断されます。そう思わない場合は、ジョエル・スポルスキーに聞いてください。
VS2010を選ぶ理由
@NickChammasが提起した質問は、VS2010がデータベース開発のゲームチェンジャーである理由を示すキラー機能を探しています。私はその根拠に基づいて主張することはできないと思います。
おそらくコミカルに、他の人がこのツールに欠陥を見つけた場合、採用の強力な理由がわかります:
- アプローチを変更する必要があります。
- あなたとあなたのチームは別の方法で働くことを余儀なくされます。
- すべての変更の影響を詳細に詳細に評価する必要があります。
- すべての変更がべき等になるように導かれます。
あなたがプロジェクトの唯一のDBAであり、データベースへのすべての変更を管理している場合、この推論はばかげたことにばかげているように聞こえるはずです。しかし、@ BrentOzarにポイントがあり、新しいルールの1つがEverybody's the DBAであると考える場合、チームのすべての開発者が作業できるようにデータベースの変更を制御する必要があります。
データベースプロジェクトの採用には、一部の開発者または少なくともプロセスまたはワークフローの変更のために、メンタルシフト(古い習慣を壊すのが難しい)が必要になる場合があります。運用データベースがデータベースの現在のバージョンを表すデータベースアプリケーションを開発した開発者は
、ソースコードがデータベースに変更を加える手段となるソースコードベースのアプローチを採用する必要があります。Visual Studioデータベースプロジェクトでは、プロジェクトとソースコードはデータベーススキーマの「真実の1つのバージョン」であり、開発者や組織がアプリケーションスタックの他の部分で既に使用しているSCMワークフローを使用して管理されます。データについては、実稼働データベースは本来あるべき「真実の1つのバージョン」のままです。
データベース開発にVS2010アプローチをうまく採用するために必要な基本的な変化に到達しました…
データベースをコードとして扱う
ライブデータベースを変更する必要はありません。すべてのデータベースの変更は、アプリケーションの変更と同じパターンに従います。ソースの変更、ビルド、デプロイ。これはMicrosoftからの一時的な方向転換ではありません。これはSQL Serverの未来です。データベースとしてのコードはここにあります。
データベース開発者は、データベースエンジン内の既存のオブジェクトを目的の形状に変換する方法ではなく、アプリケーションのバージョンに対してオブジェクトの形状を定義します。自問自答しているかもしれません:顧客テーブルが既に含まれているデータベースに対してこれをどのように展開しますか?これは、展開エンジンが登場する場所です。前述のように、デプロイメントエンジンはスキーマのコンパイル済みバージョンを取得し、データベースデプロイメントターゲットと比較します。差分エンジンは、プロジェクトから展開しているバージョンと一致するようにターゲットスキーマを更新するために必要なスクリプトを生成します。
はい、同様のパターンに従う他のツールがあり、私が答えに課した制約の範囲外のプロジェクトについては、同等に考慮する価値があります。ただし、Visual StudioとTeam Foundation Server ALMを使用している場合、それらが競合できるとは思いません。
VS2010データベースプロジェクトの何が問題になっていますか?
編集:それでは、あなたのポイントは何ですか?
@AndrewBickertonはコメントで、元の質問には答えていないと述べたので、「データベース開発にSSMSではなくVisual Studio 2010を使用する必要があるのか?」ここに。
- SSMSはデータベース開発ツールではありません。はい、SSMSでTSQLを開発できますが、VS2010の豊富なIDE機能は提供しません。
- VS2010は、データベースをコードとして扱うためのフレームワークを提供します。
- VS2010は、データベースコードに静的コード分析をもたらします。
- VS2010は、ビルド-デプロイ-テストサイクルを完全に自動化するツールを提供します。
- SQL2012およびVisual Studio vNextは、データベースプロジェクトの機能を拡張します。VS2010に今すぐ慣れれば、次世代のデータベース開発ツールをすぐに使い始めることができます。