スーパータイプとサブタイプ(supertype / subtype)

分類
テクノロジ系 データベース
出る試験
基本情報応用情報
重要度
★★★☆☆

共通する部分を上にまとめたものがスーパータイプ、それぞれ固有の部分を持つ下位がサブタイプ。空欄の列を減らすために分ける。

もう少し詳しい説明

どんなときに分けるのか

受講者を管理する例で考えます。受講者には社員と社外の人がいます。

項目社員社外の人
受講者コードあるある
氏名あるある
所属部署コードあるない
勤務先の会社名ないある

1つの表にまとめると、どちらかの列が必ず空欄になります。

受講者コード氏名所属部署勤務先
0001(社員)営業部空欄
0002(社外)空欄○○商事

空欄になる列は、見分けが付きません。 「値がまだ入っていない」のか「そもそも当てはまらない」のかが区別できません。

分けた形

表立場持つ列
受講者スーパータイプ(上位)受講者コード、氏名、区分
社員受講者サブタイプ(下位)受講者コード、所属部署コード
社外受講者サブタイプ(下位)受講者コード、勤務先の会社名

共通する列は上、固有の列は下に置きます。

決まり中身
サブタイプの主キースーパータイプの主キーと同じ列にする
サブタイプの主キー同時に、スーパータイプへの外部キーにもなる
1件のデータスーパータイプに1行、該当するサブタイプに1行

区分属性

どのサブタイプなのかを見分けるための列です。タイプ属性とも呼びます。

受講者コード氏名区分
0001(社員)1(社員)
0002(社外)2(社外)

この列があると、サブタイプを見に行かずに種類が分かります。 区分の値に何を入れてよいかは、定義域制約で決めます。

2つの性質

性質問い例
排他か1件が同時に複数のサブタイプになれるか社員と社外を兼ねられるか
網羅しているかすべての行がどれかのサブタイプに入るかどちらにも入らない受講者がいるか

排他で、かつ網羅しているなら、区分属性1つで表せます。 兼ねられる場合は、区分を1列で表せません。

上に残してよい列、残してはいけない列

ここが設問の分かれ目になります。

その列が当てはまる範囲置く場所
すべての種類に当てはまるスーパータイプ
一部の種類だけに当てはまるそのサブタイプ

片方にしか当てはまらない列が上に残っていると、もう片方で空欄になります。 改修の問題では、「この属性をどちらに置くか」が直接問われます。

どこまで分けるか

分けると分けないと
空欄の列がなくなる空欄が残る
列の意味がはっきりする「当てはまらない」と「未入力」が混ざる
問合せで結合が必要になる1つの表で済む
表の数が増える少なく保てる

固有の列が1つか2つしか無い場合は、分けないこともあります。 分けることで増える手間と、空欄が残る不都合を比べる形です。

プログラムの側の考え方との対応

データベースオブジェクト指向
スーパータイプスーパークラス(汎化した側)
サブタイプサブクラス(特化した側)

考え方は同じです。 共通部分を上に、固有部分を下に置きます(オブジェクト指向のページで扱っています)。

試験ではこう出る

科目A(旧・午前)では、上下の意味が問われます。共通部分が上、固有部分が下です。

午後や応用情報(データベース)では、E-R図の中で上下に並べて描かれます。 問われるのは次の2つです。

問われ方答えるもの
この属性はどこに置くか当てはまる範囲で決める
サブタイプの主キーは何かスーパータイプの主キーと同じ列

解答群が無く、属性名を自分で書くことが多いので、問題文の他の表で使われている名前の付け方に合わせてください。

関連する用語

E-R図
この分け方を描く図。上下の関係として示す
正規化
同じ事実を1か所にまとめる整理。目的が近い
主キー
サブタイプの主キーは、スーパータイプの主キーと同じ列にする
クラス図
同じ考え方をプログラムの側で表した図。汎化と特化

ミニクイズ

スーパータイプとサブタイプに分ける設計の目的として、最も適切なものはどれか。

正解は 4番:一部の種類にしか当てはまらない属性を下位に移し、値が入らない列が生じるのを避けること

共通する属性を上位にまとめ、一部の種類にしか当てはまらない属性を下位に置くのがこの設計です。1つの表にまとめると、当てはまらない種類の行でその列が空欄になります。行数で分けるのは分割の別の手法で、よく使う列を写すのは性能を上げるための重複の持たせ方です。同じ列を複数の表に持たせるのは、同じ事実を1か所にまとめる考え方とは逆向きになります。

間違えた用語の復習リストを見る →

この分野をまとめて解く → データベースのミニテスト(全35問)

最終更新:2026-11-09