DB設計をがんばっているヤシがいた。
項目のありかとテーブル構成に悩んでいた。
あーでもないこーでもないと。
そこでちょっかいかけにいってみた。


おいら:( ´∀`)<やぁ。何なやんでんの?
そいつ:(;´Д`)<いやぁ。項目どーやって設定したらよいかわかんなくて。
( ´∀`)<ふ〜ん。ところで、構成イメージ図ってかんじの絵は書いてる?
(;´Д`)<絵ですか?なんも書いてないですよ。
( ´∀`)<ほぅ。ほなイメージ図も書かずにいきなり項目定義してるの?
(;´Д`)<は、はい。
( ´∀`)<こらまたえらい難しいことしてますな。悩んでいるなら書きなはれ。
(;´Д`)<え、えっとどー書いたらいいんですか?
!( ゚Д゚)<それも書けないのに項目名定義できるか!!
(;´Д`)<しくしく


作れる人が書かないのとはまたわけが違います。


( ´∀`)<よしゃ。5分でできるイメージ図を作ったろ。
(;´Д`)<まじっすか
( ´∀`)<ってことで仕様の概要を教えれ


仕様を「やりたい事」「制約事項」という観点で聞き取り、
まずはテキトーにこんだけいるやろ〜ってなテーブルイメージを書き出して、
業務が一通りまわりそうな図に仕上げる。
各種マスタ類や入力データを溜め込むだけのテーブル、検索用のテーブルをここでイメージしておく。
それができたらそいつを元に制約事項に注意しつつキー項目の確認や
データが流れていく上で必要な要素を肉付けするように足していく。
おおよそ大丈夫そうな配置になったところで正規化だの非正規化だのを検証する。
再構築微調整を行う必要があるときにやるのです。


( ´∀`)<ってなことで、なんとなくでけたろ
(;´Д`)<そうですね。
( ´∀`)<このテキトー図を自分なりにキッチリ書き直してみ。


これでうまくいくなら初めから悩んではいないだろう。
ってのは経験則。
今回もご多分に漏れずで、後からまた覗きに行ったら項目名と格闘してました。
月1回の集計作業を行う用件があるところで。


( ´∀`)<こりゃ。さっきのでけたんかい。
(;´Д`)<作りましたよ。それでこの項目をどーするか悩んでいるんです。
( ´∀`)<ちょっとまて。「前回集計日」って何に使うの?
(;´Д`)<お客さんから問い合わせがあったときに先月の情報を調べるのにいるかなと・・・
( ´∀`)<履歴をとってるところはないの?
(;´Д`)<ありますよ。過去履歴はココから日付でもってこようと思っています。
!( ゚Д゚)<それなら前回分もそこからもってくりゃええんちゃぅん?
(;´Д`)<え、でも・・・
( ´∀`)<前回情報しか取得しない〜って用件があるわけじゃなくて複数月分検索することあるんやろ?
      それなら「履歴検索」という機能があるのがよさげやん。
      「履歴検索」というからには「前回」だけ特別扱いするってのはなんで?って疑問わくやろ。
      前回だけ特別扱いする理由はあるの?
(;´Д`)<検索結果に表示するのにいるんです〜
( ´∀`)<それならちょっと事情が違ってくるな。
      そんでもって、その検索結果は検索専用テーブルとしてつくることにして、
      データは各種マスタから作成するって話になったよな。
      検索結果に必要な項目見せて。
(;´Д`)<はいこれ。
( ´∀`)<・・・・・・日がいるんでなくて結果がいるのよな?
(;´Д`)<日は検索用の項目です〜
( ´∀`)<それなら結果だけありゃいい。これはそーゆー目的で作るテーブルだっ


目的と手段とを混同するとたいていロクなことが起こりません。
頭の中で考えついたことを文字として定義していく際には
ぬかりの一つもなく構築することなど誰が出来ましょう。
人間という失敗する生き物をベースにおいて考えた場合、
失敗しないという選択肢をとるのはよほどの幸せものです。
そんな不確定な土壌の上にシステムは組めません。


ゆえに確認手段、検証の機会が必要になるのです。
より確実な方法で、より多くの人がわかるかもしれない方法で行うのが望ましいことなのです。
テーブル設計一つでも、プログラムの負荷は大きく変わる。
変なテーブル設計をすると変なプログラムになるもんです。
シンプル設計に留めるのに全力をあげるのは、
プログラムに含まれるであろうバグ数を予め抑える為の必然なのです。


( ´∀`)<ほれほれ。ここがこーなっているからこれでいけるべ?
(;´Д`)<そうですね。そうなりますね。そうしかないですよね。


こうして人は成長していくのでしょう。
しかして今の作業に反映できるかというと、まだまだ足りないのも必然。
けど1歩は前進。( ´∀`)
そしてまたしばらくした後。


(;´Д`)<あの、またちょいとお時間頂きたいのですが
( ´∀`)<おげ
(;´Д`)<こんな構成でよいのかどうか。。。
( ´∀`)<大方おっけーだよん。おいらはDB設計の仕方を教えてあげられるけれども、
      仕様は自分のほうが知っている。まだ隠された情報があるのなら変わる怖れはあるにしろ、
      今まで聞いた分だとこれでよいと思われ。
      ってさっき言ったろ。
(;´Д`)<え、は、はい・・・・・・。
( ´∀`)<ん?ってことは・・・・・・まさかっ。


毒をくらわば皿まで。乗りかかった船。袖すりあうも多少の縁。ってな言葉がありました。


!( ゚Д゚)<ええぃ。わかったキッチリきいたる。
(;´Д`)<お、おねがいします。


そうしてその日。合計約2時間を費やしDB設計支援を行いましたとも。
もはやぬかりなし。
仕様の確認事項もキッチリさせた上で。


( ´∀`)<ところで今までこれになんぼほど時間かけてたの?
(;´Д`)<えっと、今日で3日目です。
( ´∀`)<図も書かずにやるのと書いてやるのの違いはどぅよ?
(;´Д`)<よ〜〜くわかりました。