プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • データベース
  • 【DBスペシャリスト】スーパータイプ、サブタイプ
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【DBスペシャリスト】スーパータイプ、サブタイプ

08.12

  • miyabisan2
  • コメントを書く

この記事は2分で読めます

標準パターン(排他的サブタイプ)

概念データモデル

関係スキーマ

サブタイプはスーパータイプより1文字下げて記述します。

1
2
3
4
スーパータイプ  コード,サブ区分
  サブタイプ1    コード,サブ1属性...
  サブタイプ2    コード,サブ2属性...
  サブタイプ3    コード,サブ3属性...

特徴

「主キー」はスーパータイプとサブタイプで同一

上記例でいえば「コード」と「サブコード1」、「サブコード2」、「サブコード3」は同一です。名称は変えても良いですが原則同じ名前にします。

スーパータイプの主キー以外の属性はサブタイプに継承される。

主キー以外はサブタイプには記述しないがスーパータイプが持っているキーは全てサブタイプに存在することになります。

サブタイプの主キー以外の属性はサブタイプ特有になる。

スーパータイプにサブタイプを識別するための属性を持たせます。

スーパータイプには主キー以外の属性にサブタイプを識別するための区分を持たせます。上記例で言えば「サブ区分」です。こうすることでどちらかのサブタイプにしか属することができないデータ(排他的サブタイプ)となります。

共存的サブタイプ

概念データモデル

関係スキーマ

1
2
3
スーパータイプ  コード,サブ1フラグ,サブ2フラグ
  サブタイプ1    コード,サブ1属性...
  サブタイプ2    コード,サブ2属性...

特徴

スーパータイプにサブタイプごとのフラグを持たせる。

スーパータイプには主キー以外の属性にサブタイプごとにON/OFFのフラグを持たせます。上記例で言えば「サブフラグ1」、「サブフラグ2」です。こうすることでどちらのサブタイプにしか属するデータ(共存的サブタイプ)となります。

包括関係になる場合もある。

下記のようにスーパータイプとサブタイプが1:1になっていれば包括関係にあると呼べます。基本的には共存的サブタイプの一種とみなして問題ありません。

同一のサブタイプ

関係スキーマ

1
2
3
スーパータイプ  コード
  サブタイプ1    コード,属性1,属性2
  サブタイプ2    コード,属性1,属性2

上記例のようにサブタイプ1とサブタイプ2が全く同じ属性を持っていたとします。それでも別々のサブタイプとして定義することはあります。例えば、「商品スーパータイプ」と「特売商品サブタイプ」、「在庫商品サブタイプ」があったとして属性が全く同じだったとしてもテーブル間のリレーションが全く異なっていたりする場合もあるのであえて別サブタイプとする場合があります。これを同一のサブタイプと呼びます。

完全、不完全

完全

どこかのサブタイプに含む場合は「完全なサブタイプ」と呼びます。例えば、「乗り物スーパータイプ」と「自転車サブタイプ」、「自動車サブタイプ」があった場合に「自転車」は「自転車サブタイプ」に属するので完全なサブタイプであると言えます。

不完全

どこのサブタイプにも属さない場合は「不完全なサブタイプ」と呼びます。例えば、「乗り物スーパータイプ」と「自転車サブタイプ」、「自動車サブタイプ」があった場合に「バイク」はどこにも属さないない不完全であると言えます。

スポンサーリンク
  • 2020 08.12
  • miyabisan2
  • コメントを書く
  • データベース
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2021 09.26

    【データベース】テーブル設計:履歴設計の注意点、その対策(遅延レプリケーションなど)

  2. 2020 12.12

    【データベース】バッチ処理の排他制御

  3. 2018 04.24

    【データベース設計】ビューの基本

  4. 2018 04.22

    【データベース設計】インデックス(索引)の基本

  5. 2020 08.12

    【DBスペシャリスト】「マスタ系」、「トランザクション系」エンティティタイプ

  6. 2018 04.26

    【データベース】「A5:SQL Mk-2」を使ってみる。(Oracleの接続設定等)

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【MySQL】データ型の種類

【DBスペシャリスト】「マスタ系」、「トランザクション…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー