Ognacの雑感

木漏れ日々

目次

Blog 利用状況

書庫

ギャラリ

関連項目の多いテーブルはSQL文で処理して欲しい

給与計算などのシステム項目の特性の関係で第三正規化で設計することが多いです。
一人分のデータを構成する要素がやたらと多くなるのが特徴です
 名前/個人IDなどの社員マスター的なマスタ項目
  本給/通勤手当/家族手当などの加給項目...これは個人個人で異なるので0項目からn項目必要です。
  組合費/健康保険/住民税などの控除項目...これも個人個人で異なります。
   (社会保険などもあるのですが割愛)
加えてヤヤコシイのは家族手当や組合費といった項目は不定項目でテーブルで項目としてきめ打ちすると応用が利かなくなります。
つまりタイトルも個人個人異なるわけです。第三正規化で最小の単位に分解してデータを保持するのがDB上都合が良いわけです。
 (*) (DBでも List( of  dictioary(title,Money) ) のinstanceが使えればもう少し楽になるかもしれません)

第三正規化したときに問題になるのがパフォーマンスです。
非正規化する時に遅い時には第二正規化に戻すこともありますがそれは、DBの世界でSQL文(ストアード)で書いても遅い場合です。(これも割愛)

 さて上記の給与の例です。、
aさんの場合の加給項目10項目,控除項目12項目あるとします。
 関連Tableの引用は 社員マスター1レコード
         加給項目.項目.10レコード
         加給項目.金額.10レコード
         控除項目.項目.12レコード
         控除項目.金額.12レコード
 最低, 1+10+10+ 12+12 = 45 レコードを引用して初めて Aさんのデータが作られるわけです。

  SQL1文で極端な例として書くと
select Fld1,fld2....
   from 社員マスター M
   left outer join 加給項目マスター KT on M.code =  KT.Code and KT.NO=1
   left outer join 加給項目マスター KT on M.code =  KT.Code and KT.NO=2からn
   left outer join 加給金額マスター KT on M.code =  KT.Code and KT.NO=1
   left outer join 加給金額マスター KT on M.code =  KT.Code and KT.NO=2からn
   left outer join 控除項目マスター KT on M.code =  KT.Code and KT.NO=1
   left outer join 控除金額マスター KT on M.code =  KT.Code and KT.NO=2からn
   (left outer join句が45回続く)
となります。(実際はもっと工夫するわけですが)

この処理をSQL文で処理しないで、C#/VBなどのクライアント言語で処理すると 45回IOが発生することになり、処理が遅くなります。
ところが、業務要件を説明して製造の細部を指示しなければ、昔のISAM見たいにC#(VB)の中で45回ループするプログラムが上がって来たりします。
速度コストの差はかなりでます。
 VBのソースを見ると
   dim sql as string = ""
      sql +=" select fld1,fld2........."
      sql +=" from 社員マスター where cd ='" + ID + "'"
      // 社員マスター引用
      ....
      sql = "select 加給1  ... from 加給マスタ where id ='" + ID + "'"
      //加給マスター20回繰返し
      ...
      sql = "select 控除1  ... from 控除マスタ where id ='" + ID + "'"
      //控除マスター20回繰返し
      ...
