PR

教科書的ではなく、現場にあったデータベース設計のコツ

2006年4月24日(月)
梅田 弘之(うめだ ひろゆき)

受注エンティティに合計金額を持つか


   図4の「受注」エンティティには、「受注金額合計」のような受注合計額をあらわす項目はありません。そのため受注一覧などで受注金額を表示する場合には、次のような計算によって受注明細の金額を集計しなければなりません。
受注金額合計=Σ セット単価 × 数量

   伝票合計金額を表示するのに、毎回受注明細金額の集計計算をするのはちょっと面倒ですし、パフォーマンスにも少し影響を与えます。

   また消費税計算には、「受注明細消費税の積み上げ方式」と「伝票合計金額に消費税率をかける方式」の2つの方法がありますが、いずれにしても消費税計算の度に計算するのはやっかいです。そのため筆者は図4のような正規化ではなく、「受注」エンティティに合計金額を持たせるようにしています。


受注エンティティに顧客名、受注明細エンティティに商品名を持つか


   「『受注』エンティティに『顧客名』、『受注明細』エンティティに『商品名』という項目を持つ」なんていうと、「正規化をまったく知らない人だ」と思いっきり笑われてしまうのがオチです。でも実際の基幹業務システムでは、このようにトランザクションテーブルに名称を持つことも少なからずあります。

   その理由の1つとして「名称変更への対応」があげられます。ビジネス環境が激変する今日では、企業の合併やCI(コーポレートアイデンティティ)活動により企業名が変わることは珍しいことではありません。企業名変更の際には、顧客マスタテーブルの顧客名を変更することになります。

   もしこの時図4のような正規化構造の場合であるならば、顧客エンティティの顧客名を変えるとともに、過去の受注伝票の顧客名も自動に変わってしまいます。その時点の取引はあくまでその時点の企業名で記録しておくべきなので、受注エンティティにも顧客名を用意しておくシンプルな方法も有望でしょう。

   もう1つの理由は「雑コード対応」です。一般に顧客や商品などは、きちんとマスタ登録してから使うのが基本です。しかしケースによっては、マスタ登録を省略して業務処理を済ませたい場合もあります。この例として、見積伝票を入力する際、その場限りと思われる顧客や手配品に対しては顧客マスタや商品マスタを登録せずに処理したい場合があげられます。

   そのようなケースでは画面上でコードだけでなく、顧客名や商品名を入力しますので、値はトランザクションに格納されます。そのようなケースも想定する場合は、受注や受注明細に顧客名や商品名というような項目が必要となるのです。


最後に


   本連載では5回に渡ってデータモデリングやデータベース設計について解説してきました。前半は「Object Browser ER」というツールを使った効率的なデータモデリング、中盤はデータベース設計の基本的考え方、後半は業務システムのデータベース設計で迷うポイントを取りあげました。よくある教科書的な内容ではなく、筆者独自の考え方を述べてきたつもりですが、いかがでしたでしょうか。

   本連載を読んで、データモデリングをデータベース設計に役立てることの意義を理解していただけたらと思います。また、設計で迷うようなポイントについて、考えるきっかけとなれば幸いです。

   まだまだお伝えしたい設計ノウハウがたくさんあるので、またいつか別の機会にお話できればと思っています。最後までお付き合いいただきまして、感謝しています。

著者
梅田 弘之(うめだ ひろゆき)
株式会社システムインテグレータ

東芝、SCSKを経て1995年に株式会社システムインテグレータを設立し、現在、代表取締役社長。2006年東証マザーズ、2014年東証第一部上場。

前職で日本最初のERP「ProActive」を作った後に独立し、日本初のECパッケージ「SI Web Shopping」や開発支援ツール「SI Object Browser」を開発・リリース。日本初のWebベースのERP「GRANDIT」をコンソーシアム方式で開発し、統合型プロジェクト管理システム「SI Object Browser PM」、アプリケーション設計のCADツール「SI Object Browser Designer」など、独創的なアイデアの製品を次々とリリース。最近は、AIを利用したサービスに取り組んでいる。

主な著書に「Oracle8入門」シリーズや「SQL Server7.0徹底入門」、「実践SQL」などのRDBMS系、「グラス片手にデータベース設計入門」シリーズや「パッケージから学ぶ4大分野の業務知識」などの業務知識系、「実践!プロジェクト管理入門」シリーズ、「統合型プロジェクト管理のススメ」などのプロジェクト管理系、最近ではThink ITの連載をまとめた「これからのSIerの話をしよう」「エンジニアなら知っておきたいAIのキホン」を刊行。

「日本のITの近代化」と「日本のITを世界に」の2つのテーマをライフワークに掲げている。

連載バックナンバー

Think IT会員サービス無料登録受付中

Think ITでは、より付加価値の高いコンテンツを会員サービスとして提供しています。会員登録を済ませてThink ITのWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスの概要とメリットをチェック

他にもこの記事が読まれています