TOP設計・移行・活用> データベース設計で迷いやすい点




実践!モデリングツール
即活用!ツールを活用したデータモデリング

第5回:教科書的ではなく、現場にあったデータベース設計のコツ
著者:システムインテグレータ  梅田 弘之   2006/4/24
1   2  3  次のページ
データベース設計で迷いやすい点

   前回はデータベース設計をする際に誰もがぶつかる問題である、「列名に日本語を使うか?」「どのデータ型を使うか?」ということをテーマに取りあげました。今回も引き続き、データベース設計をする際に迷いやすい点をいくつか取りあげてみようと思います。


階層構造のテーブル設計の注意点

   今回は前回と同様、SQL Serverのサンプルデータベース「Northwind」を元にして、データベース設計で迷いやすい点について考えてみましょう。図1は「Northwind」をER図にリバースした中から、エンティティ「商品」「商品カテゴリ」をサブウィンドウで表示したものです。

Northwindの「商品」と「商品カテゴリ」エンティティ
図1:Northwindの「商品」と「商品カテゴリ」エンティティ

   図1のように商品を分類するためにカテゴリコードをつけるエンティティ構造はよくあります。しかし実際の販売管理システムにおいては、このようなフラットなカテゴリ構造は不便です。なぜかというと、一般に商品カテゴリなどは表1のように階層構造で分類する必要があるからです。

01 ハードウェア
         011 パソコン
               0111 本体
               0112 モニタ
         012 プリンタ
               0121 本体
               0122 トナー

02 ソフトウェア
         021 OS
               0211 Windows 2000
               0212 Linux
         022 RDBMS
               0221 Oracle
               0222 SQL Server

表1:階層構造を持った商品カテゴリ


階層構造(親番号方式)

   図2は表1のような階層構造に対応した商品カテゴリの典型的な例です。「親カテゴリ番号」というアトリビュートを追加し、自分の親はどれかという関連情報を持たせています。このような自分の親がわかるエンティティ構造にした場合、表1のパソコン関係の商品カテゴリは表2のようなデータとなります。

階層構造を持った商品カテゴリ(親番号方式)
図2:階層構造を持った商品カテゴリ(親番号方式)

カテゴリ番号 親カテゴリ番号 カテゴリ名
01   ハードウェア
011 01 パソコン
0111 011 本体
0112 011 モニタ

表2:階層構造を持った商品カテゴリ(親番号方式)のデータ

   表2のような親番号指定方式は、よく使われる方法です。しかしパフォーマンス面で難点があるため、カテゴリ数や階層が多い場合にはお勧めできません。なぜなら、カテゴリ数が増えてしまうと検索方式が再帰型になってしまうからです。

   例えば、表2において「パソコン(カテゴリ番号 011)関連の商品の売上合計を求める」必要があったとします。この場合、対象となるカテゴリは自分の祖先(親、親の親、親の親の親…)に「011 パソコン」が含まれるものになります。図2で考えると、「011 パソコン」配下のカテゴリがすべて対象になるので、「0111 本体」や「0112 モニタ」にひも付く商品の売上がすべて集計されることになります。

   図2のように自分の親だけしかひも付き情報を持っていない場合は、再帰型で祖先に「011 パソコン」が存在するかどうかを探す必要があります。表2程度の階層の深さならよいのですが、階層が深い場合は検索速度が極端に遅くなってしまいます。

1   2  3  次のページ


システムインテグレータ  梅田 弘之
著者プロフィール
株式会社システムインテグレータ  梅田 弘之
東芝、住商情報システムを経て1995年にシステムインテグレータ社を設立。 常駐・派遣主体の労働集約的な日本のソフトウェア業の中で、創造性にこだわってパッケージビジネスを行っている。 国際競争力のない日本のIT産業が、ここから巻き返しを図るための切り札は「プロジェクト管理」だと信じ、実践的なプロジェクト管理手法「PYRAMID」を自社開発している。


この記事の評価をお聞かせください
ボタンをクリックしますとウインドウが開きます。
ご意見、ご要望にお応えします! インプレスIT INSIDE

INDEX
第5回:教科書的ではなく、現場にあったデータベース設計のコツ
データベース設計で迷いやすい点
  階層構造(パス方式)
  受注エンティティに合計金額を持つか
即活用!ツールを活用したデータモデリング
第1回 ソフトウェア産業に産業革命を起こすデータモデリング
第2回 ERの基礎知識とツールの活用法
第3回 日本語名の是非とデータ型採用方針
第4回 制約の使い方、Unicode使用可否、明細テーブルの設計
第5回 教科書的ではなく、現場にあったデータベース設計のコツ
即活用!業務システムの開発ドキュメント標準化
第1回 開発ドキュメント体系と業務フロー
第2回 機能一覧表とI/O関連図
第3回 基本設計書
第4回 詳細設計書(前半)
第5回 詳細設計書(後半)
第6回 単体テスト仕様書&報告書
第7回 結合テストと総合テスト
第8回 要求仕様書の標準化プロセス
「即活用!企業システムにおけるプロジェクト管理」
第1回 プロジェクト管理力を強化するための具体的プラン
第2回 PMBOKをベースにしたプロジェクト管理の管理
第3回 スコープ管理とスケジュール管理
第4回 コスト管理の構造と見積手法
第5回 品質管理
第6回 組織管理
第7回 コミュニケーション管理
第8回 リスク管理
第9回 調達管理(外注管理)

Think IT 過去人気記事

注目おすすめ情報

Think IT人気ライター BEST 5

IT製品/サービス資料ダウンロード
    おすすめのホワイトペーパー情報を準備中です