ここからは,DOAの中核を成すデータ・モデリングの手法を解説する。まず,データ・モデリングで主に利用されるER図について説明しよう。

 一口にER図と言っても先述したIEに加えて,米国のNIST(National Institute of Standards and Technology)が1990年代初頭に標準化した「IDEF1x(アイデフワンエックス)」や,佐藤正美氏が提唱した「T字型ERモデル」,椿正明氏と穂高良介氏の「THモデル」など,表記法には様々なタイプがあるが,以下ではIEの表記法に基づいて解説する。最もメジャーな表記法なので,ER図によるデータ・モデリングの基礎を知るのに最適と考えるからだ。筆者も,IEの表記法を日常的に使用している。

 ER図の構成要素は大きく2つある。1つは,データ項目の集まりであるエンティティ。もう1つは,エンティティ同士の論理的なつながりを表す「リレーションシップ」だ。

 エンティティは,データ・モデルで最も重要な要素である。RDBに実装する際は1つのエンティティがRDBの1テーブルに相当する。

 図3に示すように,1つのエンティティはボックス(矩形)で表し,ボックスの上にエンティティ名を記述する。システムの管理対象であり,一般には人,物,場所といった実体があり目に見えるものがエンティティの候補となる。それ以外に役割や分類などの「概念」も,エンティティとして表現できる。

図3●ER図による「エンティティ」の表記法
図3●ER図による「エンティティ」の表記法

 エンティティの構成要素であるデータ項目のことを,ER図では「属性(Attribute)」と呼び,矩形の中に列挙する(図3参照)。「社員」エンティティなら,「社員番号」,「氏名」,「生年月日」,「性別」などが属性である。これらがRDBのテーブルの列になる。

 属性の中でインスタンスを重複なく識別できるものを「識別子(Identifier)」と呼び,矩形の一番上に記入する。「社員」エンティティの場合は,「社員番号」がそれに当たる。エンティティをRDBのテーブルに変換する際は,識別子がテーブルの主キー(Primary Key:PK)となる。

 属性に対応する具体的なデータを「インスタンス」と呼ぶ。「社員」エンティティを例にとると,「氏名」という属性に対応するインスタンスは「津村」,「佐藤」といった実在する人の名前である。インスタンスは,RDBの個々のレコードに相当する。

イベント系とリソース系に大別

 エンティティは,大きく「イベント系」と「リソース系」に分類できる。イベント系エンティティとは,発注,購買,出荷などの企業活動に伴って発生する「トランザクション・データ」のことである。エンティティ名は,その後に「する」を付けても意味が通る場合が多い(発注する,出荷するなど)。

 一方のリソース系エンティティとは,イベント系エンティティが参照するエンティティのことで,企業の「マスター・データ」に相当する。例えば人(社員),組織(事業所,部署),物(商品,製品,部品),設備(工場,製造ライン),顧客(取引先,得意先,調達先),金(勘定科目),時間(年月日,時刻)などがリソース系エンティティとなる。

 リソース系のエンティティは,すべてのプログラムが共有するデータであり,企業情報システム全体のインフラとなる。従って全社規模のシステム開発プロジェクトでは,リソース系エンティティをいかに早期に確定,標準化するかが重要となる。

エンティティ間の関係を定義

 ER図のもう1つの構成要素である「リレーションシップ」は,エンティティの定義をより明確にするために,エンティティ同士(実際にはインスタンス同士)のつながりを名前付きの線で示したものだ(図4)。

図4●ER図による「リレーションシップ」の表記
図4●ER図による「リレーションシップ」の表記
エンティティ間の論理的な関係を示すのが「リレーションシップ」である。モデリング対象業務におけるビジネス・ルールも表現できる

 インスタンス同士のリレーションシップには,「1対1」の関係,「1対多」の関係,「多対多」の関係が考えられる。こうしたインスタンス同士の数の関係を「多重性」と呼ぶ。例えば「所有者」エンティティと「自動車」エンティティを,「所有している」というリレーションシップで結ぶとしよう。この場合,所有者エンティティのインスタンス(実在の人間)は,自動車エンティティのインスタンス(実際の自動車)を2台以上所有しているかもしれない。このときは,リレーションシップは「1対多」となる。

 そこでER図では,インスタンスの関係が「1対1」なのか,「1対多」なのか「多対多」なのかを表せるようになっている。具体的には,「1対1」の場合はリレーションシップに短い線を付与し,「1対多」や「多対多」の場合は,「多」の側に鳥の足のような3本線を記述する(図4)。なお,多対多の関係を表す場合,エンティティ間にもう1つのエンティティを挿入するケースも多い。このエンティティを「対照表*5」と呼ぶ(対照表については後述)。

 リレーションシップによっては,あるインスタンスに関係付けられる別のインスタンスが存在しないこともある。関係するインスタンスの有無のことを条件性(condition)と呼ぶ。「役職」エンティティと「社員」エンティティ間の「役職がある」というリレーションシップを考えると,役職には必ず社員が存在するが,社員によっては役職がない場合がある。こうした場合は,関係付けられるインスタンスが存在しない可能性のあるエンティティの側に,○印を記入する(条件付きのリレーションシップと呼ぶ)。

 リレーションシップではないが,エンティティ間の階層関係を示す「サブタイプ(Subtype)」も,ER図の重要な構成要素だ。図4の例では「社員」には「正社員」と「パート社員」がいることを示している。サブタイプを利用することで,複雑なモデルを簡素化して表現できる。

 なお,リレーションシップを表す場合,一方のエンティティの識別子(RDBでは主キーになる)を,もう一方のエンティティに属性として記入し,その後に(FK)と書く。FKとは「外部キー(Foreign Key)」のことだ。例えば,所有者エンティティと自動車エンティティの「1対多」の関係を表すときに,所有者エンティティの識別子(PK)が「所有者番号」だったとすると,自動車エンティティの属性の1つとして「所有者番号(FK)」を記入しておく。RDBに実装する場合は,「所有者番号」を介して2つのテーブル同士が関連付けられることになる。

(次回へ)

津村 泰弘(つむら やすひろ) 新日鉄ソリューションズ ソリューション企画・コンサルティングセンター担当部長
1982年新日本製鐵入社。現在は新日鉄ソリューションズでデータ・モデリングやDOA導入,データ・アーキテクチャなどに関するコンサルティングに従事している