リレーション りれーしょん
テーブル行(タプル)列(属性)関係モデルSQL正規化
リレーションって何?テーブルと同じこと?
リレーションとは
リレーション(Relation) とは、データベースの理論的基盤である関係モデル(リレーショナルモデル) における、データの基本単位です。わかりやすく言うと、行と列で構成された「表(ひょう)」のことで、ExcelやGoogleスプレッドシートの1枚のシートをイメージすると近いです。
リレーションは、同じ構造を持つデータの集合を表します。たとえば「社員リレーション」であれば、すべての行が「社員ID・氏名・部署・入社日」という同じ列構成を持ちます。この規則正しい構造こそが、コンピュータによる高速な検索・集計を可能にしている理由です。
日常的には「テーブル」と呼ばれることがほとんどですが、厳密には「リレーション」は数学的な定義に基づく理論用語、「テーブル」はSQLなどの実装上の呼び名という違いがあります。IT関係者と話すときや、試験・仕様書を読むときに「リレーション=テーブル」と覚えておけば困りません。
リレーションの構造
リレーションは以下の3つの要素で構成されています。
| 理論用語 | 実務上の呼び名 | 意味 |
|---|---|---|
| リレーション(Relation) | テーブル(Table) | 表全体。データのまとまり |
| タプル(Tuple) | 行(Row) / レコード | 1件分のデータ |
| 属性(Attribute) | 列(Column) / フィールド | データの項目名(例:氏名、価格) |
【社員リレーションのイメージ】
┌──────────┬────────────┬──────────┬────────────┐
│ 社員ID │ 氏名 │ 部署 │ 入社日 │ ← 属性(列)
├──────────┼────────────┼──────────┼────────────┤
│ 001 │ 山田 太郎 │ 営業部 │ 2020-04-01 │ ← タプル(行)
│ 002 │ 鈴木 花子 │ 開発部 │ 2021-10-01 │ ← タプル(行)
│ 003 │ 佐藤 次郎 │ 総務部 │ 2019-07-15 │ ← タプル(行)
└──────────┴────────────┴──────────┴────────────┘
リレーションの3つのルール
リレーションには、ただの表と区別するための数学的な制約があります。
- 重複行なし — 同じ内容のタプルは存在しない(必ず一意に識別できる)
- 順序なし — 行の並び順に意味はない(何番目に格納されているかは関係ない)
- 原子値 — 各セルには1つの値しか入らない(複数の値を1マスに詰め込まない)
「次数」と「濃度」で規模を表す
| 用語 | 意味 | 例 |
|---|---|---|
| 次数(Degree) | 属性(列)の数 | 社員テーブルが4列なら次数=4 |
| 濃度(Cardinality) | タプル(行)の数 | 社員が100人なら濃度=100 |
歴史と背景
- 1970年 — IBM研究員の エドガー・F・コッド(Edgar F. Codd) が論文「A Relational Model of Data for Large Shared Data Banks」を発表。リレーションという概念を数学的集合論に基づいて定義した
- 1970年代後半 — IBMの研究プロジェクト「System R」でリレーショナルモデルの実装が始まる
- 1979年 — Oracleが世界初の商用リレーショナルデータベースを発売
- 1986年 — SQL(Structured Query Language)がANSI標準として制定され、リレーションを操作する共通言語が確立
- 1990年代〜現在 — MySQL・PostgreSQL・SQL Serverなどが普及し、「テーブル」という実装上の呼び名が広く浸透。現在もWebサービスや業務システムのデータ管理の中心はリレーションモデル
コッドがこのモデルを提案した背景には、当時のデータベースが「物理的な保存場所」に依存していて、データ構造を変えるたびにプログラムを書き直す必要があったという課題がありました。リレーションモデルは「論理的な表」としてデータを抽象化することで、この問題を解決しました。
関係モデルとSQLの対応関係
実際のシステム開発では、理論上の「リレーション」をSQLで操作します。以下に理論と実装の対応を示します。
リレーション演算(関係代数)
リレーションはそのまま扱うだけでなく、複数のリレーションを組み合わせる演算ができます。これがSQLのSELECT・JOIN・WHEREの理論的な根拠です。
| 演算名 | SQLでの対応 | 説明 |
|---|---|---|
| 選択(Selection) | WHERE | 条件に合う行だけを取り出す |
| 射影(Projection) | SELECT 列名 | 必要な列だけを取り出す |
| 結合(Join) | JOIN | 共通項目で2つのテーブルをつなげる |
| 和(Union) | UNION | 2つのテーブルの行を合わせる |
| 差(Difference) | EXCEPT | 一方にしかない行を取り出す |
| 直積(Product) | CROSS JOIN | すべての行の組み合わせを作る |
関連する規格・RFC
| 規格番号 | 内容 |
|---|---|
| ISO/IEC 9075(SQL標準) | SQLの国際標準規格。リレーションをテーブルとして操作する言語仕様を定義 |
| RFC 9295 | RDBとJSONの連携に関するIETF文書(関係モデルの応用領域) |