0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【DB】受講生管理システムで理解するDB用語集

0
Posted at

はじめに

プログラミングを勉強していると、以下のようなDB(データベース)用語をよく目にします。

  • テーブル
  • レコード
  • カラム
  • 主キー(PK)
  • 外部キー(FK)
  • SQL
  • JOIN
  • トランザクション
  • インデックス
  • マイグレーション

DB初心者の頃は、

「テーブルとレコードって何が違うの?」
「PKとFKって何?」
「JOINって何をしているの?」
「MigrationってDBとどう関係するの?」

と、用語だけではなかなかイメージしづらいと思います。

そこでこの記事では、**「受講生管理システム」**を例にして、DB関連の基本用語を初心者向けに整理します。


1. データベース(Database / DB)

データベースとは、システムで使用するデータを整理して保存しておく仕組みです。

受講生管理システムであれば、例えば以下のような情報を保存します。

  • 受講生情報
  • 講座情報
  • 受講情報
  • 講師情報
  • 成績情報

イメージとしては、

DB = システム全体の大きなデータ保管庫

と考えると分かりやすいです。


2. DBMS

DBMSは、

Database Management System

の略です。

データベースを管理・操作するためのソフトウェアを指します。

代表的なDBMSには、以下があります。

  • PostgreSQL
  • MySQL
  • Oracle Database
  • SQL Server

例えば、受講生管理システムでPostgreSQLを使用している場合、

受講生管理システム
        ↓
    PostgreSQL
        ↓
     データ保存

という関係になります。


3. テーブル(Table)

テーブルとは、同じ種類のデータをまとめて保存する場所です。

例えば、受講生を管理するために students テーブルを作ります。

id name email age
1 山田太郎 yamada@example.com 20
2 佐藤花子 sato@example.com 22

また、講座を管理するために courses テーブルを作ります。

id name
1 Java基礎
2 Ruby基礎

このように、データの種類ごとにテーブルを分けて管理します。

覚え方

テーブル = データを入れておく箱

Excelでいうと、1枚のシートに近いイメージです。


4. レコード(Record)

レコードとは、テーブルに保存されている1件分のデータです。

例えば、以下のテーブルがあるとします。

id name email
1 山田太郎 yamada@example.com
2 佐藤花子 sato@example.com

この場合、

  • 山田太郎 → 1レコード
  • 佐藤花子 → 1レコード

です。

覚え方

レコード = データ1件

受講生管理システムなら、

レコード = 受講生1人分のデータ

と考えると分かりやすいです。


5. カラム(Column)

カラムとは、テーブルにあるデータの項目です。

例えば、

id name email age
1 山田太郎 yamada@example.com 20

この場合、

  • id
  • name
  • email
  • age

がカラムです。

覚え方

カラム = データの項目

Excelでいうと、にあたります。

例えば受講生であれば、

name  → 名前
email → メールアドレス
age   → 年齢

という関係です。


6. テーブル・レコード・カラムの違い

ここはDB初心者が特に混乱しやすいところです。

例えば、

students テーブル

┌────┬────────┬────────────────────┬─────┐
│ id │ name   │ email              │ age │
├────┼────────┼────────────────────┼─────┤
│ 1  │ 山田太郎 │ yamada@example.com │ 20  │
│ 2  │ 佐藤花子 │ sato@example.com   │ 22  │
└────┴────────┴────────────────────┴─────┘

とすると、

用語 意味
テーブル students 全体
レコード 山田太郎などの1行
カラム idnameemailageなどの項目

となります。


7. 主キー(Primary Key / PK)

主キーとは、データを一意に識別するための値です。

例えば、

id name
1 山田太郎
2 佐藤花子
3 鈴木一郎

というテーブルがあった場合、id が主キーです。

「山田太郎」という名前は、同姓同名の人がいる可能性があります。

しかし、

id = 1

という番号は1人だけに割り当てます。

覚え方

主キー = データを一意に識別するための番号

受講生管理システムなら、

受講生一人ひとりを識別するためのID

と考えると分かりやすいです。


8. 外部キー(Foreign Key / FK)

外部キーとは、別のテーブルのデータを参照するためのカラムです。

例えば、

students

id name
1 山田太郎
2 佐藤花子

enrollments

id student_id course_id
1 1 10
2 2 20

この場合、

