質問: ### 前提・実現したいこと プログラミング初学者です。 PHPでQ&Aサイトを作っています。 データベースのテーブル数について、最小限にまとめるのと内容ごとに分けるのどちらが良いかアドバイスいただきたいです。 ### 詳細 Q&Aサイトを作るためにデータベース設計をしていたのですが、 こちらのように内容ごとに分けて作成するのか、 user_list question_list answer_list comment_list もしくは、こちらのように極力まとめた方が良いのか、悩んでいます。 user_list question_list (id/title/q_user/question/a_user/answer/c_user/comment/・・・) →question/answer/commentなどの更新があるたびに該当箇所以外はそのままで行を追加して更新 今のところ後者で進めていますが、 例えば質問の一覧表示の時に重複する項目を省いて表示するなど、この先を考えると手間も多そうで。。 ただ前者の場合は、複数テーブルの呼び出しが煩雑なようにも思います。 一般的に正しい方法、皆様のオススメの方法があればぜひ教えていただきたいです。よろしくお願いいたします。
回答: 大変申し訳ございませんが、下の作りはリレーショナルデータベースとはとても言い難い設計であるとしか言えません。(Q&Aの内容が少量であれば妥協できる範囲ではありますが、日々蓄積されるものであれば厳しいでしょう) もし自分がやるなら上を採用してこんな感じですね。 ``` question_list id auto_increment user_id title text answer_list id auto_increment question_id -- どのquestionが親なのか user_id text comment_list id auto_increment answer_id -- どのanswerが親なのか user_id text ``` それぞれのテーブルのuser_id、question_id、answer_idにはindexを張ってださい