プログラマ ずんべ の日記

zunbe

プログラマ ずんべ の日記
プログラマ ずんべ の日記

探し物は見つかりましたか? サイト内検索を試してください。

関連Blog? 関連Blog? (その17) それはNULLじゃないのか? (その17) それはNULLじゃないのか?

2005/09/27

【若いモンの発想はわからん】(その16) 平均値の計算

CSVデータからデータベースに投入するプログラムを作らせた。
仕様はこうだ。

 (1).観測局が10地点あり、1時間毎の観測値(1時間値)がCSVファイルに記録されている。
   CSVのフォーマットは以下の通り。

   -----
   観測局コード,観測年月日,観測時刻,観測値
   -----

 (2).CSVファイルを読み込みデータベースに投入する。
   テーブル構造は以下の通り。

   -----
   観測局コード   PKEY
   観測年月日+時刻 PKEY
   観測値種別    PKEY
   観測値
   -----

   このうち、PKEY と記載されている列がプライマリ・キーである。
   「観測値種別」には、「1時間値」と「日平均値」がある。

 (3).投入は以下の通り行う。

   (a).1時間値は、CSVデータに格納されている値をそのまま投入する。
   (b).日平均値は、当該観測年月日の平均値を求めて投入する。
     その際、時刻には「00:00:00」を設定する。

社員は、この仕様において、日平均値の計算で以下の様な処理を書いた。

 ・同じ「観測年月日」のデータをすべて(全観測局分)積算して、平均値を求めて投入。

  たとえば、以下の様なデータの場合…

  ----- CSVファイル -----
  1,20050927,00,100
  1,20050927,01,110
  1,20050927,02,120
  2,20050927,00,200
  2,20050927,01,210
  2,20050927,02,220
  -----

  日平均値は 160。
  データベースには以下の様に投入される。

  ----- データベース -----
  1,2005-09-27 00:00:00,1時間値,100
  1,2005-09-27 00:01:00,1時間値,110
  1,2005-09-27 00:02:00,1時間値,120
  1,2005-09-27 00:00:00,日平均値,160
  2,2005-09-27 00:00:00,1時間値,200
  2,2005-09-27 00:01:00,1時間値,210
  2,2005-09-27 00:02:00,1時間値,220
  2,2005-09-27 00:00:00,日平均値,160
  -----

ぜんぜんダメである。
どうして、すべて観測局の値から平均値を求めるという発想になるのだろうか。
データベースのプライマリ・キーは、「観測局コード」「観測年月日+時刻」「観測値種別」だ。
すなわち、「観測局コード」「観測年月日+時刻」「観測値種別」を基準に集計されなければならない事を意味している。
どう考えても、すべての観測局のデータを積算して平均値を求めるのはおかしい。

確かにずんべは、「平均値を求めよ」としか指示していない。
しかし、この程度の事は、いちいち指示されなくとも、適切に実装できるべきである。



このエピソードはいかがでしたか?

投稿者 zunbe : 2005/09/27 03:59:41


トラックバック 〔http://blog.zunbe.com/mt/mt-tb.cgi/12〕

コメント

若いという社員さんがどの程度の経験を今までにつまれているのかわからないのでなんともいえませんが、たぶん経験がなかったもしくは不足していたのではないでしょうか。

今回以降も同じことで同じ間違いを繰り返すようならナニですが、最初は丁寧親切すぎるぐらいの指示説明をだしてやってもよいのではないかと思いまする。

指示出す側が大変ですけどもね。。。

投稿者 NOBU! : 2005/09/27 05:30:43

ひいき目にみてやりたいところですが、彼の経験年数は既に3年以上なんです。
うちの会社に来て、3年以上になります。
データベースのプログラムも3年以上です。

このブログに掲載している「若いモンの発想はわからん」のエピソードはすべて、経験年数3年のプログラマのお話なんですな。
ひいきめに見てやることはできないのであります。

投稿者 ずんべ : 2005/09/27 05:37:41

 この処理って、頻繁に行われるんでしょうか?
 僕なら

 ・DBサーバーが速い
 ・投入処理中は、DBサーバーの負荷がそれほど高くない

という程度の条件なら、日平均はDB上でSQLで計算したいです。(手抜き)
 DBMSにもよりますが。


 DBへの投入時の負荷を下げなきゃいけないなら、この方法はNGですけどね。

投稿者 GOTTi : 2005/09/27 06:43:07

いえ、今回限りの一発投入プログラムです。
また、特にサーバ負荷も気にしません。

言われる通り、CSVデータを、そのままの形式で一旦仮テーブルに投入し、その上で計算するというのはまったく問題ないと思います。
それどころか、1時間値にしても日平均値にしても、仮テーブルから、そのまま INSERT INTO hoge SELECT … で投入すればいいと思います。
ゴリゴリとプログラムなんぞ書かなくても、SQL一発で投入できるでしょう。

残念な事に、うちの社員の場合、そういった発想がまったく出てこないのですな。

投稿者 ずんべ : 2005/09/27 07:10:10

DBのプログラム3年と聞いて脱力。
3年もやっているのなら、もう少しこうなんとかして欲しいと思われる気持ちはよくわかりました。はい。。。

投稿者 NOBU! : 2005/09/27 08:03:10

そうなんですね。
自分でサーバ立ち上げるとか、自分でシェアウェアでも作って出すとか、そのくらいの事はするべきだと思うのだが、まったくやる気が無いようで…。
困ったもんです。

投稿者 ずんべ : 2005/09/27 08:44:53


コメントしてください






保存しますか?


スパム対策:
この入力フィールドに「116」と入力してください。


プログラマ ずんべ の日記:ずばヒット アマゾン