生成AIで架空のポケモンを作るためのデータベースを作る過程で必要になったSQLについて学んでいます。今回はデータベース設計。ChatGPTに作らせた問題を解いています。
入力:ERモデルを理解するための練習問題を5問作ってください
出力:
ERモデル(エンティティ・リレーションシップモデル)を理解するための練習問題を以下に作成しました。これらの問題を通じて、ER図の基本的な概念や構築方法を学ぶことができます。
練習問題
問題1: エンティティの特定
ある会社のデータベースを設計しています。以下の情報を基にエンティティを特定してください。
- 会社には複数の部門があり、各部門には複数の従業員が所属しています。
- 従業員はそれぞれ一つの部門に所属します。
- 各部門には一つの管理者がいます。
質問1.1: このシナリオにおけるエンティティを特定してください。
問題2: リレーションシップの特定
以下のシナリオを基にリレーションシップを特定してください。
- 学生は複数のコースに登録できます。
- 各コースには複数の学生が登録されます。
- 各コースは一人の講師によって教えられます。
- 講師は複数のコースを教えることができます。
質問2.1: このシナリオにおけるリレーションシップを特定し、それぞれのリレーションシップがどのエンティティ間で存在するかを明示してください。
問題3: 属性の特定
以下のエンティティのための主要な属性を特定してください。
- 学生 (Student)
- コース (Course)
- 講師 (Instructor)
質問3.1: 学生エンティティの主要な属性を特定してください。 質問3.2: コースエンティティの主要な属性を特定してください。 質問3.3: 講師エンティティの主要な属性を特定してください。
問題4: ER図の作成
以下の情報に基づいてER図を作成してください。
- 図書館には多くの本があります。
- 各本は一つまたは複数の著者によって書かれています。
- 各著者は一つまたは複数の本を書いています。
- 図書館には多くの会員がいて、会員は一つまたは複数の本を借りることができます。
- 各本は一人の会員によって借りられます。
質問4.1: このシナリオに基づいてER図を作成してください。
問題5: 多重度の特定
以下のシナリオを基にエンティティ間の多重度を特定してください。
- ある病院には複数の医師が勤務しています。
- 各医師は複数の患者を担当します。
- 各患者は一人または複数の医師によって担当されます。
質問5.1: このシナリオにおける医師と患者の間の多重度を特定してください。
回答例
回答1.1:
- エンティティ: 部門(Department)、従業員(Employee)
回答2.1:
- 学生とコースの間: 多対多
- コースと講師の間: 多対一
- 講師とコースの間: 一対多
回答3.1:
- 学生エンティティの属性: 学生ID、名前、登録日、メールアドレス 回答3.2:
- コースエンティティの属性: コースID、コース名、クレジット数 回答3.3:
- 講師エンティティの属性: 講師ID、名前、専門分野、メールアドレス
回答4.1:
- エンティティ: 本(Book)、著者(Author)、会員(Member)
- リレーションシップ: 本と著者の間は多対多、会員と本の間は一対多
回答5.1:
- 医師と患者の間: 多対多
これらの問題を通じて、ERモデルのエンティティ、リレーションシップ、属性、ER図の作成、多重度の理解を深めることができます。
解いてみたところ、リレーションと属性がごっちゃになっていたことが判明した。ポケモンに例えるなら、実体①:ポケモン名、実体②(属性a):タイプ、実体③(属性b):H種族値…で、実体①~③の値が例えば①ピカチュウ、②でんき、③35。リレーションを見ると、①-②は多対1(ピカチュウのタイプは電気単のみだが、電気単のポケモンはピカチュウ以外にもいる)①-③も多対1(ピカチュウのH種族値は35固定だが、H種族値35のポケモンはピカチュウ以外にもいる)②-③は多対多(タイプとH種族値に特定の制約はない)
自分の頭で考えると理解できた気になる。理解した気になったので先に進もう。次は論理設計。
次回に続く