enrollments.student_id
        ↓
students.id

という関係があります。

student_id = 1 なら、

「この受講情報は、studentsのid=1の山田太郎のもの」

と分かります。

覚え方

外部キー = 別のテーブルとつなぐためのID

です。


9. SQL

SQLとは、データベースに対して命令を出すための言語です。

例えば、

SELECT *
FROM students;

と書くと、

「studentsテーブルのデータを取得してください」

という意味になります。

SQLには、代表的な以下の命令があります。

SQL 意味
SELECT データを取得する
INSERT データを追加する
UPDATE データを更新する
DELETE データを削除する

10. SELECT

SELECTは、DBからデータを取得するためのSQLです。

SELECT *
FROM students;

これで、受講生を全員取得できます。

条件を指定することもできます。

SELECT *
FROM students
WHERE age >= 20;

これは、

「20歳以上の受講生を取得する」

という意味です。

覚え方

SELECT = データを取得する


11. INSERT

INSERTは、DBに新しいデータを追加するためのSQLです。

例えば、新しい受講生「田中一郎」を登録します。

INSERT INTO students (name)
VALUES ('田中一郎');

覚え方

INSERT = データを追加する


12. UPDATE

UPDATEは、DBに保存されているデータを変更するためのSQLです。

例えば、山田太郎さんのメールアドレスを変更します。

UPDATE students
SET email = 'new@example.com'
WHERE id = 1;

これは、

「idが1の受講生のメールアドレスを変更する」

という意味です。

覚え方

UPDATE = データを変更する


13. DELETE

DELETEは、DBからデータを削除するためのSQLです。

DELETE FROM students
WHERE id = 1;

これは、

「idが1の受講生を削除する」

という意味です。

覚え方

DELETE = データを削除する


14. WHERE

WHEREは、SQLで条件を指定するために使います。

例えば、

SELECT *
FROM students
WHERE age >= 20;

これは、

「20歳以上の受講生だけ取得する」

という意味です。

他にも、

WHERE id = 1

なら、

「IDが1の受講生」

という意味になります。

覚え方

WHERE = 「どのデータ?」を指定する


15. IN句

IN句は、複数の候補のどれかに一致するデータを取得するときに使います。

例えば、

SELECT *
FROM students
WHERE id IN (1, 3, 5);

これは、

「受講生IDが1、3、5のいずれかである受講生を取得する」

という意味です。

覚え方

IN = 「この中のどれか」


16. NULL

NULLとは、値が存在しない状態を表します。

例えば、

id name phone
1 山田太郎 090-1111-1111
2 佐藤花子 NULL

佐藤花子さんの電話番号が NULL なら、

「電話番号が登録されていない」

という意味です。

注意点として、NULLは、

  • 0
  • ''(空文字)

とは異なります。


17. NOT NULL制約

NOT NULL制約とは、NULLを登録できないようにするルールです。

例えば、受講生の名前を必須項目にしたい場合、

name → NOT NULL

とします。

すると、

name = NULL

のデータは登録できません。

覚え方

NOT NULL = 必須項目


18. UNIQUE制約

UNIQUE制約とは、同じ値を重複して登録できないようにするルールです。

例えば、メールアドレスをUNIQUEにします。

yamada@example.com

というメールアドレスを2人の受講生に登録することができなくなります。

覚え方

UNIQUE = 重複禁止


19. 制約(Constraint)

制約とは、DBに登録するデータに対するルールです。

代表的な制約には以下があります。

制約 意味
PRIMARY KEY データを一意に識別する
FOREIGN KEY 他のテーブルとの関係を保証する
NOT NULL NULLを禁止する
UNIQUE 重複を禁止する
CHECK 条件に合わない値を禁止する

覚え方

制約 = DBのデータを正しく保つためのルール


20. JOIN

JOINとは、複数のテーブルをつなげてデータを取得する機能です。

例えば、

students

id name
1 山田太郎
2 佐藤花子

enrollments

student_id course_id
1 10
2 20

courses

id name
10 Java基礎
20 Ruby基礎

この3つのテーブルをJOINすると、

受講生 講座
山田太郎 Java基礎
佐藤花子 Ruby基礎

のようなデータを取得できます。

覚え方

JOIN = テーブル同士をつなぐ


21. インデックス(Index)

インデックスとは、データを高速に検索するための仕組みです。