となっている。クラクラしてきた。自分で遅くなるソースを書いておいて、IO回数が多いので処理が遅いのは当然ですと仰られる。
(最低でも where id='" + ID + "'" と書かずに  where id=@id  と書いて欲しい。SQLインジェクションすら意識されていない。パラメータクエリの便利さが判ってのかな。)

(一部の)PMさん、SEさん...実装技術を知らないと処理の遅い低品質プログラムの非を見抜けませんよ。品質問題で顧客から睨まれるのはご自分ですよ。
(一部の)PGさん、 outer joinをいくつ繋げても DBはきちんと処理してくれるし、SQL(ストアード)を活用することを理解してね。

投稿日時 : 2007年10月1日 0:07

Feedback

# re: 関連項目の多いテーブルはSQL文で処理して欲しい 2007/10/01 1:21 かつのり

うわぁ・・・でもよく見ますね。
こういうコードを書く馬鹿が世間からの「技術者」の評価を下げているんでしょうね。

# re: 関連項目の多いテーブルはSQL文で処理して欲しい 2007/10/01 10:57 凪瀬

仕様を書くのにプログラムの知識がいらないと思っている会社とかで遭遇率高そうですね。

# re: 関連項目の多いテーブルはSQL文で処理して欲しい 2007/10/01 12:32 HiJun

RDBMSを理解していないから、こんな風になって
しまうんでしょうね。

# re: 関連項目の多いテーブルはSQL文で処理して欲しい 2007/10/01 14:19 Ognac

>こういうコードを書く馬鹿が世間からの「技術者」の評価を下げているんでしょうね。
>仕様を書くのにプログラムの知識がいらないと思っている会社とかで遭遇率高そうですね。 Remove Comment 98858
>RDBMSを理解していないから、こんな風になって

コメントありがとうございます。まことにその通りで自分からデスマーチーへの道を作っている感があるのですが。
プログラムの品質をチェックできない設計者の存在ってなんだろうっていつも思います。
PMさんは折衝で忙しいので望むのは酷かも知れませんが、SEには開発力を望みます。
この問題は、凪瀬 さんの提示された労働時間の件とも絡むと思うのです。拘束時間ので仕事を考えるから、品質には注意が行かないじゃないかなって。
PM/SEはPGの自己申告の開発工数を鵜呑みにした例として、 普通のPGなら2ヶ月位で仕上げられる仕事をPGのAさんは10人月と報告しました。そのまま見積もって顧客に提示したら、そのままGOサインが出た。というのがあります。
それこそ詰めて開発すれば 20日程度の物です。どこからも文句が出てないので好いのかも知れませんが、誰も妥当性をチェックできないのが悲しい。
エントリーした例では、10秒単位で終わりそうな処理が2~4分要してます。SEは顧客に、データ構造が複雑なのでこれ位は早いほうですと説明していた。
顧客も「しゃーないな。終わるのをまってるは」と言ったとか。
まともな人がいないプロジェクトってどんなんだぁ。

# re: 関連項目の多いテーブルはSQL文で処理して欲しい 2007/10/01 17:27 Mr.T

Mr.Tです、こんにちは。

こ、これはVBっぽいwww
なんでもかんでもストアドにする必要もないでしょうが...

>誰も妥当性をチェックできないのが悲しい。
妥当性をチェックするGメンのようなものはあれば...

>まともな人がいないプロジェクトってどんなんだぁ。
とりあえず、その人月でもあっぷあっぷしているような気がします。

# wjWefiFGQJqty 2014/07/19 21:27 http://crorkz.com/

kt1v4k I think this is a real great blog. Great.

# pYPZoanhcFP 2014/07/27 3:57 http://www.livetechnews1.com/

Thanks again for the article.Much thanks again. Much obliged.

# cLwrElZKTPlmSxSPWg 2014/09/06 22:28 http://superandroides.com/2014/09/galaxy-note-4-y-

Wonderful web site. Lots of useful info here. I'm sending it to several friends ans also sharing in delicious. And obviously, thanks to your effort!

# bDpOvfoDFcTx 2014/09/11 7:55 http://theboatonlinestore.es/

This web site is mostly a stroll-by way of for all the info you wished about this and didn't know who to ask. Glimpse here, and you'll undoubtedly uncover it.

# mwLngulyBdwbhwygM 2014/09/16 8:31 http://ecommerce-for-business.com/

I'd need to check with you here. Which is not something I often do! I enjoy studying a publish that will make folks think. Also, thanks for allowing me to remark!

# bvhiAWgXFaNCHXjm 2014/09/18 16:26 http://eurodesignandgraphics.info/story.php?id=192

KbMcgF Thanks so much for the blog.Really looking forward to read more. Great.

# Your style is so unique in comparison to other people I've read stuff from. Many thanks for posting when you've got the opportunity, Guess I will just bookmark this site. 2018/09/21 1:49 Your style is so unique in comparison to other peo

Your style is so unique in comparison to other people I've
read stuff from. Many thanks for posting when you've got the opportunity,
Guess I will just bookmark this site.

# Excellent blog you have here.. It's hard to find high quality writing like yours these days. I really appreciate individuals like you! Take care!! 2018/10/01 13:06 Excellent blog you have here.. It's hard to find h

Excellent blog you have here.. It's hard to find high quality writing like
yours these days. I really appreciate individuals like you!
Take care!!

# Because the admin of this web site is working, no hesitation very quickly it will be well-known, due to its feature contents. 2018/10/23 4:43 Because the admin of this web site is working, no

Because the admin of this web site is working, no hesitation very quickly it will
be well-known, due to its feature contents.

# I like what you guys are up too. This kind of clever work and coverage! Keep up the wonderful works guys I've added you guys to my own blogroll. 2018/10/28 21:45 I like what you guys are up too. This kind of clev

I like what you guys are up too. This kind of clever work
and coverage! Keep up the wonderful works guys I've added you guys to my own blogroll.

# Howdy, I believe your web site might be having browser compatibility issues. When I take a look at your website in Safari, it looks fine but when opening in IE, it has some overlapping issues. I simply wanted to provide you with a quick heads up! Apart 2018/11/11 3:24 Howdy, I believe your web site might be having bro

Howdy, I believe your web site might be having browser compatibility
issues. When I take a look at your website in Safari, it looks fine but
when opening in IE, it has some overlapping issues.
I simply wanted to provide you with a quick heads up!
Apart from that, excellent site!

# There's certainly a lot to know about this topic. I like all of the points you made. 2018/11/19 0:11 There's certainly a lot to know about this topic.

There's certainly a lot to know about this topic.
I like all of the points you made.

# ロレックス エクスプローラ1 偽物 2022/08/31 17:04 pwgjwkta@hotmail.co.jp

超人気クリスチャンルブタンクリスチャンルブタン通販超N品シューズ超N品
ロレックス エクスプローラ1 偽物 https://www.b2kopi.com/product/detail.aspx-id=6641.htm

タイトル
名前
Url
コメント