生成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)
);
関連集合の特性を記述するようテーブルに変換する、返還の仕方は先人の知恵があるので覚える、といったあたりか。あーなるほどね。完全に理解した
次回に続く