ERモデリングレッスン1(全体集合と部分集合)

連載記事では、概念モデリングの基本的なパターンを紹介しているが、基本的にUMLのクラス図を使って表現している。しかしビジネスアプリケーションのほとんどは、リレーショナルデータベースを利用するため、概念モデルとして描いたクラス図も、最終的にはRDB構造にマッピングする必要がある。

可能なら記事の中でERモデルについても紹介したかったが、紙面の制約から難しかった。このためこのblog上で、概念モデリングの基本パターンをERで表現したモデルを紹介していこうと思う。これは以前書いたDOAとOOAを比較するエントリの続きとして、両者の違いを具体的な形で議論する意味もある。

ここで紹介するモデルの形式はクラス図だが、内容は識別子を明示したER図である。



まず今回は、第1回の記事で紹介した「全体集合と部分集合」のERモデルを紹介する。UMLのクラス図と、ベン図表現は次の通り。


この全体集合と部分集合の関係は、基本的にはER図ではそのまま表現できない。これは表形式を基本とするリレーショナル理論が、「似て非なる部分集合」を直接表現できないためである。

全体集合と部分集合の関係をER図で表現する方法としては、大きく分けて次の3つの方法がある。

1) 親子テーブル分離方式

全体集合と部分集合固有部分を別テーブルに分けて表現する方法である。全体集合と部分集合の識別子は同じにする。RDBの正規化理論に従った、最も自然なERモデルといえる。リレーショナル理論からすると、このような全体集合と部分集合の考え方はないが、渡辺幸三さんの三要素分析法や椿正明さんのPLAN-DBなどのDOA方法論では「派生関係」として特別に区別している。
この方式の場合、部分集合の情報にアクセスするときには、全体集合のテーブルとの表結合(JOIN)が発生する。

2) 独立子テーブル方式

全体集合はテーブル化せず、部分集合だけをテーブルとして表現する方法である。全体集合の属性は部分集合で重複定義する。この方法の場合、全体集合をVIEWを使って定義することは可能である。部分集合をまたがって識別子を一意にしたい場合、アプリケーションロジックで制御する必要がある。

3) 親テーブル統合方式


すべての部分集合を1つのテーブルに統合してしまう方法である。部分集合で固有な属性は統合テーブルにすべて定義し、必要のない属性はNULLを設定する。この方式の場合、どの部分集合であるかを識別するための区分コードを設定するのが常套手段である。(上の例の「個人法人区分」がそれに相当する)。また各部分集合用にVIEWを定義すれば、アプリケーションからは個別の部分集合として扱うことが可能になる。