- プロローグ
- ミッション:深夜残業を回避しろ!
- 商品マスタ定義
- 商品マスタデータ(抜粋)
- 商品マスタの問題点
- 商品マスタの解決策
- 商品マスタ定義
- 説明
- そして、深夜残業回避へ・・・
- 商品マスタデータ(修正案対応版)
- 最後に
はじめまして。Nextribe で SE として働いている ヒマティ です。
SE としてお仕事に携わっていると、DB の テーブル設計に携わる事もあるかと思います。
そこで、私が現場での経験を元にテーブル設計の問題点と解決策を提案したいと思います。
そこで、私が現場での経験を元にテーブル設計の問題点と解決策を提案したいと思います。
今回は、私が一番大好きな 「マスタ」についてのお話です。
自分が現場に配属されたシステム開発担当者だと思って読み進めて頂ければ幸いです。
また、この記事が皆さんの ”引き出し” の一つになれば嬉しいです。
また、この記事が皆さんの ”引き出し” の一つになれば嬉しいです。
では、さっそく行きましょう!!
プロローグ
あなたは、あるお菓子メーカーに就職し、システム開発担当として配属されました。
さっそくあなたは、「販促キャンペーンを実施するから、キャンペーン期間だけ商品名を変えて欲しい」と頼まれました。
課長が作業内容の詳細を説明してくれると言うのですが、果たして・・・。
ミッション:深夜残業を回避しろ!
課長「おつかれ~。さっそく説明してもいい?」
あなた「はい。お疲れ様です。よろしくお願いします。」
課長「実は今回、ウチの主力商品である『じゃがじゃがいもいも』が、人気芸能人とコラボする事になってな。そこで、大々的に販促キャンペーンをする事になったんだ。」
あなた「はい。凄いですね!!」
課長「そこで、そのキャンペーン期間中だけ商品名を『じゃんがじゃんがいんもいんも』にしたいんだ。」
あなた「いいですね!(・・・その名前、重役会議で考えたんかな・・。)」
課長「ウチは、商品名を商品マスタで管理していて、このマスタの商品名を使って工場でパッケージに印字しているんだ。」
あなた「なるほど。」
課長「ただ、商品マスタは工場操業中は参照しているから変更が出来ない。だから工場の機械が停止中に行う必要があるんだ。」
あなた「工場の機械が停止するのは何時ですか?」
課長「毎日 23時 ~ 5時 までが停止期間だから、マスタの変更作業をするのはその間になる。」
あなた「ご説明ありがとうございます。そのキャンペーン期間は、いつからいつまでですか?」
課長「来年の1月1日~ 1ヶ月間なんだ。元日出荷分からのパッケージ刷新を予定している。」
課長「配属されて、さっそくの深夜残業で申し訳無いがお願い出来るかな?」
課長「商品マスタのテーブル定義は、ここに置いておくから見ておいてくれ。」
課長「じゃ、頼んだよ。よろしく。」
あなた「は・・・はい。承知しました。(深夜残業したく無いなぁ・・・。それに、大晦日も出勤じゃないか・・。)」
商品マスタ定義
※ PK とは 「Primary Key(プライマリーキー)」 の略で、テーブルのレコードを一意に識別するための制約として定義する Key項目 の事です。
※ マスタデータを参照する場合、廃止区分 = 0 のデータを参照する想定。
商品マスタデータ(抜粋)
商品マスタの問題点
深夜残業をしたくないあなたは、どうしたら深夜残業を回避できるのかを考えます。 いったい何が問題で深夜残業を余儀なくされているのでしょうか。
それはズバリ、商品マスタの定義に問題があるからです。
もしあなたが、商品マスタのテーブル定義を変更できる立場であれば、 どの様な商品マスタのテーブル定義にすれば、深夜残業を回避できるでしょうか。
読み進める前に少し考えてみて下さい。
商品マスタの解決策
解決策を提案する前に、何が問題点かをお話します。
それは、商品マスタにデータの有効期間の概念が無い です。
DataBase で使われる「マスタ」は、システムの運用上、変更がなされる事を前提に設計すべきだと私は考えます。
理由は以下の3点です。
1. マスタデータの変更を、マスタを参照している他システムに依存せず行える。 2. いつからいつまで該当のマスタデータを使用していたか履歴が残る。 3. 過去データを参照したい時、当時の情報をそのまま再現できる。
※ マスタを参照する側も、マスタデータの取得時に有効期間で取得してもらう必要があります。
私なら、こう定義する
商品マスタ定義
説明
プライマリーキー の定義に、有効開始日時を必ず入れます。
なぜなら、商品CD は同じでも、中身(商品名など)が違う可能性があるからです。
今回挙げた例などは、まさにそうですよね。
今回の例ですと、商品CD が同じで別の商品名を取得できる利点は、マスタを参照する側(工場の商品名印字プログラム)には変更を行う必要が無く、有効開始日時が来れば、勝手に商品名が変わる仕組みを構築する事ができます。
そして、深夜残業回避へ・・・
あなた「課長、ちょっとお時間よろしいでしょうか。」
課長「なんだ?私は忙しいんだ。」
あなた「承知しております。お時間は取らせません。」
課長「手短に頼むよ。」
あなた「先日、作業依頼を受けました、例の販促キャンペーンの件ですが、作業内容を手順に纏めておりました所、商品マスタの定義を変更し、工場の商品名印字プログラムを修正する事で、今後同じ様な販促キャンペーンの度に出社する必要が無くなります。」
課長「ほう・・。」
あなた「今回の様に、一時的で且つ、キャンペーン期間終了時に元の商品名に戻る場合は、商品名を戻す際も深夜作業をする必要があり、非常に効率が悪いかなと思いましたが、課長はいかがですか?」
課長「そうだな・・。確かに効率が良いとは言えないが。だが、その修正にかかる費用はどうするんだ?工場側のプログラムも修正する必要があるんじゃないのか?」
あなた「はい、確かに費用はかかります。ただ、商品マスタの修正と工場側のプログラム修正をして頂ければ、いつでも商品マスタの変更を行う事ができます。これは今後の話になりますが、この仕組みを別マスタにも入れれば、様々なマスタ関係の作業を軽減する事ができます。マスタデータの管理や過去の名称も参照が可能になります。深夜残業や休日出勤等の人権費の大幅な削減、マスタ管理コストの削減が見込まれます。」
課長「・・・・。」
あなた「修正内容に関しても、そんなにインパクトの大きな定義変更ではありません。」(商品マスタ定義、修正案を見せる)
あなた「工場側のシステムは、”システム日付で有効な” 商品マスタデータを取得して頂くだけです。如何でしょうか?課長。」
課長「・・・・・・・・・・、よし、わかった。この修正案でいこう。」
あなた「ありがとうございます!!(よしっ!!大晦日は遊びたおす!)」
商品マスタデータ(修正案対応版)
※ 有効開始日時、有効終了日時 の時間は、便宜上省略して表記しています。
※ 有効終了日時は、継続的に使用する場合は 2099年などの未来日を設定する現場が多いです。
最後に
時間は、人にも機械にも同じ様に流れていきます。その時間の流れを利用し、時間が来れば勝手に切り替わる。
そんな仕組みの構築が可能な概念が、有効期間付きのマスタ定義です。
私はマスタ定義をする際は必ず有効期間付きのマスタ定義をする事を意識しています。
※ 過去に有効期間を設定せず、大後悔した事もあります・・・。いや、今もか・・・。
そんな仕組みの構築が可能な概念が、有効期間付きのマスタ定義です。
私はマスタ定義をする際は必ず有効期間付きのマスタ定義をする事を意識しています。
※ 過去に有効期間を設定せず、大後悔した事もあります・・・。いや、今もか・・・。
この考え方が、皆さんの”引き出し”の一つになる事を願っています。
なお、例として挙げたこの物語はフィクションであり、筆者が勝手に想像して書いた創作物です。
実在の人物・お菓子・会社等とは一切関係ありません。
