Serviceを読んで理解し、同意したものとみなします。1,075件21会員制の学習支援サイトをcakephp2.7で作りたいのですが、具体的にどういうテーブル設計にすればよいかよくわかりません。会員制なので会員テーブル(usersテーブル)でusernameカラムとpasswordカラムを用意。自動的に設定します」ということでチュートリアルを進めた結果確かにログイン機能はできました。次に、問題演習のための問題文テーブル(questionsテーブル)。カラムは問題IDカラム、q_body(問題文)カラム。この問題文テーブルに10問(10行)データが入っているとします。やりたいことは、会員登録したユーザ毎の進捗度の管理です。今考えているのは、ユーザ毎に進捗度テーブルを作って管理する方法です。進捗度テーブルには、問題IDカラム、1回目の結果を書き込むtry1カラム。2回目の結果を書き込むtry2カラム。...を用意するつもりです。ユーザーが、初めて問題1を解いたら進捗度テーブルの問題1の行のtry1カラムに結果を書き込む。ユーザーが、再び問題1を解いたら進捗度テーブルの問題1の行のtry2カラムに結果を書き込む。いうようなことを実現したいです。この場合会員1人につき進捗度テーブルを一つ用意することになると思うのですが、具体的にやるとなるとどうしていいかよくわかりません。会員登録時にその人用の進捗度テーブルを作る方法。1ができない場合、あらかじめ進捗度テーブルを連番でいっぱい作っておいて、会員登録した順に会員番号と進捗度テーブルを結びつける。いうことも考えたのですが、いずれにしても会員番号とその人用の進捗度テーブルを結びつける方法が必要。会員Aは会員A用進捗度テーブルには書き込めるが、他の会員用の進捗度テーブルには書き込めないような仕組みが必要。そのためには会員Aがログインした場合A用進捗度テーブルに書き込むためのフォーム(ページ)が表示されるようにする必要がある。これって会員制サイトのいわゆるマイページにあたるものだと思うのですが、どうすれば実現できるでしょうか?とりあえずテーブル設計の考え方は上記の方針で問題ないでしょうか(これでやりたいことが実現可能でしょうか?)上記の方法では無理あるいは著しく非効率なので普通はこうする、みたいなのがあればお願いします。個の銅バッジ文章を最後まで読んでcakephpの勉強がしたいというのがわかりました。書籍がいくつか出ているようですので、まずはそちらを参考にされると良いでしょうか。タイトルと質問内容がだいぶ異なっていると、質問への回答が非常につきにくくなりやすいです。1:06日本語を丁寧に使って説明や質問しようとしてるのは伝わります。丁寧に書こうとして、逆に読みにくくなってると思います。tableの掲載など工夫をして読みやすくすると考えが伝わって、良い解答が付くと思います。あと、空行や句読点などを付与してあげると、より伝わりやすくなると思います。5:162RDBの使い方というか基本的な考え方の部分で知識が不十分か大きな勘違いをされているように見受けられます。RDBの基礎であるとかDB設計(データモデリング)については書籍が多数ありますしweb上にもある程度体系的に解説されている記事もありますので、まずはそういうもので基本的な知識を身につけられた方がよいでしょう。CakePHPのようなWAFはRDBをある程度隠蔽してくれるのですが、データモデリングについてはほとんど手助けしてくれないのでこの点については自分で理解しておく必要があります。票7cakeの問題ではなく、リレーショナルデータベース(RDB)の使い方のイメージが付いていないのだと思います。・ユーザ毎にtableを作るのは現実的では有りません。・n回目の結果のように回数が変わる可能性があるものをカラムとして用意するのも現実的ではありません。RDBでは、正規化を行ってデータを効率良く格納する必要があります。正規化』でググるとたくさん出てきます。以下は、あくまで1つの例ですので、こうしなければならないというものではありませんので、参考として受け取ってください。結果tableは以下のように定義します。12:41このようなtableを用意して、ユーザAの結果が知りたい場合は、ユーザIDが『A』のレコードだけ絞り込みます。ユーザID='A'で以下のような結果が得られます。13:15更に、ユーザAの問題1の結果が知りたい場合は、ユーザIDが『A』で問題IDが『1』のレコードだけ絞り込みます。問題ID='1'で以下のような結果が得られます。12:41上記のような実行結果を利用してやるのがRDBの使い方です。結合』のようなキーワードでググッてみてください。このようなRDBの使い方を理解してからcakePHPの勉強をしないと、どちらの勉強も進まないと思います。がんばってみてください。個の銅バッジ解答ありがとうございました。キーワードを参考にして勉強してみます。|5進捗度テーブルは一つ作れば十分だと思います。進捗度テーブルに、ユーザーid(username)を格納するカラムを用意すればいいのです。(ユーザーidは会員テーブルの主キーだと思うので、進捗度テーブルからしたら、外部キーということになります。外部キーはデータベースエンジンによっては、必ずしも実装されているわけでもないので、それほどこだわる点ではないかもしれません。リレーショナル・データベースでは、クエリー(検索)時に、テーブルの写像(部分集合)を取り出すことができるので、つまり会員Aは会員A用進捗度テーブルには書き込めるが、他の会員用の進捗度テーブルには書き込めないような仕組みが必要。このようなことも、一つの進捗度テーブルで実現できます。使うなりする形になります。これにより、特定のユーザー名をもったエントリーのみの集合を結果として得ることができます。設定することに相当すると思います。ある問題を解いた回数も、同じユーザーの同じ問題に関するエントリーがいくつあるかをクエリーで調べることで足るので、特に、Try1〜TryNまでの項目を「カラムとして用意する」必要はありません。カラムにする設計だとむしろ柔軟性に欠けます。部分をフレームワークとして提供してくれていますが、データベースに関する理解は前提条件として求められていると思います。いった特定のフレームワーク・実装を扱う以前に、一度、リレーショナル・データベースについてせめて初級程度の勉強は別途済ませておくことをお勧めします。個の銅バッジ解答ありがとうございました。いただいた解説を参考にして考えてみます。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。