忘れていたわけじゃないよ
こんにちは、皆さん頑張って設計していますか?
少し前のブログで、リレーションシップの使い分けについてご紹介したことがありますが、じつはもう一つ、サブタイプリレーションシップなるものが存在します。若干毛色が違うので当時は説明を省いておりましたが、今回はこのサブタイプリレーションシップについてご紹介していきます。
サブタイプリレーションシップのモデリング方法 基礎編
では、サブタイプリレーションシップの説明から入りたいと思います。まず前提として、サブタイプリレーションシップは基本的には論理設計時に使用する論理情報となります。(後述しますが、物理モデルで使えないわけではありません。)
SI Object Browser ER(以下OBER)のヘルプから該当する部分を抜き出してみました。
「あるエンティティから、他のいくつかのエンティティにリレーションシップを設定する場合に、親エンティティの内容によって関連するエンティティが分類分けできるケースがありますが、このような時使用するのがサブタイプリレーションシップです。」
・・・まだちょっとよくわからないですね。ここは手っ取り早くER図で説明します。
サブタイプリレーションを用いたモデル
サブタイプの説明でよく出てくる社員を表現したER図です。親である社員マスタにぶら下がるように、正社員とパート・アルバイトエンティティが定義されています。スーパータイプと呼ばれる社員マスタには基本となる項目が定義されており、サブタイプとなる正社員とパート・アルバイトにはそれぞれ固有の項目が設定されているのがわかります。これが「親エンティティの内容によって関連するエンティティが分類分けできるケース」となるわけです。
サブタイプリレーションシップのモデリング方法 「確定」「未確定」
つづいて「確定」と「未確定」のお話です。これは、サブタイプの状況を表しています。上記の図で言いますと、社員の分類がサブタイプにある「正社員」と「パート・アルバイト」で確定する場合(それ以外のの社員の種類がない場合)を「確定」、この二種類だけとはかぎらない場合を「未確定」と呼びます。
確定の場合は枝分かれ元の横線が2本、未確定は1本で表現します。
未確定は1本
サブタイプリレーションシップのモデリング方法 OBERでやってみよう
当然、OBERでもサブタイプの設計が可能です。まずはスーパータイプに当たる社員マスタ、サブタイプの正社員、パート・アルバイトを用意します。
エンティティを配置
上部ツールバーからアイコンを選択し、まずは社員マスタと正社員をつなげましょう。操作方法はリレーションシップ設定と全く同じです。アイコンも実は他のリレーションの並びにあります。
片側を設置
続いてもう片方に引きます。もう一度アイコンをクリックしてリレーションシップを設定するのですが、ここで注意点が一つ。引きはじめの起点は、分岐点であるになります。親エンティティから直接引くことは可能ですが、この場合正社員とパート・アルバイトは別種のサブタイプという扱いになります。今回の場合は同種のサブタイプですので、ドラッグ開始位置には注意しましょう。
ドラッグ開始位置に注意
確定・未確定の設定は上で右クリック、「オブジェクトの編集」で行います。選んだものによって、線が2本(確定)か1本(未確定)か切り替わります。
オブジェクトの編集
[RELATED_POSTS]
サブタイプリレーションシップのモデリング方法 まとめ
いかがでしたか。今回はサブタイプリレーションシップについてご紹介いたしました。今回の例ですと、社員について計3つのエンティティを用意して表現しましたが、実際には社員マスタテーブル一つだけで、内部で社員区分などを用いて表現することが多いかもしれません。
しかし、このサブタイプの考え方を物理環境に持ち込むメリットもあります。例えば、正社員とパート・アルバイトそれぞれに固有の項目が多数ある場合、テーブル1つで管理すると不必要なNULLデータが大量に投入されたり、片方にとっては必須項目である場合に意味のないダミーデータの投入を強いられたりする問題がありますが、サブタイプ化しておけばこの問題は解消できます。最近ではあまり意識しないかもしれませんが、データ量節約にもつながるでしょう。
反対にデメリットを上げるならば、データ参照にJOINが必要になることです。今回のように1階層ではなく、いくつかのサブタイプで構成されている場合は、複数テーブルをJOINしなければならず、パフォーマンスを意識する必要が出てきます。モデルの見やすさ、データの効率性、パフォーマンスを総合的に判断し、最適な選択をしていきましょう。
- カテゴリ:
- キーワード: