拡張関係とは1対1関係の1種です。拡張関係は以下のケースで発生します。
(a)あるエンティティに存在する条件属性を分離する場合
(b)エンティティ間の共通属性を分離させる場合
両ケースとも、1対1関係にあるエンティティ間に上下関係が存在します。上下関係にあるエンティティのうち、上位エンティティをスーパータイプ、下位エンティティをサブタイプと呼びます。
なお、スーパータイプは必ず存在しますが、サブタイプは必ずしも存在するとは限りません。
上記(a)のケースを、特化(Specialization)上記(b)のケースを、汎化(Generalization)と呼びます。
(a)の特化の例ですが、例えば(図1)のように社員コードをキーとして
社員氏名
社員住所
社員電話番号
社員入社年月日
社員生年月日
配偶者氏名
配偶者生年月日
を属性として持っている社員エンティティが存在したとします。
(図1)条件属性
その社員エンティティの属性のうち”配偶者氏名”と”配偶者生年月日”については、その社員が結婚していれば、値が存在する項目ですが、独身社員であれば値が存在しない属性です。このように、ある条件の時にもの値がセットされる属性のことを条件属性といいます。
この条件属性を分離し図2のようにすることによって、1対1の拡張関係が発生します。
(図2)あるエンティティに存在する条件属性を分離する場合
社員エンティティには既婚社員であろうと独身社員であろうと、必要となる属性を持たせ、既婚社員のエンティティにのみ配偶者に関する属性を持たせて管理するようにします。
(b)の汎化の例ですが、例えば図3のように正社員コードをキーとして
正社員氏名
正社員住所
正社員電話番号
役職区分
を属性として持っている正社員エンティティと、アルバイト社員コードをキーとして
アルバイト社員氏名
アルバイト社員住所
アルバイト社員電話番号
時給
を属性として持っているアルバイト社員エンティティが存在したとします。
(図3)共通属性
この2つのエンティティを見てみると、両エンティティとも”社員氏名”、”社員住所”、”社員電話番号”を持っています。このように、別々のエンティティであるにもかかわらず、同じ属性を持つことがあります。このような属性を共通属性と呼びます。
この共通属性を分離し図4のようにすることによって1対1の拡張関係が発生します。
(図4)エンティティ間の共通属性を分離させる場合
正社員であろうとアルバイト社員であろうと共通に必要となる属性を社員エンティティに持たせ、正社員にのみ必要となる”役職区分”を正社員エンティティに、アルバイトにだけ必要な”時給”というエンティティをアルバイト社員のエンティティにのみ持たせて管理するようにします。
(a)あるエンティティに存在する条件属性を分離する場合
(b)エンティティ間の共通属性を分離させる場合
両ケースとも、1対1関係にあるエンティティ間に上下関係が存在します。上下関係にあるエンティティのうち、上位エンティティをスーパータイプ、下位エンティティをサブタイプと呼びます。
なお、スーパータイプは必ず存在しますが、サブタイプは必ずしも存在するとは限りません。
上記(a)のケースを、特化(Specialization)上記(b)のケースを、汎化(Generalization)と呼びます。
(a)の特化の例ですが、例えば(図1)のように社員コードをキーとして
社員氏名
社員住所
社員電話番号
社員入社年月日
社員生年月日
配偶者氏名
配偶者生年月日
を属性として持っている社員エンティティが存在したとします。
(図1)条件属性
その社員エンティティの属性のうち”配偶者氏名”と”配偶者生年月日”については、その社員が結婚していれば、値が存在する項目ですが、独身社員であれば値が存在しない属性です。このように、ある条件の時にもの値がセットされる属性のことを条件属性といいます。
この条件属性を分離し図2のようにすることによって、1対1の拡張関係が発生します。
(図2)あるエンティティに存在する条件属性を分離する場合
社員エンティティには既婚社員であろうと独身社員であろうと、必要となる属性を持たせ、既婚社員のエンティティにのみ配偶者に関する属性を持たせて管理するようにします。
(b)の汎化の例ですが、例えば図3のように正社員コードをキーとして
正社員氏名
正社員住所
正社員電話番号
役職区分
を属性として持っている正社員エンティティと、アルバイト社員コードをキーとして
アルバイト社員氏名
アルバイト社員住所
アルバイト社員電話番号
時給
を属性として持っているアルバイト社員エンティティが存在したとします。
(図3)共通属性
この2つのエンティティを見てみると、両エンティティとも”社員氏名”、”社員住所”、”社員電話番号”を持っています。このように、別々のエンティティであるにもかかわらず、同じ属性を持つことがあります。このような属性を共通属性と呼びます。
この共通属性を分離し図4のようにすることによって1対1の拡張関係が発生します。
(図4)エンティティ間の共通属性を分離させる場合
正社員であろうとアルバイト社員であろうと共通に必要となる属性を社員エンティティに持たせ、正社員にのみ必要となる”役職区分”を正社員エンティティに、アルバイトにだけ必要な”時給”というエンティティをアルバイト社員のエンティティにのみ持たせて管理するようにします。
※コメント投稿者のブログIDはブログ作成者のみに通知されます