質問: ### 前提・実現したいこと Railsで、学生たちに国語・数学・理科・社会・英語の習熟度をラジオボタンを使って0~5段階でチェックしてもらうアプリを作成しようとしています。 ### 躓いていること DB設計で躓いてしまい、お力をお借りしたいです。 今回、例えば数学であれば、 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/09bdbd8bbe80965c4bfad6d46056ffc5.jpeg) このように、大項目の下に中項目、中項目の下に小項目、というような形式です。 これが残り4教科分あります。 加えて、最後にアンケート欄を設けます。 ### 考えてみたテーブル設計 ■ Userテーブル name:string password:string あとadminなど追加、、、 ■ Questionテーブル user_id:integer ← 誰の回答なのかを管理するため description:text ← 冒頭の説明文 ■ FirstClassテーブル(大項目) first_title:text ← 大項目の名称(数学) ■ SecondClassテーブル(中項目) second_title ← 中項目の名称(数I、数A) first_class_id:integer ← どの大項目に属するかを管理するため ■ ThirdClassテーブル(小項目) third_title ← 小項目の名称(順列) first_class_id:integer ← どの大項目に属するかを管理するため second_class_id:integer ← どの中項目に属するかを管理するため ■ ForthClassテーブル(少々項目) forth_title ← 小項目の名称(円順列、重複順列) first_class_id:integer ← どの大項目に属するかを管理するため second_class_id:integer ← どの中項目に属するかを管理するため third_class_id:integer ← どの小項目に属するかを管理するため ■ Answerテーブル user_id:integer ← 誰のアンケートなのかを管理するため first_class_id:integer ← どの大項目に属するかを管理するため second_class_id:integer ← どの中項目に属するかを管理するため third_class_id:integer ← どの小項目に属するかを管理するため forth_class_id:integer ← どの少々項目に属するかを管理するため coice_number:integer ← 回答番号 今回のような少し複雑な表をデータベースにするとき、このような考え方で合っていますでしょうか?? 初歩的な質問かもしれませんが、どうぞよろしくお願い致します。
回答: 質問文にある表の形をそのまま DB にするので十分では? ``` User テーブル id, name, password, ... Category テーブル id, 教科名, 項目名1, 項目名2, 項目名3, 項目名4, 項目名5 Answer テーブル id, user_id, category_id, 回答 ``` Category テーブ中の文字列の重複記載が気になるなら、 ``` 名前 テーブル id, 名前 ``` として、Caeroby てテーブルに 名前_id を記載するようにすればよいです。 親子関係のリンクをレコードに持つ方法は柔軟性はありますが、質問文にあるような形式の表示を組み立てようとする際に苦労する気がします。