2020年1月2日木曜日

システムの費用対効果 〈 データモデリング 〉

データの横持ち、縦持ちという言葉、ピンと来るでしょうか?


例えば在庫テーブルで、商品単位の数量、金額を以下のように1レコードで表現していれば横持ちです。

|決算期|商品コード|期首数量|期首金額|受入数量|受入金額|払出数量|払出金額|期末数量|期末金額|

一方、受払区分に期首、受入、払出、期末を入れて、複数レコード(4レコード)で表現することもできます。正規化の原則に則っていますが、抽象度が上がるし大袈裟かもしれません。ダンプした時、データが見づらくなるので、ユーザーのウケがよくなかったりします。

|決算期|商品コード|受払区分|数量|金額|

どちらでも、同じことを表しているのですが、処理性能や将来の要件拡張に大きな違いがでます。拡張性は、縦持ちが有利なのはわかりやすいですね。区分を追加するだけですから。処理性能は、いっぺんにデータを取得できる横持ちのほうが良いかというと、そうとも限りません。通常データベースはアップデートのコストがインサートのコストよりもかかるので縦持ちのほうが性能が良かったりします(インデックスが張られている前提です)。
縦持ち、悪くありません。ところが、だいたいみなさん横持ちで設計するのですよ・・・。

付け足すと、異機種間結合で苦労するのも、この横持ち、縦持ちです。実際は上の例の受払区分にあたるところに、判断ロジックが組み込まれたりします。情報系ならまだしも業務系で横持ちと縦持ちが入り混じると収拾困難です。はっきり言えば ”動かないシステム” になります。これは避けなければいけないことです。
永島志津夫

全社のシステムを少ない人数で見ていれば時に見落としもあるかもしれません。
オフィスエヌ ショートレビュー5万円から
連絡先 office.nagasima#gmail.com (#を@に変えてメールをお願い致します)