2. 導入:環境確認とデータベースの説明

2.1. 環境の確認

まずは今日使う環境にアクセスできるか確認しましょう。

pgAdminを開いて、以下の情報でログインしてください:

アクセスできたら、左側のツリーから「workshop_db」を探してみてください。

注釈

データベースに接続する際、パスワード(workshop123)の入力を求められる場合があります。 「パスワードを保存」にチェックを入れると、次回以降の入力を省略できます。

重要

今回の環境は一時的な利用となるため、作成したSQLクエリは各自テキストエディタ等でメモを取って保存しておくことをおすすめします。 ワークショップ終了後も復習に活用できます。

2.2. 今日使うデータベース

中学校の成績管理システムをイメージしたデータベースを用意しました。 実際の学校でもこんな感じでデータを管理しているかもしれませんね。

2.3. テーブル構成

以下の5つのテーブルを使います:

1. classes(クラス)

  • クラスID、学年、クラス名

2. students(生徒)

  • 生徒ID、名前、クラスID

3. subjects(教科)

  • 教科ID、教科名

4. exams(テスト)

  • テストID、テスト名、実施日

5. scores(成績)

  • 成績ID、生徒ID、教科ID、テストID、点数

2.4. データの関係性

これらのテーブルがどう繋がっているか、簡単に見てみましょう。

erDiagram classes ||--o{ students : "1対多" students ||--o{ scores : "1対多" subjects ||--o{ scores : "1対多" exams ||--o{ scores : "1対多" classes { int class_id PK "クラスID" int grade "学年" string class_name "クラス名" } students { int student_id PK "生徒ID" string name "氏名" int class_id FK "クラスID" } subjects { int subject_id PK "教科ID" string subject_name "教科名" } exams { int exam_id PK "テストID" string exam_name "テスト名" date exam_date "実施日" } scores { int score_id PK "成績ID" int student_id FK "生徒ID" int subject_id FK "教科ID" int exam_id FK "テストID" int score "点数" }

関係性の詳しい説明:

  • クラスと生徒の関係(1対多):1つのクラスには複数の生徒が所属します。生徒は必ず1つのクラスに所属しています。

  • 生徒と成績の関係(1対多):1人の生徒は複数の成績データを持ちます(教科やテストごとに成績があるため)。

  • 教科と成績の関係(1対多):1つの教科に対して複数の成績データが存在します(生徒やテストごとに成績があるため)。

  • テストと成績の関係(1対多):1つのテストに対して複数の成績データが存在します(生徒や教科ごとに成績があるため)。

つまり、成績テーブルは「誰が(生徒)」「どの教科の(教科)」「どのテストで(テスト)」「何点取ったか(点数)」という情報を記録する中心的な役割を果たしています。

これがJOINを使う理由です。バラバラのテーブルから必要な情報を組み合わせて取り出せます。

2.5. 確認してみよう

pgAdminのクエリツールを開いて、以下のSQLを実行してみてください:

-- 生徒数を確認
SELECT COUNT(*) FROM students;

60と表示されれば成功です。

準備はOKですか。それでは本編に進みましょう。