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?

データベース入門

Posted at

1. データベースとは?

データベース(DB)とは、データを整理して保存・管理するシステム のこと。
SQLを使用してデータの追加・検索・更新・削除(CRUD)が可能。

  • RDB(リレーショナルデータベース) → MySQL, PostgreSQL, Oracle など
  • NoSQL → MongoDB, Redis など(テーブルを持たず柔軟なデータ構造)

2. 1対1(One-to-One)のテーブル例

1対1の関係は、1つのレコードが別のテーブルの1つのレコードにのみ対応する関係。
例:ユーザーとユーザーの詳細情報

📌 テーブル構造

CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

CREATE TABLE user_profiles (
    user_id INT PRIMARY KEY,
    email VARCHAR(255) NOT NULL,
    phone VARCHAR(20),
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
  • users に1つのレコードがあると、user_profiles にも 1つだけ 対応するデータがある。

📌 1対1の JOIN

SELECT users.id, users.name, user_profiles.email, user_profiles.phone
FROM users
INNER JOIN user_profiles ON users.id = user_profiles.user_id;

3. 1対多(One-to-Many)のテーブル例

1つのレコードが、別のテーブルの 複数のレコードに対応 する関係。
例:ユーザーと投稿(1人のユーザーが複数の投稿を持つ)

📌 テーブル構造

CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

CREATE TABLE posts (
    id INT PRIMARY KEY,
    user_id INT NOT NULL,
    content TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
  • usersidposts.user_id複数回登場可能1対多の関係

📌 1対多の JOIN

SELECT users.name, posts.content, posts.created_at
FROM users
INNER JOIN posts ON users.id = posts.user_id
ORDER BY posts.created_at DESC;

ユーザーごとの投稿を取得し、新しい順に並べる


4. 多対多(Many-to-Many)のテーブル例

1つのレコードが、別のテーブルの 複数のレコードに対応 し、かつ その逆もある
例:生徒と授業(1人の生徒が複数の授業を受け、1つの授業に複数の生徒がいる)

📌 テーブル構造

CREATE TABLE students (
    id INT PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

CREATE TABLE classes (
    id INT PRIMARY KEY,
    title VARCHAR(100) NOT NULL
);

CREATE TABLE student_classes (
    student_id INT NOT NULL,
    class_id INT NOT NULL,
    PRIMARY KEY (student_id, class_id),
    FOREIGN KEY (student_id) REFERENCES students(id) ON DELETE CASCADE,
    FOREIGN KEY (class_id) REFERENCES classes(id) ON DELETE CASCADE
);
  • 中間テーブル student_classes を作ることで、多対多を表現
  • student_id × class_id の組み合わせがユニーク(PRIMARY KEY (student_id, class_id)

📌 多対多の JOIN

SELECT students.name, classes.title
FROM students
INNER JOIN student_classes ON students.id = student_classes.student_id
INNER JOIN classes ON student_classes.class_id = classes.id;

生徒と受講している授業を取得


🔥 まとめ

関係 テーブル設計
1対1 usersuser_profiles user_profiles.user_idPRIMARY KEY にする
1対多 usersposts posts.user_idFOREIGN KEY を設定
多対多 studentsclasses 中間テーブル student_classes を作成
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?