知識マップ: 業務アプリのDBスキーマをバージョン管理する ── 「客先ごとにDBが違う」を防ぐマイグレーションの実践

記事「業務アプリのDBスキーマをバージョン管理する ── 「客先ごとにDBが違う」を防ぐマイグレーションの実践」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。

客先ごとに分散する業務アプリのDBは、手作業のSQL手順書運用では適用漏れや途中失敗の放置によってスキーマがバラつきます。この記事は、DB自身にスキーマバージョン番号(SQLiteならPRAGMA user_version)を持たせ、番号付きの前進マイグレーションを起動時にトランザクション単位で自動適用する設計を軸に整理します。列の削除やリネームのような破壊的変更はexpand-contractの2段階リリースで行い、旧バージョンのアプリを締め出す判定にはスキーマ番号とは別の最低互換バージョンを使う必要があります。適用前のVACUUM INTOによる自動バックアップ、複数プロセス同時起動の直列化、最古のDBからの一気適用リハーサルまで含め、EF Core Migrations・DbUp・自前実装のどれを選ぶかの判断基準も示します。

DBスキーマのバージョン管理とマイグレーションの知識マップ業務アプリのDBスキーマをPRAGMA user_versionなどのスキーマバージョンと前進マイグレーションで管理し、破壊的変更をexpand-contractの2段階リリースと最低互換バージョンによる旧アプリの締め出しで安全に進め、EF Core Migrations・DbUp・自前実装を使い分ける関係を示す図原因になり得る防止する前提とするに保存されるに保存されるに保存される前提とする前提とする前提とする利用する前提とする両立しない利用する前提とする推奨される対応推奨される対応用いるのは非推奨推奨される対応前提とする自動化する前提とするに保存される前進マイグレーション客先ごとのDBスキーマの分散手作業のSQL手順書運用スキーマバージョン番号PRAGMA user_versionSQL Serverの専用バージョンテーブルSQLiteマイグレーションのトランザクション化DDLのトランザクション対応可否適用前バックアップVACUUM INTO旧バージョンアプリの締め出し最低互換バージョン(min_compatible_version)expand-contract(2段階リリース)EF Core MigrationsDbUp最古DBからの一気適用リハーサルマイグレーション適用の直列化SQL Server

概念間の関係(全22件)

図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。

主要概念の定義

前進マイグレーション
スキーマ変更のコードを番号付きでアプリ本体に同梱し、起動時に未適用分だけを順にトランザクションで適用する仕組み。
客先ごとのDBスキーマの分散
客先・拠点のPCに分散した同一アプリのDBが、適用漏れや途中失敗の放置でそれぞれ異なるスキーマ状態になっていく状態。
手作業のSQL手順書運用
スキーマ変更のSQLを手順書として作業者に流させる運用形態。実行したかどうかの記録がDBのどこにも残らない。
スキーマバージョン番号
アプリの製品バージョンとは別に、DB自身が持つスキーマの版を示す整数。
PRAGMA user_version
SQLiteのデータベースヘッダー(オフセット60)に格納される整数で、アプリケーションが自由に使ってよくSQLite自身は利用しない領域。スキーマバージョンの置き場所として使われる。
マイグレーションのトランザクション化
1つのマイグレーションとバージョン番号の更新を同一トランザクションに含め、失敗時に開始前の状態へ巻き戻せるようにする原則。
適用前バックアップ
マイグレーション適用の直前に取る、失敗時にファイル差し替えで復旧できるようにするための自動バックアップ。
VACUUM INTO
元のファイルを変更せず、断片化を解消した一貫性のある最小サイズのコピーを別ファイルへ作成できるSQLiteのSQL文。
旧バージョンアプリの締め出し
旧バージョンのアプリが新しいDBを開いてしまう事故を防ぐため、最低互換バージョンを使って古いアプリの起動を止める仕組み。
expand-contract(2段階リリース)
既存の構造を残したまま新しい構造を追加し(expand)、アプリ側の移行が済んでから旧構造を削る(contract)、破壊的変更のための2段階リリース手法。
EF Core Migrations
C#で書いたモデルの変更を検出して、スキーマ変更のコードを自動生成するEF Coreの付属機能。
DbUp
SQLスクリプトの適用管理に特化したオープンソースの.NETライブラリ。実行済みスクリプトをジャーナルテーブルに記録し、未実行分だけを実行する。
最古DBからの一気適用リハーサル
各スキーマバージョンのDBファイルをテストフィクスチャとして保存し、それぞれから最新まで一気に適用するテストを自動化する取り組み。
SQL Serverの専用バージョンテーブル
user_versionに相当する仕組みを持たないSQL Serverで、バージョン番号・適用日時・適用時のアプリバージョンを1行ずつ記録する専用テーブル。

機械可読データ

このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。