データベース基本概念

カーディナリティ かーでぃなりてぃ

リレーション主キー外部キー正規化ER図インデックス
カーディナリティについて教えて

簡単に言うとこんな感じ!

「1人のお客さんが複数の注文を持てる」みたいな、テーブル同士の関係の”人数比”のことだよ!「1対1」「1対多」「多対多」の3パターンがあって、これを整理するとデータベース設計がぐっと分かりやすくなるんだ!


カーディナリティとは

カーディナリティ(Cardinality) とは、データベースにおいてテーブル(表)同士の関係における「レコード数の比率・対応関係」のことです。たとえば「1人の顧客が何件の注文を持てるか」「1つの商品が何個の注文明細に紐づくか」といった、データ間の量的な関係性を表します。

ER図(Entity-Relationship図。テーブルの関係を図示したもの)を読んだり設計したりする場面で必ず登場する概念です。カーディナリティを正しく把握していると、テーブルの結合方法やインデックスの設計、さらにはシステムの性能見積もりにまで活かすことができます。

なお「カーディナリティ」にはもう1つの意味もあります。列(カラム)の値の種類の多さ(重複のなさ)を指す使い方で、インデックスの効き具合を判断するときに使われます。どちらの意味かは文脈で判断しましょう。


カーディナリティの3つのパターン

データベース設計で登場するカーディナリティは、主に次の3種類です。

パターン表記具体例
1対1(One-to-One)1 : 1社員テーブル ↔ 社員証テーブル
1対多(One-to-Many)1 : N顧客テーブル ↔ 注文テーブル
多対多(Many-to-Many)M : N商品テーブル ↔ 注文テーブル

覚え方:「結婚・子育て・合コン」で覚える

  • 1対1:結婚(1人に1人が対応)
  • 1対多:親と子(1人の親に複数の子)
  • 多対多:合コン(複数の人が複数の人と関係を持てる)

多対多はそのままDBに入れられない

多対多の関係は中間テーブル(関連テーブル)を挟んで「1対多 + 1対多」に分解しないと、リレーショナルデータベースでは正しく管理できません。

【多対多の分解イメージ】

商品テーブル  ←→  注文明細テーブル(中間)  ←→  注文テーブル
  1 : N                                         N : 1

歴史と背景

  • 1970年 — Edgar F. Codd がリレーショナルモデルを提唱。テーブル間の関係を数学的に整理する枠組みが生まれた
  • 1976年 — Peter Chen が ER モデル(Entity-Relationship Model)を発表。カーディナリティを図で表現する記法が広まる
  • 1980年代〜 — Oracle・DB2 などの商用 RDBMS が普及。ER図とカーディナリティ記法が設計の標準ツールとなる
  • 1990年代〜 — UML(統一モデリング言語)が登場し、ER図の記法がさらに標準化される
  • 現在 — クラウド時代でもRDBMSは主流であり、カーディナリティはシステム設計・DB設計研修の基礎として必ず登場する概念

カーディナリティの記法とER図

ER図にはいくつかの記法がありますが、現在もっともよく使われるのが Crow’s Foot 記法(鳥の足記法) です。線の端の形でカーディナリティを表現します。

Crow's Foot 記法によるカーディナリティ 社員 社員証 1対1 顧客 注文 1対多 商品 注文 多対多 記号の意味 | : ちょうど1 O : 0以上(省略可) <(鳥足): 多数(N) 実務でよく見る例: ・顧客 → 注文:1対多 ・ユーザー → プロフィール:1対1 ・学生 → 授業:多対多 ・商品 → カテゴリ:多対多

カーディナリティとインデックスの関係

列のカーディナリティは「その列にある値の種類数」を指します。検索性能を上げるためのインデックス設計では、カーディナリティが高い列(値の種類が多い=重複が少ない)ほどインデックスが効果的です。

カーディナリティインデックスの効果
高い(High)メールアドレス・注文ID◎ 非常に効果的
中程度(Medium)都道府県・部署名△ 条件次第
低い(Low)性別(男/女)・フラグ(0/1)✗ ほぼ効果なし

関連する規格・RFC

規格内容
ISO/IEC 9075(SQL標準)リレーショナルデータベースの国際標準。カーディナリティの概念を含むデータモデルの基礎を規定

関連用語

  • ER図 — テーブル間の関係をカーディナリティとともに図示する設計図
  • 主キー — テーブル内のレコードを一意に識別する列。1対多の「1」側を担う
  • 外部キー — テーブル間の関係を結ぶ列。カーディナリティを実装する仕組み
  • 正規化 — データの重複をなくすための設計プロセス。カーディナリティの整理が前提
  • インデックス — 検索を高速化する仕組み。列のカーディナリティが設計の判断基準になる
  • リレーショナルデータベース — カーディナリティの概念が根幹にあるデータベースの仕組み
  • 結合(JOIN) — カーディナリティに基づいてテーブルを組み合わせるSQL操作