CONTENTS コンテンツ

SQLを学ぼう!(6)

学習編-SQL

2024.06.22

 生成AIで架空のポケモンを作るためのデータベースを作る過程で必要になったSQLについて学んでいます。今回は論理設計。しょっぱなから難しいのでChatGPTに問題作らせて手を動かして学んでいこう。

入力:多対多関連集合をテーブルに変換する練習問題を作ってください

出力:

もちろんです。多対多のリレーションシップをテーブルに変換する練習問題を以下に作成しました。この練習問題では、多対多の関係を持つエンティティ間の関連テーブルを設計することに焦点を当てています。

練習問題

問題1: 学生とコース

学生は複数のコースに登録できます。同様に、各コースには複数の学生が登録されます。この多対多のリレーションシップを解消するための関連テーブルを設計してください。

エンティティ:

  • 学生 (Student)
    • student_id (PK)
    • name
    • enrollment_date
  • コース (Course)
    • course_id (PK)
    • course_name
    • credits

質問1.1: 学生とコースの多対多のリレーションシップを解消するための関連テーブルを設計し、そのテーブルのスキーマを示してください。

問題2: 著者と本

各著者は複数の本を書くことができ、各本は複数の著者によって書かれることがあります。この多対多のリレーションシップを解消するための関連テーブルを設計してください。

エンティティ:

  • 著者 (Author)
    • author_id (PK)
    • author_name
    • birthdate
  • 本 (Book)
    • book_id (PK)
    • title
    • publication_year

質問2.1: 著者と本の多対多のリレーションシップを解消するための関連テーブルを設計し、そのテーブルのスキーマを示してください。

問題3: 医師と患者

医師は複数の患者を担当し、各患者は複数の医師に担当されることがあります。この多対多のリレーションシップを解消するための関連テーブルを設計してください。

エンティティ:

  • 医師 (Doctor)
    • doctor_id (PK)
    • doctor_name
    • specialty
  • 患者 (Patient)
    • patient_id (PK)
    • patient_name
    • date_of_birth

質問3.1: 医師と患者の多対多のリレーションシップを解消するための関連テーブルを設計し、そのテーブルのスキーマを示してください。

問題4: プロジェクトと従業員

各プロジェクトには複数の従業員が関与し、各従業員は複数のプロジェクトに関与することがあります。この多対多のリレーションシップを解消するための関連テーブルを設計してください。

エンティティ:

  • プロジェクト (Project)
    • project_id (PK)
    • project_name
    • start_date
  • 従業員 (Employee)
    • employee_id (PK)
    • employee_name
    • hire_date

質問4.1: プロジェクトと従業員の多対多のリレーションシップを解消するための関連テーブルを設計し、そのテーブルのスキーマを示してください。

問題5: 学生とクラブ

学生は複数のクラブに所属することができ、各クラブには複数の学生が所属しています。この多対多のリレーションシップを解消するための関連テーブルを設計してください。

エンティティ:

  • 学生 (Student)
    • student_id (PK)
    • student_name
    • grade
  • クラブ (Club)
    • club_id (PK)
    • club_name
    • club_type

質問5.1: 学生とクラブの多対多のリレーションシップを解消するための関連テーブルを設計し、そのテーブルのスキーマを示してください。

回答例(略)

 これらの練習問題を通じて、多対多のリレーションシップを解消するための関連テーブルの設計方法を学ぶことができます。

 解き始めてみたら、5問全部実質同じ問題だった。2問目で気づいた。次行こう。

入力:1対多関連集合をテーブルに変換する練習問題を作ってください

出力:

もちろんです。以下に、1対多のリレーションシップをテーブルに変換する練習問題を作成しました。この練習問題では、1対多の関係を持つエンティティ間の関連テーブルを設計することに焦点を当てています。

練習問題

問題: 部門と従業員

各部門には複数の従業員が所属していますが、各従業員は一つの部門にのみ所属しています。この1対多のリレーションシップを解消するためのテーブルを設計してください。

エンティティ:

  • 部門 (Department)
    • department_id (PK)
    • department_name
  • 従業員 (Employee)
    • employee_id (PK)
    • employee_name
    • hire_date
    • department_id (FK)

質問: 部門と従業員の1対多のリレーションシップを解消するためのテーブルを設計し、それぞれのテーブルのスキーマを示してください。

回答例

CREATE TABLE Department(
  department_id INTEGER PRIMARY KEY,
  department_name VARCHAR(255)
);

CREATE TABLE Employee(
  employee_id INTEGER PRIMARY KEY,
  employee_name VARCHAR(255),
  hire_date DATE,
  department_id INTEGER,
  FOREIGN KEY(department_id) REFERENCES Department(department_id)
);

 関連集合の特性を記述するようテーブルに変換する、返還の仕方は先人の知恵があるので覚える、といったあたりか。あーなるほどね。完全に理解した

次回に続く

この記事をシェアする