第2章 関係モデルの基礎
更新日:2025年12月28日
この章を音声で聴く
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-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.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年代に確立されたものであり、基本概念は現在も変わりません。