リレーションを設定するためのSQLは、今回のテーマではありません。そのため、リレーションについての詳しい説明は、次回以降に譲ることにします。ただ、ここで「なぜ在庫数を別のテーブルに記録するのだろう?」と疑問に思う人がいるかもしれないので、その点だけ補足しておきます。
- 更新頻度の違いに注目 - まず、
商品の基本情報と在庫数とは、性質が異なる
という点を理解しておいてください。
ある商品の名称や単価、仕入先などの情報が書き換えられるのは、その商品の仕様が変更されたり、価格や仕入先が変わったりした場合です。当然、そのようなことは滅多に発生しません。
しかし、商品の在庫数は販売や仕入があるたびに変化します。つまり、商品の在庫数とその他の基本情報とは、「更新される頻度が極端に違う」ということです。
テーブルには、商品や仕入先、得意先など「その内容が滅多に書き換えられない基本情報――マスターテーブル」と、販売や仕入れ記録のように「業務を遂行することで常に書き換えられる情報――取引テーブル」とがあると説明しました。在庫数という情報は、
商品という基礎情報に付随する情報 であるにもかかわらす 販売や仕入などの業務遂行によって常に更新される情報 でもある
のです。
- マスターは滅多に書き換えない - 日々の業務遂行によって書き換えられる情報を、滅多に書き換えられないマスターテーブルに組み込んでしまうと、
マスターテーブルが頻繁に更新される
ことになってしまいます。
データベース処理においては、「マスターテーブルはできるだけ書き換えない」ことが重要です。なぜなら、マスターテーブルは「いつでも、どのアプリケーションからでも参照される重要なテーブル」だからです。商品の価格改定や取引先の住所変更などマスターテーブルを書き換える処理は「マスターテーブルの保守」と呼ばれ、他の一般的な業務とは異なる流れの中で行われるのが普通です(通常は、データベースの管理者や業務の責任者だけが書き換えます)。
商品の基本情報を記録するマスターテーブル(サンプルでは「商品_mr」)に在庫数を記録していると、その鉄則が崩れてしまいます。マスターテーブルは様々なアプリケーションから参照されるため、それが時々刻々と発生する業務処理によって頻繁にアクセスされ、まして内容を書き換えられるとなると、データベースの処理効率が著しく低下します。
- マスターをエラーから保護する - また万一、在庫数を書き換える処理の途中でエラーが発生してデータベースの内容が壊れたりすれば、目も当てられない状況となります。そのような危険を最小限に押さえるためにも、マスターテーブルは複数のアプリケーションから書き換えられるようにしてはいけません。
そのため、業務の遂行によって頻繁に書き換えられる在庫数のような情報は、マスターテーブルとは切り離して別テーブルとしておくのが安全なのです。
同じようなケースに、社員の基本情報(氏名、住所、所属、基本給など)と健康診断の結果(身長、体重、視力など)や地方税、年休消化率などを切り分ける――といった考え方があります。
|
|
|