Works by

Ren's blog

@rennnosuke_rk 技術ブログです

【DB】テーブルのサブタイプ

RDBMSにおけるテーブルの継承

RDBMSでは、データを格納するテーブルに継承関係を定義することができます。例えば文房具屋さんが店舗で扱う商品を管理するために、書籍テーブルや文具テーブルなどを作成することができます。しかし、書籍や文具は商品であるため、商品名や商品価格などの属性が重複してしまいます。

そこで、テーブル間に継承関係をもたせ、各テーブルで共通する属性は一つにまとめて別途定義します。このときの共通する属性を持つテーブルをスーパータイプと呼びます。また、書籍であればISBN番号など、個々の具体的なテーブルに出現する属性をまとめたテーブルをサブタイプと呼びます。

一般に、実世界の処理を反映するのはサブタイプのテーブルなので、例えば新しい書籍が入荷されたときはサブタイプである書籍テーブルの行を追加します。書籍情報はISBN番号だけでなく、商品名や商品価格も持つので、スーパータイプへの行追加も必要です。

スーパータイプに行が追加されたときの、サブタイプへの行追加のやり方によって、サブタイプは

  • 排他的サブタイプ
  • 共存的サブタイプ

に分類されます。

排他的サブタイプ

排他的サブタイプは、スーパータイプに行が追加されたとき、いずれかのサブタイプにのみ行追加を行います。

先程の例でいえば、書籍「ハリーポッター」が入荷されたときは、書籍テーブルと商品テーブルに行が追加されます(文具テーブルはそのまま)。

共存的サブタイプ

文具テーブルが、仮に鉛筆テーブルと消しゴムテーブルに分かれていたとします(このようなやり方をあまり聞いたことはありませんが)。

もし「鉛筆と消しゴムのセット」のような、鉛筆でありながら消しゴムにも含まれる商品を両方のテーブルで管理したい場合があるとします。

このとき、上位の文具テーブル(と商品テーブル)に行が追加されるとともに、鉛筆テーブル、そして消しゴムテーブルにも行が追加されます。

この鉛筆テーブルと消しゴムテーブルのような、互いが排他的でないくなるサブタイプを共存的サブタイプと呼びます。共存的サブタイプを採用する場合、スーパータイプの行が発生したときにサブタイプの双方に行が発生します。