web-dev-qa-db-ja.com

学校システムのデータベーススキーマ設計

学校に関する情報を格納するデータベースを作成しようとしています。

学校の各学部を保管する必要があります。各部署には教師のリストがあります。各教師にはクラスのリストがあり、各クラスには学生のリストがあります。

部門名は一意になります。ただし、教師は部門をまたいでいる場合があります。もう1つ注意すべき点は、教師Aが「数学」と呼ばれるクラスを教え、教師Bも「数学」と呼ばれるクラスを教える場合、これらはデータベース内の異なるエンティティであるべきだと思います(私は思う) 。たとえば、「数学」のクラスに「教師A」のみが参加する学生のリストを取得したい場合があります。

これまでのところ私はこれを持っています:

  • departments(department_id、department_name)

  • teachers(teacher_id、Teacher_name);

  • departments_and_teachers(department_and_teachers_id、department_id(FK)、teacher_id(FK))

  • student(student_id、student_name)

  • teachers_and_students(department_and_teachers_idstudent_id);

データベース設計は良いと思いますか?ただし、「クラス」に関する情報は含まれておらず、スキーマを変更する最良の方法が何であるかはわかりません。各部門と教師のコンボに対して、教えられるクラスのリストを追加する必要があります。このようなことをすることはもっともらしいですか?

  • クラス(class_id、class_name)
  • departments_teachers_and_classes(dtc_id、department_and_teachers_id(FK)、class_id(FK));
  • department_teachers_classes_and_students(student_iddtc_id

[〜#〜] edit [〜#〜]-受け取った回答に基づく新しい提案

  • departments(department_id、department_name)
  • teachers(teacher_id、teacher_name)
  • classes(class_id、class_name、teacher_id(PK)、department_id(PK))
  • student(student_id、student_name);
  • classStudents(student_id(PK)class_id(PK)
5
roger smith

(簡単に満足できる)妥当性に関する特定の質問に対する答えは「はい」です。あなたはより幅広い批評を探しているようですので。あなたはほとんど正しい方向に進んでいるように見えますが、いくつかの理由で説明が過度に複雑になっています。

あなたのClassesテーブルは、私がコースであると考えるものに似ており、departments_teachers_and_classesは、Classesテーブルがそうであると期待しているもののようです。コースは数学ですが、クラスは特定の学期中に特定の教師が教える数学コースになります。クラスはコースのインスタンスのようなものです。

この変更を実行するには、departments_teachers_classes_and_studentsを単にClassStudentsにすることができます。

いくつかの異なるレベルで部門の概念を使用しているようです。部門が所属する場所を決定し、他の場所での参照を停止する必要があります。先生は複数の学部で教えることができるとおっしゃいましたが、その部門を教師のテーブルに入れることはできません。これはクラスとコースを残します。どちらを決定しても、Departmentsテーブルへの外部キーがあれば十分です(1つが複数のDepartmentにあることができると決定しない限り)。これにより、Departments_and_teachersテーブルが削除されます。

Teachers_and_Studentsは、Classesテーブルで教師の外部キーに、Classstutusテーブルで生徒/クラスの外部キーに置き換えることができます。

要するに、あなたが説明したデザインの部分については、おそらく以下のテーブルが必要です。

Departments
Teachers
Students
Courses
Classes
ClassStudents
Terms
5
Leigh Riffel

いくつかの批評:

  1. 問題を適切な言葉で説明しようとするべきだと思います。何かが「のリストを持っている」と私たちに言った場合、あなたは問題をうまく説明していません。部署に教師のリストがあると書いた場合、教師は一部の部署で講師を務めており、これらの部署ではいくつかの科目についてクラスを開いていると言いたいと思います。 「教師がクラスのリストを持っている」とだけ言うと問題が発生します。

    • このリストが問題の残りの部分とどう関係するかはわかりません。もちろん、このリストには、先生のクラスを受講する生徒の名前が含まれていると思います。しかし、より難しいモデリング問題に取り組んでいる場合、私の想像力は間違っているかもしれません。

    • リストは学科と教師を含むテーブルを意味するため、おそらくあなたは私を間違った方向に導きます。

    • これらのリストが実際には存在せず、想像の中にしか存在しない場合、これらのリストについて詳しく尋ねることは難しい

  2. 適切な説明に基づいて、エンティティ関係モデルを作成しようと思います

  3. 次に、いくつかのルールを適用して、エンティティ関係モデルをテーブルに変換します

あなたの説明は十分ではないので、あなたのデザインを批判し、さらに詳細な表を提案することは困難です。しかし、departments_and_teachers-tableは私には非常に疑わしく見えます。これは、教師を含む学科のリストを実装する必要がありますか?追加のIDがあるのはなぜですか?このリストで、department_and_teachers_idが異なるdepartement-teacherペアを複数回持つことはできますか?

2
miracle173