【DAMA-J 分科会】データモデルの汎化粒度について

2011年10月20日に開催されたDAMA日本支部(以下DAMA-J)の第4分科会に出席してきました。この日は自宅からSkypeでの参加です。(会場の様子をスナップショットとるの忘れた・・・)
今回はタイトルのとおり「データモデルの汎化(特化)」がテーマでした。分科会での議論の内容というよりも、この「汎化/特化」について簡単に考査してみます。
データモデルの汎化と特化
例えば同じ【顧客】であっても個人顧客と法人顧客で提供するサービスや業務の運用が異なるのであれば、【個人顧客】エンティティと【法人顧客】エンティティに具体化して管理します。(特化)
また、この2つのエンティティの上位タイプ(スーパータイプ)として【顧客】エンティティに抽象化して管理した方が良い場合もあります。(汎化)

20111030_DataModel-1.png

このように汎化することにより、特定のエンティティを洗い出したりビジネス・ルールや運用を検討する際の助けになります。
上記の【顧客】の例はエンティティの「分類」によってスーパータイプ/サブタイプを定義した例ですが、エンティティの「状態」によってスーパータイプ/サブタイプを表現することもあります。
ちなみに今回の分科会で発表された運送業のデータモデルは、積荷の状態に応じてサブタイプを定義したものでした。

状態を表すスーパータイプ/サブタイプの例
20111030_DataModel-2.png

メリット/デメリット
データモデルを汎化することによるメリットとしては次のようなものがあります。
●エンティティをタイプ別に分類できる:
これにより、サブタイプ固有の属性を持たせたり、逆にサブタイプ同士の共通要素を認識することができます。
●モデルの論理性を明確にできる:
エンティティの分類や状態の変化をモデルとして「見える化」することで、その論理性が明確になります。
●変換に強いモデルが表現できる:
将来的にビジネス・ルールや運用に変更が発生しても、モデルを汎化しておくことで影響箇所を最小限にとどめることが可能です。
●他の案件に適用できる:
同じ業務領域であれば、他の顧客のデータモデリングにも流用が可能です。
逆にデメリットは、
●汎化モデルを作成する時間・コスト的な制約
●実装方法によってはクエリが複雑になる場合がある
といったところでしょうか。
実装
このようにスーパータイプ/サブタイプとして表現したデータモデルを実装する場合は以下の3とおりの方法が考えられます。
●ロールアップ:
エンティティをスーパータイプに統合します。
●ロールダウン:
サブタイプごとにエンティティを分割します。
●依存リレーションシップの作成:
スーパータイプ/サブタイプとして表現したデータモデルをそのままの形で実装します。
最後に
Skypeでの参加ということもあって、あまり詳細な議論には入り込めませんでしたが、データモデルを汎化することの重要さを気づかせてもらったという意味では、非常に有意義な分科会でした。
現地のプロジェクタで投影したスライドをカメラで中継してもらうという方式だったのですが、細かい字が読みにくいなどSkype参加に関する課題事項も見えてきました。資料についてはデスクトップ共有等やりようはあると思いますので、今後に向けて改善していきたいと思います。
(終)


** 参考図書 **