【データベース設計】スーパータイプ/サブタイプとは何か？

# 一言で説明すると？
スーパータイプ/サブタイプとは、共通の属性を持つ親エンティティ(**スーパータイプ**)と特定の属性を持つ子エンティティ(**サブタイプ**)との関係を表すデータベース設計の概念。

# 具体例
### スーパータイプ: 商品（※商品に共通の属性を持つ）
| 商品ID | 商品名         | 価格   | 在庫数 |
|--------|----------------|--------|--------|
| P001   | チョコパイ| 399  | 105     |
| P002   | バナナ| 100  | 200     |
| P003   | 冷蔵庫         | 130,000 | 20      |
| P004   | 電子レンジ         | 50,000 | 8      |

### サブタイプ1: 食品（※食品特有の属性を持つ）
| 商品ID | 賞味期限     | カロリー |
|--------|--------------|----------|
| P001   | 2024-07-20   | 1,200      |
| P002   | 2024-09-21   | 300      |

### サブタイプ2: 家電製品（※家電製品特有の属性を持つ）
| 商品ID | 使用電力 | サイズ   |
|--------|----------|----------|
| P003   | 1500     | 大型     |
| P004   | 1200     | 中型    |

# スーパータイプ/サブタイプを使用すると何が良いのか？
### データの整合性と一貫性の維持：

スーパータイプに共通する属性（商品名、価格、在庫数など）を1つのテーブルで管理することで、これらのデータが一貫して保たれる。

### 柔軟性と拡張性の向上：

新しいサブタイプ（例えば、別の種類の商品）を追加する際に、共通のスーパータイプの構造を再利用できる。

### クエリの簡素化と効率化：

特定のサブタイプに関連する情報を検索する際に、サブタイプ固有の属性が含まれたテーブルだけをクエリすることで、効率的にデータを取得できる。

### 正規化とデータの重複の削減：

同じ属性が複数のテーブルに現れることを避けることができ、データの正規化が促進される。これにより、データの整合性と管理が向上する。

# 排他的サブタイプと共存的サブタイプ
サブタイプには、インスタンスが特定の1種類のサブタイプにしか属することができない**排他的サブタイプ**とインスタンスが同時に複数のサブタイプに属することができる**共存的サブタイプ**の2つの種類がある。

## 排他的サブタイプ
排他的サブタイプは、**インスタンスが特定の1種類のサブタイプにしか属することができない**ことを意味する。つまり、一つのインスタンスは複数のサブタイプに属することができない。

例えば、「商品」がスーパータイプであり、「食品」や「家電製品」がそれぞれのサブタイプとして存在する場合、これらは排他的サブタイプとなる。**商品は「食品」または「家電製品」のいずれかに属することができ、両方に属することはできない。**

### 排他的サブタイプの具体例
#### スーパータイプ: 商品（※商品に共通の属性を持つ）
| 商品ID | 商品名         | 価格   | 在庫数 |
|--------|----------------|--------|--------|
| P001   | チョコパイ| 399  | 105     |
| P002   | バナナ| 100  | 200     |
| P003   | 冷蔵庫         | 130,000 | 20      |
| P004   | 電子レンジ         | 50,000 | 8      |

#### 排他的サブタイプ1: 食品（※食品特有の属性を持つ）
| 商品ID | 賞味期限     | カロリー |
|--------|--------------|----------|
| P001   | 2024-07-20   | 1,200      |
| P002   | 2024-09-21   | 300      |

#### 排他的サブタイプ2: 家電製品（※家電製品特有の属性を持つ）
| 商品ID | 使用電力 | サイズ   |
|--------|----------|----------|
| P003   | 1500     | 大型     |
| P004   | 1200     | 中型    |

:::note info
「チョコパイ」は「食品」だけに属する。
「バナナ」は「食品」だけに属する。
「冷蔵庫」は「家電製品」だけに属する。
「電子レンジ」は「家電製品」だけに属する。
:::



## 共存的サブタイプ
一方、共存的サブタイプは、**インスタンスが同時に複数のサブタイプに属することができる**ことを意味する。

例えば、「商品」がスーパータイプであり、「店舗販売商品」や「ネット販売商品」がそれぞれのサブタイプとして存在する場合、これらは共存的サブタイプとなる。**「商品」は「店舗販売商品」か「ネット販売商品」のいずれかに加えて、両方に属することもできる。**

