第2章 関係モデルの基礎

更新日:2025年12月28日

🎧

この章を音声で聴く

再生速度:
本章では、RDBの理論的基盤である関係モデルについて解説する。E.F.Coddが提唱した関係モデルは、数学の集合論に基づいている。リレーション、タプル、属性、ドメインといった基本概念を理解し、関係代数の基本操作(選択、射影、結合)について学ぶ。これらの理論的理解は、効果的なデータベース設計とSQL操作の基盤となる。

1. 集合論との関係

1.1 集合と要素

関係モデルを理解するには、まず集合論の基本概念を押さえる必要がある。集合(Set)とは、明確に定義された対象の集まりである。集合に属する個々の対象を要素(Element)と呼ぶ。

Table 1. 集合論の基本用語

用語 記法 説明
集合 A, B, S 対象の集まり A = {1, 2, 3}
要素 a ∈ A 集合に属する対象 2 ∈ {1, 2, 3}
部分集合 A ⊆ B Aの全要素がBに含まれる {1, 2} ⊆ {1, 2, 3}
空集合 要素を持たない集合 ∅ = {}
和集合 A ∪ B AまたはBに属する要素 {1, 2} ∪ {2, 3} = {1, 2, 3}
積集合 A ∩ B AかつBに属する要素 {1, 2} ∩ {2, 3} = {2}
差集合 A − B Aに属しBに属さない要素 {1, 2, 3} − {2} = {1, 3}

1.2 直積と関係

関係モデルの「関係(Relation)」は、集合論における直積(Cartesian Product)の部分集合として定義される。

直積:2つの集合A, Bの直積 A × B は、Aの各要素とBの各要素の組み合わせ(順序対)の集合である。

-- 例:A = {a, b}, B = {1, 2} のとき
-- A × B = {(a,1), (a,2), (b,1), (b,2)}

-- データベースでの例
-- 顧客集合 = {田中, 鈴木}
-- 商品集合 = {りんご, みかん}
-- 直積 = {(田中,りんご), (田中,みかん), (鈴木,りんご), (鈴木,みかん)}

関係(Relation):直積の部分集合を関係と呼ぶ。実際のデータベースでは、直積のすべての組み合わせではなく、意味のある組み合わせのみを格納する。これが「リレーション」である。

n項関係
複数の集合の直積の部分集合を n項関係(n-ary relation)と呼ぶ。例えば、顧客ID、商品ID、数量の3つの集合の直積の部分集合は3項関係となる。RDBのテーブルは、まさにこの n項関係を表現している。

2. リレーションの構成要素

2.1 属性とドメイン

リレーションを構成する基本要素を以下に示す。

Table 2. リレーションの構成要素

用語 英語 SQL/テーブルでの対応 説明
リレーション Relation テーブル データの集合体
属性 Attribute 列(カラム) データの項目名
タプル Tuple 行(レコード) 1件のデータ
ドメイン Domain データ型・制約 属性が取りうる値の集合
次数 Degree 列の数 属性の個数
濃度 Cardinality 行の数 タプルの個数

ドメインは、属性が取りうる値の集合を定義する。例えば「年齢」属性のドメインは「0以上150以下の整数」、「性別」属性のドメインは「{男, 女, その他}」のように定義される。

-- ドメインの例(SQLでの表現)
CREATE TABLE employees (
    id INTEGER,              -- ドメイン: 整数
    name VARCHAR(100),       -- ドメイン: 100文字以下の文字列
    age INTEGER CHECK (age >= 0 AND age <= 150),  -- ドメイン: 0-150の整数
    gender CHAR(1) CHECK (gender IN ('M', 'F', 'O'))  -- ドメイン: M, F, O
);

2.2 タプルとリレーション

タプルは、各属性に対する値の組である。リレーションは、同じ構造を持つタプルの集合である。

Table 3. リレーションの例(社員テーブル)

