※ ChatGPTを利用し、要約された質問です(原文:ER図について)
ER図について
このQ&Aのポイント
ER図を書く練習をしています。申請者と合格者の関係を表すER図を書くため、合格/不合格の情報をどのテーブルに持たせるかを考えています。
申請書テーブルと申請者テーブルの関係によって、合格/不合格の情報の持たせ方が異なります。一つは申請者テーブルに直接持たせ、もう一つは合格者テーブルを作成して関係させる方法です。
どちらの設計も有効ですが、メリットとデメリットがあります。申請者テーブルに直接持たせる方法はシンプルで簡潔ですが、合格者テーブルを作成する方法はより正規化された設計と言えます。どちらの方法を選ぶかは、使用するシステムや要件によります。
ER図を書く練習をしています。
就職するために会社に申請し、審査後に応募者(申請者)を受け入れる(合格)か拒否するか(不合格)を決めるケースを想定してER図を描きました。焦点は、「合格/不合格の情報をどのテーブルに持たせるのがよいか」です。添付のURLに(1)、(2)の2つのケースを考えて書いてみました。いずれのテーブルもものすごく簡単に書いたので突っ込みどころは満載だと思いますが、あくまでも、合格/不合格の情報をどこに持たせるかだけに特化したものと考えてください。
(1)http://www.dotup.org/uploda/www.dotup.org15911.jpg.html
(2)http://www.dotup.org/uploda/www.dotup.org15912.jpg.html
申請書テーブルは、申請者から受け取った書類を管理するテーブルです。受け取った日や、本件のステータス、結果を応募者に送信したかなどの情報を持ちます。イベント系(トランザクション系)のテーブルです。
(1)のやり方
申請者テーブルには申請者の情報そのものを書類から入力するリソース系(マスタ系)のテーブルです。名前、年齢、前職。。その他諸々を保持します。ここに、合格か不合格かをok_ngというbooleanで持たせることとします。
(2)のやり方
(1)と同様、申請者のテーブルはあるのですがok_ngという属性を持たせずに、代わりに別リソース系テーブル「合格者」を作ります。申請者と合格者の関係は1対1です。お互いがお互いのプライマリキーを参照する外部キーを持ちます。申請者テーブルと合格者テーブルのオプショナリティは必須対任意とします。つまり、申請者のうち、合格した人のみが合格者テーブルに登録されるということです。
上記2点の設計は、どちらも有効でしょうか?有効だとするとメリット、デメリットなどありますでしょうか?
(2)のやり方を書いた理由は、とある本に飛行機の「乗客テーブル」と「マイレージプログラム加入者テーブル」のER図があり、その関係が丁度本件の「申請者テーブル」と「合格者テーブル」のような関係になっているのを見た事があるからです。コメント等あれば宜しくお願いします。
お礼
有り難うございました。