こんにちは。データベース設計について勉強中です。
調べて自分なりに正規化してみました。アドバイスいただけると嬉しいですm(__)m
例題として大学の学生を管理するデータベースとします。
ポイントとしては下記になります。
- 大学名・学部・学生の追加、削除、変更あり
- 異なる大学でも同名の学部がある
- 二重学籍は認めないので、一人の学生が複数の大学に所属することはない
- 学生は退学、編入する場合あり
- 管理画面から大学と学部を選択し、学生の情報を入力して登録できる(大学を選択すると該当する学部だけが選択可)
- 表示画面では大学または学部を選択すると該当する学生を表示する
- 登録するデータ(学生)は数千件を予定、多くても数千前半(〜5000件)で、万件はいかない
表示画面では下記のように大学または学部のカテゴリを選択すると該当する学生を表示するイメージでいます。
非正規形を下記のようにしました。
私なりに正規化したものが下記です。
理由と悩んだ箇所
- 「学生表」に「大学ID」と「学部ID」の項目を入れて管理しても問題なさそうに思えましたが、「学生・大学・学部表」として別々にしました。(別々にすると無駄なテーブルが増えるだけ?)
- 最初は大学ごとに学部を管理するテーブルを作成しようと思いましたが、同じ学部名があるため、「学部表」として一つのテーブルまとめました。(まとめると不都合ありますか?)
- 管理画面上で大学を選択すると該当する学部のみを選択できるようにしたいので、それを管理するために「大学・学部表」というテーブルを作成しました。
私が一番気にしてる点は、「学部」です。
気にする点が的外れかもしれませんが、「大学」と「学部」は親子関係にもかかわらず、「学部」を一つにまとめて管理しても問題ないのかという点です。
データベース設計をしたことがないため、質問での情報が少なかったり、正規化に問題があるかと思います。
気になる点などございましたら、何でも良いのでご意見くださいm(__)m
回答しやすいように表組みのテンプレを下記に記載しておきます。
表組みテンプレ
学生・大学・学部表 |学生ID|大学ID|学部ID| |:--|:--|:--| 学生表 |学生ID|氏名|電話番号|住所|登録年月日| |:--|:--|:--|:--|:--| 大学・学部表 |大学ID|学部ID| |:--|:--| 大学表 |大学ID|大学| |:--|:--| 学部表 |学部ID|学部| |:--|:--|