社員ID 氏名 部署 給与
E001 田中太郎 営業 450000
E002 鈴木花子 開発 520000
E003 佐藤次郎 営業 400000

上記テーブルの場合、次数(Degree)= 4(属性が4つ)、濃度(Cardinality)= 3(タプルが3つ)である。

リレーションの性質
数学的なリレーションは以下の性質を持つ。(1) タプルの順序は意味を持たない(集合なので順序がない)、(2) 重複するタプルは存在しない(集合の要素は一意)、(3) 属性の順序は意味を持たない、(4) 各属性値は原子的(atomic)でなければならない。

3. 関係代数

関係代数(Relational Algebra)は、リレーションに対する操作を定義する代数系である。SQLの理論的基盤となっており、データベースのクエリ最適化にも使用される。

Fig. 1. 関係代数の基本操作

関係代数の基本操作
関係代数の3つの基本操作とSQLの対応

3.1 選択・射影・結合

関係代数の主要な操作を以下に示す。

Table 4. 関係代数の基本操作

操作 記法 SQL対応 説明
選択 σ(シグマ) WHERE 条件を満たすタプルを抽出
射影 π(パイ) SELECT 列名 指定した属性のみを抽出
結合 ⋈(ボウタイ) JOIN 2つのリレーションを結合
UNION 2つのリレーションの和集合
EXCEPT 2つのリレーションの差集合
× CROSS JOIN 2つのリレーションの直積
改名 ρ(ロー) AS リレーションや属性の名前変更

選択(Selection):条件を満たすタプル(行)を抽出する操作。

-- 関係代数: σ[部署='営業'](社員)
-- SQL:
SELECT * FROM employees WHERE department = '営業';

-- 結果: 部署が'営業'の社員のみが抽出される

射影(Projection):指定した属性(列)のみを抽出する操作。

-- 関係代数: π[氏名, 給与](社員)
-- SQL:
SELECT name, salary FROM employees;

-- 結果: 氏名と給与の列のみが抽出される

結合(Join):2つのリレーションを共通の属性で結合する操作。

-- 関係代数: 社員 ⋈[部署ID=部署.ID] 部署
-- SQL:
SELECT * FROM employees e
JOIN departments d ON e.department_id = d.id;

-- 結果: 社員と部署の情報が結合される

Table 5. 結合の種類

結合種類 説明 SQL
内部結合 両方のリレーションに存在するタプルのみ INNER JOIN
左外部結合 左リレーションのすべてのタプル LEFT JOIN
右外部結合 右リレーションのすべてのタプル RIGHT JOIN
完全外部結合 両リレーションのすべてのタプル FULL OUTER JOIN
直積 すべての組み合わせ CROSS JOIN

SQLと関係代数の関係

SQLは関係代数を基盤としているが、完全に一致するわけではない。SQLは「マルチ集合(重複を許容)」を扱うのに対し、純粋な関係代数は「集合(重複なし)」を扱う。SQLで重複を排除するにはDISTINCTを使用する。また、SQLはNULL値を扱えるが、純粋な関係代数にはNULLの概念がない。

4. まとめ

本章で解説した概念を整理する。

Table 6. 第2章のまとめ

概念 内容
集合論の基礎 集合、要素、部分集合、和・積・差集合
直積と関係 直積の部分集合がリレーション
リレーションの構成要素 属性(列)、タプル(行)、ドメイン(値の集合)
次数と濃度 次数 = 属性の数、濃度 = タプルの数
関係代数 リレーションに対する数学的操作体系
選択(σ) 条件を満たすタプルを抽出 → WHERE
射影(π) 指定した属性を抽出 → SELECT 列名
結合(⋈) 2つのリレーションを結合 → JOIN
参考・免責事項
本コンテンツは2025年12月時点の情報に基づいて作成されています。関係モデルの理論は1970年代に確立されたものであり、基本概念は現在も変わりません。