例えば、受講生が100万人いるとします。

SELECT *
FROM students
WHERE email = 'yamada@example.com';

このような検索をするとき、email にインデックスを設定することで、検索を高速化できる場合があります。

イメージとしては、

Index = 本の巻末にある索引

です。

本を最初から全部読むより、索引を使って目的のページを探した方が速いですよね。

注意点

インデックスは多ければ多いほど良いわけではありません。

インデックスを作ると、検索は高速になる可能性がありますが、データの追加・更新時にインデックスの更新も必要になるため、適切に設計する必要があります。


22. トランザクション(Transaction)

トランザクションとは、複数のDB操作をひとまとまりの処理として扱う仕組みです。

例えば、受講生が講座に申し込む処理を考えます。

① 受講生を登録
      ↓
② 受講情報を登録
      ↓
③ 受講料を登録

もし②でエラーが発生した場合、

① 受講生だけ登録されている
② 受講情報は登録されていない

という不整合が発生してしまいます。

そこでトランザクションを使います。

① 受講生を登録
      ↓
② 受講情報を登録
      ↓
③ 受講料を登録
      ↓
   全部成功?
    ↙     ↘
  YES      NO
   ↓       ↓
COMMIT   ROLLBACK

つまり、

全部成功したら確定、途中で失敗したら全部取り消す

という仕組みです。


23. COMMIT

COMMITとは、トランザクションで行った変更を確定することです。

受講生登録
   ↓
受講情報登録
   ↓
受講料登録
   ↓
COMMIT
   ↓
すべて確定

覚え方

COMMIT = 確定


24. ROLLBACK

ROLLBACKとは、トランザクションで行った変更を取り消すことです。

受講生登録
   ↓
受講情報登録
   ↓
エラー発生
   ↓
ROLLBACK
   ↓
変更を取り消す

覚え方

ROLLBACK = 元に戻す

COMMITとセットで覚えると分かりやすいです。

COMMIT   → 確定
ROLLBACK → 取り消し

25. リレーション(Relation)

リレーションとは、テーブル同士の関係のことです。

受講生管理システムでは、

students
    ↓
enrollments
    ↓
courses

のような関係があります。

例えば、

山田太郎さんはJava基礎を受講している

という情報を、テーブル同士の関係によって表現できます。


26. 1対1(1:1)

1つのデータに対して、別テーブルの1つのデータが対応する関係です。

例えば、

受講生
  ↓
プロフィール

「1人の受講生に1つのプロフィールがある」という関係です。


27. 1対多(1:N)

1つのデータに対して、複数のデータが対応する関係です。

例えば、

受講生
  ↓
受講履歴
  ↓
受講履歴
  ↓
受講履歴

山田太郎さんが、

  • Java基礎
  • Ruby基礎
  • SQL基礎

の3つを受講している場合、

1人の受講生に対して複数の受講情報がある

ため、1対多の関係です。

Railsでは、例えば以下のように表現します。

class Student < ApplicationRecord
  has_many :enrollments
end

class Enrollment < ApplicationRecord
  belongs_to :student
end

28. 多対多(N:N)

多対多とは、複数のデータ同士が複数対応する関係です。

受講生管理システムでは、

受講生 ←→ 講座

が多対多になります。

なぜなら、

  • 1人の受講生が複数の講座を受講できる
  • 1つの講座を複数の受講生が受講できる

からです。

例えば、

山田さん → Java基礎
        → Ruby基礎

佐藤さん → Java基礎
        → SQL基礎

という状態です。


29. 中間テーブル

多対多の関係を管理するために使うのが中間テーブルです。

受講生管理システムなら、

students
courses
enrollments

という3つのテーブルを用意します。

この場合、enrollments が中間テーブルです。

id student_id course_id
1 1 10
2 1 20
3 2 10

このデータから、

山田太郎 → Java基礎
山田太郎 → Ruby基礎
佐藤花子 → Java基礎

という関係が分かります。

覚え方

中間テーブル = 「誰が何を受講しているか」のような関係を管理するテーブル


30. Migration(マイグレーション)

Railsを使っている場合、Migrationは特に重要な用語です。

Migrationとは、DBの構造変更をコードとして管理する仕組みです。

例えば、

「受講生に電話番号を登録できるようにしたい」

