データベース千夜一夜第10回

テーブルの関連付けとサブクエリによる条件の抽出 長谷川裕行
有限会社 手國堂

マスターテーブルから在庫数を切り分ける理由

リレーションを設定するためのSQLは、今回のテーマではありません。そのため、リレーションについての詳しい説明は、次回以降に譲ることにします。ただ、ここで「なぜ在庫数を別のテーブルに記録するのだろう?」と疑問に思う人がいるかもしれないので、その点だけ補足しておきます。


- 更新頻度の違いに注目 -

まず、

    商品の基本情報と在庫数とは、性質が異なる

という点を理解しておいてください。

ある商品の名称や単価、仕入先などの情報が書き換えられるのは、その商品の仕様が変更されたり、価格や仕入先が変わったりした場合です。当然、そのようなことは滅多に発生しません。

しかし、商品の在庫数は販売や仕入があるたびに変化します。つまり、商品の在庫数とその他の基本情報とは、「更新される頻度が極端に違う」ということです。

テーブルには、商品や仕入先、得意先など「その内容が滅多に書き換えられない基本情報――マスターテーブル」と、販売や仕入れ記録のように「業務を遂行することで常に書き換えられる情報――取引テーブル」とがあると説明しました。在庫数という情報は、

    商品という基礎情報に付随する情報
    であるにもかかわらす
    販売や仕入などの業務遂行によって常に更新される情報
    でもある

のです。


- マスターは滅多に書き換えない -

日々の業務遂行によって書き換えられる情報を、滅多に書き換えられないマスターテーブルに組み込んでしまうと、

    マスターテーブルが頻繁に更新される

ことになってしまいます。

データベース処理においては、「マスターテーブルはできるだけ書き換えない」ことが重要です。なぜなら、マスターテーブルは「いつでも、どのアプリケーションからでも参照される重要なテーブル」だからです。商品の価格改定や取引先の住所変更などマスターテーブルを書き換える処理は「マスターテーブルの保守」と呼ばれ、他の一般的な業務とは異なる流れの中で行われるのが普通です(通常は、データベースの管理者や業務の責任者だけが書き換えます)。

商品の基本情報を記録するマスターテーブル(サンプルでは「商品_mr」)に在庫数を記録していると、その鉄則が崩れてしまいます。マスターテーブルは様々なアプリケーションから参照されるため、それが時々刻々と発生する業務処理によって頻繁にアクセスされ、まして内容を書き換えられるとなると、データベースの処理効率が著しく低下します。


- マスターをエラーから保護する -

また万一、在庫数を書き換える処理の途中でエラーが発生してデータベースの内容が壊れたりすれば、目も当てられない状況となります。そのような危険を最小限に押さえるためにも、マスターテーブルは複数のアプリケーションから書き換えられるようにしてはいけません。

そのため、業務の遂行によって頻繁に書き換えられる在庫数のような情報は、マスターテーブルとは切り離して別テーブルとしておくのが安全なのです。

同じようなケースに、社員の基本情報(氏名、住所、所属、基本給など)と健康診断の結果(身長、体重、視力など)や地方税、年休消化率などを切り分ける――といった考え方があります。



トップページ
新しいデータベースとリレーションの設定
マスターテーブルから在庫数を切り分ける理由
更新頻度の違いに注目
マスターは滅多に書き換えない
マスターをエラーから保護する
サブクエリによる条件の抽出
あとがき
Copyright © MESCIUS inc. All rights reserved.