### 共存的サブタイプの具体例

#### スーパータイプ: 商品（※商品に共通の属性を持つ）
| 商品ID | 商品名         | 価格   | 在庫数 |
|--------|----------------|--------|--------|
| P001   | チョコパイ| 399  | 105     |
| P002   | バナナ| 100  | 200     |
| P003   | 冷蔵庫         | 130,000 | 20      |
| P004   | 電子レンジ         | 50,000 | 8      |

#### 共存的サブタイプ1: 店舗販売商品（※店舗販売商品特有の属性を持つ）
| 商品ID | 棚番号（店舗内での商品の位置情報）     |
|--------|--------------|
| P001   | a18   |
| P002   | b23   |
| P003   | q12   |
| P004   | g-33   |

#### 共存的サブタイプ2: ネット販売商品（※ネット販売商品特有の属性を持つ）
| 商品ID | 配送料（インターネット経由での配送にかかる費用）    |
|--------|--------------|
| P003   | 4,300  |
| P004   | 1,200   |

:::note info
「チョコパイ」は「店舗販売商品」だけに属する。
「バナナ」は「店舗販売商品」だけに属する。
「冷蔵庫」は「店舗販売商品」と「ネット販売商品」の両方に属する。
「電子レンジ」は「店舗販売商品」と「ネット販売商品」の両方に属する。
:::

# 完全なサブタイプと不完全なサブタイプ
**完全なサブタイプ**とは、スーパタイプの全てのインスタンスが必ず一つ以上のサブタイプに属する場合を指します。

**不完全なサブタイプ**とは、スーパタイプのインスタンスがどのサブタイプにも属さない可能性がある場合を指します。つまり、スーパタイプのインスタンスが必ずしもサブタイプに分類される必要はありません。

### 完全なサブタイプの具体例

#### スーパータイプ: 商品（※商品に共通の属性を持つ）
| 商品ID | 商品名         | 価格   | 在庫数 |
|--------|----------------|--------|--------|
| P001   | チョコパイ| 399  | 105     |
| P002   | バナナ| 100  | 200     |
| P003   | 冷蔵庫         | 130,000 | 20      |
| P004   | 電子レンジ         | 50,000 | 8      |

#### サブタイプ1: 店舗販売商品（※店舗販売商品特有の属性を持つ）
| 商品ID | 棚番号（店舗内での商品の位置情報）     |
|--------|--------------|
| P001   | a18   |
| P002   | b23   |
| P003   | q12   |
| P004   | g-33   |

#### サブタイプ2: ネット販売商品（※ネット販売商品特有の属性を持つ）
| 商品ID | 配送料（インターネット経由での配送にかかる費用）    |
|--------|--------------|
| P003   | 4,300  |
| P004   | 1,200   |

:::note info
商品が必ず一つ以上のサブタイプに属している = 完全なサブタイプ
:::
### 不完全なサブタイプの具体例

#### スーパータイプ: 商品（※商品に共通の属性を持つ）
| 商品ID | 商品名         | 価格   | 在庫数 |
|--------|----------------|--------|--------|
| P001   | チョコパイ| 399  | 105     |
| P002   | バナナ| 100  | 200     |
| P003   | 冷蔵庫         | 130,000 | 20      |
| P004   | 電子レンジ         | 50,000 | 8      |
| P005   | 販売中止の財布         | 1,000,000 | 6      |

#### サブタイプ1: 店舗販売商品（※店舗販売商品特有の属性を持つ）
| 商品ID | 棚番号（店舗内での商品の位置情報）     |
|--------|--------------|
| P001   | a18   |
| P002   | b23   |
| P003   | q12   |
| P004   | g-33   |

#### サブタイプ2: ネット販売商品（※ネット販売商品特有の属性を持つ）
| 商品ID | 配送料（インターネット経由での配送にかかる費用）    |
|--------|--------------|
| P003   | 4,300  |
| P004   | 1,200   |

:::note info
どのサブタイプにも属さない商品がある = 不完全なサブタイプ
:::

:::note alert
「販売中止の財布」は「店舗販売商品」と「ネット販売商品」のどちらにも属していない。
:::