となった場合、students テーブルに phone カラムを追加する必要があります。

RailsではMigrationを使って、

add_column :students, :phone, :string

のように記述します。

すると、

変更前

students
├── id
├── name
└── email


        ↓ Migration


変更後

students
├── id
├── name
├── email
└── phone

のようにDBの構造を変更できます。

覚え方

Migration = DBの構造を変更するための仕組み・変更履歴

Railsでは、DBの変更をコードとして残せるため、

  • 誰が
  • いつ
  • どんな変更をしたか

を管理しやすくなります。


31. Schema(スキーマ)

Schemaとは、データベースの構造を表すものです。

例えば、

students
├── id
├── name
├── email
└── age

というテーブル構造や、

students
    ↓
enrollments
    ↓
courses

というテーブル同士の関係などが、DBのスキーマに関係します。

覚え方

Schema = DBの設計図

と考えると分かりやすいです。


32. Active Record

Railsを使っている場合、Active Recordも重要な用語です。

Active Recordとは、RailsからDBを操作するための仕組みです。

例えば、

Student.all

と書くと、students テーブルから受講生を取得できます。

また、

Student.find(1)

と書くと、IDが1の受講生を取得できます。

SQLを直接書かなくても、RubyのコードからDBを操作できます。

イメージとしては、

Ruby / Rails
      ↓
Active Record
      ↓
SQL
      ↓
Database

という関係です。


33. DB用語をまとめて整理

ここまでの用語を一覧にすると、以下のようになります。

用語 初心者向けの意味
DB データを保存する大きな保管庫
DBMS DBを管理するソフトウェア
テーブル データを入れておく箱
レコード データ1件
カラム データの項目
PK データを一意に識別するID
FK 他のテーブルとつなぐID
SQL DBを操作する言語
SELECT データを取得する
INSERT データを追加する
UPDATE データを変更する
DELETE データを削除する
WHERE 条件を指定する
IN 複数の候補から選ぶ
NULL 値が存在しない
NOT NULL NULLを禁止する
UNIQUE 重複を禁止する
Constraint データを守るためのルール
JOIN テーブル同士をつなぐ
Index 検索を高速化する仕組み
Transaction 複数の処理をひとまとまりにする
COMMIT 変更を確定する
ROLLBACK 変更を取り消す
Relation テーブル同士の関係
1:1 1対1の関係
1:N 1対多の関係
N:N 多対多の関係
中間テーブル 多対多の関係を管理するテーブル
Migration DBの構造変更を管理する仕組み
Schema DBの構造・設計図
Active Record RailsからDBを操作する仕組み

34. 最初に覚えたい15個

DB初心者の場合、最初からすべて覚える必要はありません。

まずは以下の15個を覚えることをおすすめします。

① DB

データを保存する場所。

② テーブル

データを種類ごとに保存する場所。

③ レコード

データ1件。

④ カラム

データの項目。

⑤ PK

データを一意に識別するもの。

⑥ FK

他のテーブルとつなぐためのもの。

⑦ SQL

DBを操作する言語。

⑧ SELECT

データを取得する。

⑨ INSERT

データを追加する。

⑩ UPDATE

データを更新する。

⑪ DELETE

データを削除する。

⑫ JOIN

テーブル同士をつなぐ。

⑬ Index

検索を高速化する。

⑭ Transaction

複数のDB操作をひとまとまりにする。

⑮ Migration

DBの構造変更をコードで管理する。


まとめ

DB用語は、単語だけで覚えようとすると分かりにくいですが、受講生管理システムのような具体的なシステムに当てはめると理解しやすくなります。

全体像としては、まず、

データベース
    ↓
テーブル
    ↓
レコード
    ↓
カラム

という構造を理解します。

そしてテーブル同士を、

PK
 ↓
FK
 ↓
リレーション
 ↓
JOIN

によって関連付けます。

さらにDBを操作するために、

SELECT  → 取得
INSERT  → 追加
UPDATE  → 更新
DELETE  → 削除

というSQLを使用します。

Railsを使う場合は、さらに、

Migration → DBの構造を変更
Active Record → RailsからDBを操作
Transaction → DB操作を安全にまとめる

という知識が重要になります。

まずは、

「テーブル・レコード・カラム」

の違いを理解するところから始めると、DBの学習がかなり進めやすくなります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?