オーロラさんの勉強帳

IT企業勤務。データベース、Excel、Excel VBA、ネットワーク、LinuxなどIT関連のことを主に書いていきます。少しでもお役に立てたら幸いです。

【DBスペシャリスト】スーパータイプとサブタイプとは (汎化・特化の関係を表現する)

本記事では、汎化・特化の関係を表現するスーパータイプ、サブタイプをわかりやすく紹介します。


スーパータイプ・サブタイプについて

スーパータイプサブタイプは、汎化と特化の関係を表現したものです。
汎化した側のエンティティがスーパータイプ特化した側のエンティティがサブタイプになります。

そもそも汎化、特化とは

汎化とは、複数の具体的なエンティティ(子)から共通の抽象的なエンティティ(親)を導くことを言います。
(例:トラック、スーパーカー、一般車→車)
特化とは、抽象的なエンティティ(親)から、より具体的なエンティティ(子)を派生させることを言います。
(例:車→トラック、スーパーカー、一般車)

排他的サブタイプと共存的サブタイプについて

サブタイプには、排他的サブタイプ共存的サブタイプがあります。

排他的サブタイプ

排他的サブタイプは、1件1件のデータが、複数のサブタイプのうち1つにしか属しません。
親エンティティはいずれか1つの子エンティティにしか属さず、子エンティティ同士は排他的で重複しません。

以下画像の場合は、従業員は正社員か契約社員のいずれか一方にしか属さない、排他的サブタイプを表しています。

排他的サブタイプの例

概念データモデル:排他的サブタイプ

排他的サブタイプの関係スキーマ
 スーパータイプ 従業員(従業員コード,従業員名,雇用区分)
 サブタイプ   正社員(従業員コード,従業員名,基本給,勤続年数)
 サブタイプ   契約社員(従業員コード,従業員名,時給,契約期間)

共存的サブタイプ

共存的サブタイプは、1件1件のデータが複数のサブタイプに属することが可能です。
親エンティティは複数の子エンティティに同時に属する可能性があり、子エンティティ同士は重複可能です。

以下画像の場合は、人物は学生、会社員のどちらか一方または両方に属することができる共存的サブタイプを表しています。

共存的サブタイプの例

概念データモデル:排他的サブタイプ


共存的サブタイプの関係スキーマ
スーパータイプ 人物(マイナンバー,氏名,学生区分,会社員区分)
サブタイプ   学生(マイナンバー,学校名,学年)
サブタイプ   会社員(マイナンバー,会社名,部署)

包含サブタイプについて

排他的サブタイプ共存的サブタイプとは異なる概念である『包含関係のサブタイプ』というものがあります。

包含とは、サブタイプがスーパータイプの一部として含まれている(部分集合)関係を指します。

包含サブタイプの例

スーパータイプ:商品
サブタイプ  :販売品
販売品は商品に含まれるが、商品には販売品以外のものがあります。

スーパータイプ、サブタイプのポイント

種類 特性 実装方法
排他的サブタイプ どれか1つにだけ所属できる 社員は、正社員契約社員のどちらか一方にしか所属できない 区分コード
共存的サブタイプ 複数に同時に所属できる 取引先は、仕入れ先得意先のどちらか一方または両方に所属できる フラグ
包含サブタイプ 部分集合関係 販売品は、商品の部分集合関係である 外部キー
赤文字:スーパータイプ青文字:サブタイプ


以上、お読みいただきありがとうございました。