データベースの列定義(名前・属性)の変更(追加・修正・削除)があった場合に、
全ての修正箇所の特定をするためにはどのような工夫や方法を取られていますか?
ちなみに今までに業務で行ってきた方法だと以下の様になりますが、
それでも修正漏れ等はどうしても出してしまうのが実情です。
- Grepで検索
- 全ての列を定数などで定義して、エラー箇所や近いものを参照
- EntityやPOJOといったオブジェクトでテーブル情報を管理する
理想としては一切のSQLを書くことなく実装できることが望ましいのですが、
現状ではなかなかそうもいきません。
また、開発初期段階時などではDB定義の変更はよくあることなので、
そういった場面での工夫などもありましたら、ぜひ教えてください。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
基本grepですね。
あとはテストを入念に行う。
結構grepに引っかからなかったところが出てきたりします。
投稿2016/07/26 08:31
総合スコア16998
0
cha-ra さん
初めまして、tomariです。
フォローして頂いたので、回答します。
データベースの列定義(名前・属性)の変更(追加・修正・削除)があった場合に、
全ての修正箇所の特定をするためにはどのような工夫や方法を取られていますか?
→タイミング別に記載します。
○修正前
1)「select 」のようなgrepに引っかからない記述をしない。等
2)カラム名、変数名等の命名規則を作り、grepしやすいようにする。
(他の方参照)
3)grepの時にコメントアウトか分かるように、
コメントアウト「/ */」内に改行を含めない。
4)SQLを1行で書かない。
(修正前後でDIFFが分かりにくい)
○修正後
5)システム全体の設計思想の把握とDB設計思想の把握
6)頭の中で変更による修正箇所・修正内容の特定・影響調査
(悪く言えば俗人性が高い。良く言えば職人技。)
7)grepによる修正箇所の特定の繰り返し
(カラムの値を格納している変数名でもさらにgrep)
○その他コメント等
6)で漏れたら、テストも漏れる。
これを漏らさないためにgrepを行うけれど、
grep結果は自分の頭の中での影響調査と念のための一致確認や
修正したかどうかのチェックリストとして使っている。
修正箇所の特定ができても、修正方法(設計)に問題があればバグる。
可能であれば、第3者チェックをしたいが、
第3者も上記の3)4)を理解出来なければ、意味がない。
第3者が居ない場合の自己チェックは、思い込みを減らすため、
日を空けてチェックや再設計するようにしている。
理想としては一切のSQLを書くことなく実装できることが望ましい
→SQLを書くことなく実装できることが望ましいと思わないのは、
SQLに抵抗がないからかな。
開発初期段階時などではDB定義の変更はよくあることなので、
そういった場面での工夫などもありましたら、ぜひ教えてください。
→初期段階とはいえ、「たまにあること」程度にする。
具体的には、以下の3つ。
1:そもそも仕様変更させない工夫(=設計前の仕様面の念押し確認)
2:やむを得ない場合でも、既存を引きずる覚悟(=影響を抑える工夫)
3:先を見通したDB設計(=機能面だけでなく、性能面・保守面も考慮する)
投稿2016/08/19 20:16
総合スコア760
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
私は Grep ですかね。
大文字・小文字無視で検索をかけてひたすらチェックしていく簡単なお仕事…
昔 DAO とか DTO とか使っていた時は、修正箇所がまとまっていたので(DB を触るのは DAO だけ)
多少楽だった気がします。
投稿2016/07/26 08:27
総合スコア1126
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
データベースの構造を含めて全部出力するコマンドやSQLを使って構造をDDL文にして比較するのが漏れがなさそう。
PostgreSQLだとpg_dumpallとかあるので。
でもこの方法だと「なぜ現行こうなっているのか」っていう経緯説明はわからないので、そういうのは別途ドキュメントベースでの管理とかでしょうか。
投稿2016/07/26 08:27
退会済みユーザー
総合スコア0
0
本質的には仕様書に参照状況を書いておかない限り難しいかも
とくにカラム名を変な連番管理とかしてループでまわしてたりすると
最悪なのでカラム名はきちんと書くようにしたいですね。
個人的には・・・
grepしやすいように、テーブル名に接頭句として「t_」をつけたり
mysqlなどはDB名やtable名をバッククォートで囲む方言があるので
明示的に付加して検索することでマッチしやすくさせています。
(今回のケースだとSQL側では処理したくなさそうなので難しいかな)
投稿2016/07/26 08:21
総合スコア114827
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/26 14:06
2016/07/26 15:15
2016/07/26 15:37
2016/07/27 01:01
2016/07/27 01:11