FE EXAM

データベースの基礎(テーブル・主キー・外部キー)

リレーショナルデータベース(RDB)の根幹となる「テーブル・主キー・外部キー・リレーション」を一つずつ確認します。

RDB STRUCTURE
主キー
外部キー
レコード
フィールド
現在のシナリオ
テーブルの構造
行(レコード)と列(フィールド)からなるテーブルの基本構造を見ていきます。
シナリオ
ステップ1 / 3
STEP 1/3テーブルとは — 表形式のデータRDB ではすべてのデータが「テーブル(表)」の形で管理されます。Excel のシートに似ています。これは学生情報を持つテーブルの例。
📊 学生
🔑 学生ID名前学年
S001田中太郎2
S002鈴木花子3
S003佐藤次郎1
解説

📌
リレーショナルデータベースとは

📊 学生S001S002S003📊 成績G001G002G003FK

リレーショナルデータベース(RDB)は、データを表(テーブル)の集まりで管理するデータベースです。テーブル同士を「キー」で関連付けることでデータの構造化を実現します。

身近な例えだと、「Excel のシートを複数並べた状態」に近いです。ただし RDB には Excel にない強力な機能があります:
制約:主キーの一意性などをデータベース側が自動チェック
SQL:複雑な検索・集計を1行のコマンドで
トランザクション:失敗時の整合性保証

代表的な RDBMS:Oracle / MySQL / PostgreSQL / SQL Server / SQLite。Web サービス、業務システム、家計簿アプリまで、構造化されたデータを扱うあらゆる場面で使われています。

📌
テーブルの構成要素 — 行と列

テーブルは縦横の表で、「行」と「列」から成ります。それぞれ専門用語が複数あって混乱しやすいので整理しましょう。


行(Row) = レコード = タプル:1 件のデータ
列(Column) = フィールド = 属性:1 つのデータ項目(名前、年齢など)
セル:行と列の交点。1 つの値
スキーマ:テーブルの構造定義(どの列があり、何型か)

「タプル=行」「属性=列」のような用語対応は混同しやすいので、英語・日本語・別名(タプル/属性)の3パターンを整理して覚えておきましょう。

📌
主キー(Primary Key) — 一意性を保証する列

主キーは、テーブル内の各行を一意に識別する列です。学生 ID、注文番号、社員番号などが典型的な主キー。

主キーの 2 つの制約:
一意性制約:同じ値が 2 つ存在してはいけない
NOT NULL 制約:必ず値が入っていなければならない

この 2 つをデータベース自身が自動チェックしてくれるのが RDB の強み。アプリ側がうっかり同じ ID で 2 件登録しようとしても、DB が「重複してます」とエラーで弾いてくれます。上のツール「主キー」シナリオのステップ 3 でこの制約違反の例を確認できます。

主キーが複数列の組み合わせの場合は複合主キーと呼びます(例:履修テーブルの「学生 ID + 科目 ID」)。

📌
外部キー(Foreign Key) — 他テーブルへの参照

外部キーは、他のテーブルの主キーを参照する列です。これにより 2 つのテーブルが関連付けられます。

たとえば「成績テーブル」に「学生 ID」列を作って「学生テーブル」の主キーを指せば、各成績がどの学生のものか分かります。学生の名前を成績テーブルにコピーする必要がないので、データが冗長になりません。

外部キーには参照整合性制約という重要な性質があります:
・存在しない学生 ID を成績テーブルに書くと、DB が拒否
・成績が紐付いている学生を削除しようとすると、DB が拒否(または成績ごと連鎖削除)

これによって「存在しない人の成績」のようなデータの矛盾を構造的に防ぐことができます。上のツール「外部キー」シナリオで矢印が学生テーブルへ向かう様子を確認できます。

📌
リレーションの 3 種類 — 1:1 / 1:N / M:N

多重度意味
1:11 件に対して 1 件だけユーザーとプロフィール、社員と社員カード
1:N1 件が複数件と関連顧客と注文、学生と成績、ユーザーと投稿
M:N双方向で複数件と関連(中間テーブルで分解)学生と科目(履修)、商品とタグ

テーブル同士の関係を多重度(カーディナリティ)と呼びます。1:N が最も一般的で、世の中の大半の関係はこれ。

M:N の関係は直接表現できないので、「履修テーブル」のような中間テーブルを作って 1:N + 1:N に分解します。

📌
RDB vs NoSQL

項目RDBNoSQL
データモデルテーブル(行×列)柔軟(ドキュメント、KV、グラフ等)
スキーマ事前に厳密に定義スキーマレスまたは柔軟
一貫性ACID(強い)BASE / 結果整合性
スケーリング主にスケールアップスケールアウト得意
言語SQL製品ごとに異なる
代表製品PostgreSQL, MySQL, OracleMongoDB, Redis, DynamoDB

RDB の対抗として登場したのがNoSQL(Not Only SQL)です。データ構造の柔軟性と分散環境での性能を重視する設計で、Web の大規模サービスで広く使われています。

使い分けの目安:
RDB が向く:データ構造が安定、整合性最優先(銀行、業務システム)
NoSQL が向く:データ構造が変わりやすい、巨大な読み書き量(SNS、ログ収集、キャッシュ)

両者を対比すると、「RDB は行と列、NoSQL はキー・バリューやドキュメント形式」「RDB は ACID、NoSQL は結果整合性」という違いが要点です。

練習問題

🎯
基本情報技術者 練習問題

Q1.主キーの制約として正しいものはどれか。
A.NULL を許可する
B.重複を許可する
C.一意かつ NULL 不可
D.必ず数値型でなければならない
Q2.外部キーの役割として正しいものはどれか。
A.テーブルの行を一意に識別する
B.他のテーブルの主キーを参照して関連を表現する
C.NULL を許可しない
D.インデックスを高速化する
Q3.1 人の顧客が複数の注文を持つ関係を表す多重度はどれか。
A.1:1
B.1:N
C.M:N
D.N:N

関連コンテンツ