リファクタリング (データベース)
From Wikipedia, the free encyclopedia
データベースのリファクタリング(Database_refactoring)はデータベースの計画ないし枠組み(英: database schema )についてのひとつの単純な変更である。
それはその挙動と'情報的意味'(英: informational semantics )を保ったままその設計を改善するものである。データベースのリファクタリングはデータの解釈や利用の方法を変更しないしまたバグの修正や新たな機能を付け加えるものでもない。データベースに対するそれぞれのリファクタリングは稼働状態においてそのシステムを保つ、したがって管理による遅延を引き起こさずに、その生産環境においてその有効なデータの存在を与える。
データベースのリファクタリングは概念的にはプログラムコードのリファクタリングよりも難しい;コードのリファクタリングは挙動上の意味を管理する必要だけであるのに、データベースのリファクタリングは情報上の意味も管理しなければなならない。
データベースの図式は大抵幾つかの理由の一つによってリファクタリングされる:
データベースのリファクタリングの範疇
2006年にスコット・アンブラー(英: Scott Ambler)とピラモド・サダラージ(英: Pramod Sadalage)[1]はデータベースのリファクタリングの範疇を述べた[2][3]。
2019年にウラジスラブ・スツルジック(英: Vladislav Struzik)は新しい一つのものをもってデータベースのリファクタリングを補充した[4][5]。
| 分類 | 概要 | 主な例の一つ | 例 |
|---|---|---|---|
| アーキテクチャ | 外部プログラムがデータベースとやりとりする方法を改善するための変更。 | コード内の既存のJavaの操作をデータベース内のストアドプロシージャで置き換える。ストアドプロシージャにするとJava以外のアプリケーションでも利用できる。 | CRUDメソッドの追加;ミラーリングテーブルの追加;リードメソッドの追加;ビューによるテーブルのカプセル化;計算メソッドの導入;インデックスの導入;読み込み専用テーブルの導入;データベースからのメソッドの移動;データベースへのメソッド移動;ビューによるメソッドの置き換え;メソッドによるビューの置き換え;正式なデータソースの使用[7] |
| 構造 | テーブルやビューの定義の変更 | テーブル間でカラムを移動する。 | カラムの削除;テーブルの削除;ビューの削除;計算カラムの導入;代理キーの導入;カラムの統合;テーブルの統合;カラムの移動;カラム名の変更;テーブル名の変更;ビュー名の変更;テーブルによるLOBの置き換え;カラムの置き換え;関連テーブルによる1対多関係の置き換え;自然キーによる代理キーの置き換え;カラムの分割;テーブルの分割[8] |
| データ品質 | データベースに含まれる情報の品質を高めるための変更。 | カラムのヌル値を禁止して常に値が含まれるようにする。 | 参照用テーブルの追加;標準的なコードの適用;標準的な型の適用;キー戦略の整理;カラム制約の削除;デフォルト値の削除;ヌル不可制約の削除;カラム制約の導入;共通フォーマットの導入;デフォルト値の導入;カラムのヌル不可への変更;データの移動;プロパティフラグによるタイプコードの置き換え[9] |
| 参照整合性 | 参照先の行が別のテーブルに存在すること、必要でなくなった行は適宜削除されることを保障するための変更。 | 2つのエンティティ間に、(データベース外で実装されていた)カスケード削除のためのトリガーを追加する。 | 外部キー制約の追加;計算カラムへのトリガーの追加;外部キー制約の削除;カスケード削除の導入;ハードデリートの導入;ソフトデリートの導入;履歴のためのトリガーの導入[10] |
| 変換 | 情報的意味の変更を伴うデータベースの計画の変更。 | 既存のテーブルに新しいテーブルを追加する。 | データの挿入;新たなカラムの導入;新たなテーブルの導入;ビューの導入;データの更新[11] |
| メソッド | 品質を高めるためのメソッド(ストアドプロシージャ、ストアドファンクション、トリガー)の変更。コードのリファクタリングの多くはデータベース内メソッドにも適用可能である。 | ストアドプロシージャの名前をわかりやすいものに変更する。 | パラメータ化メソッド;パラメータの削除;メソッド名の変更;パラメータの順序変更;陽的なメソッドによるパラメータの置き換え;条件表現の合併;条件の分解;メソッドの展開;変数の導入;コントロールフラグの削除;ミドルマン(英: Middle Man )の削除;テーブル参照による記号の移動;入れ子の移動;ガード条項による条件;現行の変数の分割;アルゴリズムの縮減 |
| アクセス | データアクセスに関する変更。 | 特権許可の付与 | 認証属性の変更;特権許可の取消;特権許可の付与;データベースの計画の抜粋;データベースの計画の併合[12][13] |
データベースのリファクタリングの処理
データベースのリファクタリングの処理は既存のデータベースの計画を発展するようデータベースのリファクタリングを適用する行為である(データベースのリファクタリングは 発展的データベース設計 (英語: evolutionary database design)の中核の実践である)。考慮を要する三つの点がある:
- いかに単一のリファクタリングを実装するか
- いかにデータベースのリファクタリングが組織の中へ持ち込まれて共有されるか
- いかにデータベースのリファクタリングの系列が適用されるのか