[解決済み] ソース管理からどのようにデータベースを構築するべきか?
2022-12-19 15:10:47
質問
SOコミュニティのwikiで、データベースオブジェクトをバージョン管理すべきかどうかについて議論されています。しかし データベースオブジェクトのビルド自動化プロセスを作成するためのベストプラクティスについての議論はあまり見たことがありません。
特に、開発者と DBA は、データベースの展開に対する自動化アプローチの利点とリスクを評価する際に、しばしば異なる目標、アプローチ、および懸念事項を持っているからです。
私は、実世界でどのような実践が効果的であったかについて、SO コミュニティからいくつかのアイデアを聞きたいと思います。
どのプラクティスが本当にベストなのか、いくらか主観的であることは承知していますが、何が効果的であるかについての良い対話は、多くの人々にとって役に立つと思われます。
このトピックで懸念される領域について、いくつかお勧めの質問を挙げてみました。これらは決定的なリストではなく、私が何を求めているかを理解するのに役立つ、人々のための出発点です。
-
テスト環境と本番環境の両方をソース管理から構築する必要がありますか。
- 両方とも自動化を使用して構築すべきでしょうか - それとも、安定し、完成したテスト環境からオブジェクトをコピーすることによって本番環境を構築すべきでしょうか?
- デプロイメント スクリプトにおいて、テスト環境と実稼働環境の潜在的な違いにどのように対処しますか?
- デプロイメント スクリプトがテスト時と同様に本番環境でも効果的に機能することをどのようにテストしますか?
-
どのような種類のオブジェクトをバージョン管理すべきでしょうか。
- 単なるコード (プロシージャ、パッケージ、トリガー、Java など) ですか?
- インデックス?
- 制約事項?
- テーブル定義?
- テーブル変更スクリプト? (例: ALTER スクリプト)
- すべてですか?
-
バージョン管理されるべきではないオブジェクトの種類は?
- シーケンス?
- グラント?
- ユーザーアカウントは?
-
データベース オブジェクトは、SCM リポジトリ内でどのように整理されるべきですか?
- 変換スクリプトや ALTER スクリプトのような 1 回限りのものをどのように扱うか。
- データベースからオブジェクトを削除する場合、どのように対処しますか?
- 誰が の推進 オブジェクトを開発レベルからテストレベルへ昇格させるのは誰でしょうか?
- 複数の開発者からの変更をどのように調整しますか?
- 複数のシステムで使用されるデータベースオブジェクトの分岐をどのように処理しますか?
-
このプロセスに合理的な例外があるとすれば、それは何ですか?
- セキュリティ上の問題ですか?
- 非識別化に関するデータですか?
- 完全に自動化できないスクリプト?
-
プロセスに弾力性を持たせ、強制力を持たせるにはどうしたらよいでしょうか?
- 開発者のエラーに?
- 予期せぬ環境問題へ?
- 災害復旧のため?
-
DB-SCMの利点が本当にコストを正当化することを、どのようにして意思決定者に納得させるのですか?
- 逸話的証拠?
- 業界研究?
- 業界のベストプラクティスの推奨?
- 公認の権威へのアピール?
- コスト/ベネフィット分析?
-
このモデルでは、誰がデータベース・オブジェクトを所有すべきですか?
- 開発者ですか?
- DBAですか?
- データアナリスト?
- 1人以上?
どのように解決するのですか?
ご質問に対する回答です。
-
テスト環境と本番環境の両方をソース管理から構築する必要がありますか?
はい
- 両方とも自動化を使用して構築すべきでしょうか。それとも、安定し、完成したテスト環境からオブジェクトをコピーすることによって本番環境を構築すべきでしょうか。
- 両方とも自動化します。環境間でデータをコピーしないでください。
- デプロイメントスクリプトでテスト環境と本番環境の潜在的な違いにどのように対処しますか?
- テンプレートを使って、環境ごとに異なるスクリプトを作成する(例:外部システムの参照、データベースの連携など)
- デプロイメントスクリプトがテスト時と同様に本番環境でも効果的に機能することをどのようにテストしますか。
- 本番前の環境でテストします。本番環境の完全なコピー (データベースやその他のシステムの可能性もあります) でデプロイメントをテストします。
-
バージョン管理されるべきオブジェクトの種類は?
- 単なるコード (プロシージャ、パッケージ、トリガー、Java など) ですか?
- インデックス?
- 制約事項?
- テーブル定義?
- テーブル変更スクリプト? (例: ALTER スクリプト)
- すべてですか?
-
すべて、そして。
- 静的データ (ルックアップリストなど) を忘れないでください。
- データベーススクリプトの最新版のみを保持し(もちろん、バージョン管理されています)、そして
- ALTERスクリプトを保存します。1つの大きなスクリプト(または001_AlterXXX.sqlという名前のスクリプトのディレクトリ。自然なソート順で実行するとバージョンAからBにアップグレードされる)
-
バージョン管理されるべきではないオブジェクトの種類は?
- シーケンス?
- グラント?
- ユーザーアカウントは?
- を参照してください。 ユーザー/ロール (または技術的なユーザー名) が環境間で異なる場合でも、テンプレートを使用してスクリプトを作成できます (1. を参照してください)。
-
データベース オブジェクトは、SCM リポジトリ内でどのように整理されるべきですか?
- 変換スクリプトや ALTER スクリプトのような 1 回限りのものをどのように扱うか。
- 2を参照してください。
- データベースからオブジェクトをリタイアさせる場合、どのように対処するのですか?
- DBから削除、ソース管理から削除 trunk/tip
- 開発レベルからテストレベルへのオブジェクトの昇格は、誰が責任を持つべきでしょうか?
- dev/test/release スケジュール
- 複数の開発者からの変更をどのように調整するのですか?
- 開発者ごとに別々のデータベースを作らないようにしてください。 ソース管理を使っていますよね? この場合、開発者はデータベースを変更し、スクリプトをチェックインします。完全に安全にするには、夜間ビルド時にスクリプトからデータベースを再作成してください。
- 複数のシステムで使用されるデータベースオブジェクトのブランチングをどのように扱うのですか?
- タフなもの:何としても避けたい。
-
このプロセスに合理的な例外があるとすれば、それはどのようなものですか?
- セキュリティ上の問題ですか?
- 特に毎日/毎晩のDB再構築を自動化している場合は、開発用に許可することができます。
- 個人を特定できないようにする必要があるデータですか?
- 完全に自動化できないスクリプト?
- リリース情報/ALTERスクリプトと一緒に文書化し、保存します。
-
どのようにすれば、プロセスに弾力性と強制力を持たせることができるのでしょうか。
- 開発者のエラーに?
- ゼロからのデイリービルドでテストし、増分アップグレード(ALTERを使用してバージョンAからBへ)と結果を比較する。結果のスキーマと静的データの両方を比較する。
- 予期せぬ環境問題に?
- バージョン管理、バックアップの活用
- は、特にデプロイメントの前に、PRODデータベーススキーマをあなたが考えているものと比較します。SuperDuperCool DBA はチケットシステムにはないバグを修正したかもしれません。)
- ディザスタ リカバリのため?
-
DB-SCMの利点が本当にコストを正当化することを、どのようにして意思決定者に納得させるのですか?
- 逸話的証拠?
- 業界研究?
- 業界のベストプラクティスの推奨?
- 公認の権威へのアピール?
- コスト/ベネフィット分析?
- のようなソフトを買うのにお金が必要な場合は別として)開発者とDBAが同意すれば、誰も説得する必要はないと思います。 dbGhost のようなソフトウェアを買うお金が必要でなければ)。
-
このモデルでデータベースオブジェクトを所有するのは誰ですか?
- 開発者ですか?
- DBAですか?
- データアナリスト?
- 1人以上?
- 通常、DBAはモデルを承認します(チェックイン前またはコードレビューの一部として後)。彼らは間違いなくパフォーマンスに関連するオブジェクトを所有しています。しかし、一般的にはチームがそれを所有します[そしてもちろん雇用者も:)。
関連
-
[解決済み】MongoDBデータベースの名前を変更する方法とは?
-
[解決済み] 山積みされた靴下を効率よく組み合わせるには?
-
[解決済み] ステージング・エリアから1つのファイルを削除する(undo git add)にはどうすればよいですか?
-
[解決済み] ATTACHで開いたSQLiteデータベースファイルのテーブルを一覧表示するにはどうすればよいですか?
-
[解決済み] Visual Studio の .suo と .user ファイルをソースコントロールに追加する必要がありますか?
-
[解決済み] composer.lockはバージョンコントロールにコミットすべきですか?
-
[解決済み] Unity3Dのソース管理でGitを使うには?
-
[解決済み] 変更履歴/監査データベーステーブルの最適なデザインは?[クローズド]
-
[解決済み] scale horizontallyとscale verticallyの意味を教えてください。重複
-
[解決済み] テーブルのネーミング。アンダースコアとキャメルケース、名前空間?単数形と複数形?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] データベースの項目はソース管理をしていますか?[クローズド]。
-
[解決済み] 外部キーを主キーにするのは問題ないですか?
-
[解決済み] マスター・マスターとマスター・スレーブ、どちらのデータベース・アーキテクチャが良いのか?
-
[解決済み] DBに型を格納する際のMIMETypeの最大長について
-
[解決済み] データベースに郵便番号を格納する必要があります。カラムの大きさはどのくらいにすればよいでしょうか?
-
[解決済み] DB2とOracleから見たCLOBとBLOBの違いとは?
-
[解決済み] 非リレーショナルデータベース設計【終了しました
-
[解決済み] データベースとファイルシステムストレージ
-
[解決済み] MS Accessの代替となるフリーソフト [終了しました]。
-
[解決済み] データベースに登録する電子メールアドレスの最適な長さは?