多くのブログと多数のユーザーを持つエンジンを構築しています。ユーザーには多くのブログを持たせることができ、ブログには多くのユーザーを持てる(ユーザーにはブログがあります)。私はこのようになりますと呼ばれるusers_blogsピボットテーブルを作成します。ピボットテーブルを別のテーブルに結合する(HABTMがHABTMとモデルの関連付けに参加する)
はid user_id blog_id role
1 1 1 admin
2 1 2 poster
3 2 2 admin
ので、ユーザ1が1と2をブログに属し、ユーザ2はブログに属し2.ユーザー1は、ブログ1における管理者であり、ブログ2のポスター、ユーザー2はブログ2の管理者です。
投稿があります。 users_blogsには多くの投稿があり、投稿には多くのusers_blogが含まれます。彼らはこのようになります。ピボットテーブルと結合されます:、users_blogsを参照して、だから、
id users_blog_id post_id
1 2 1
2 3 1
ブログ2上のユーザー1私はポスト1.
を作成するために、ブログ2に、ユーザー2と協力MVCには比較的新しいので、最初のテーブルの「ロール」データがどこにあるのかが分かりますか?そしてB)この構造を行う正しい方法がありますか?フレームワークは私のために魔法をやるでしょう、私はちょうどこれが意味をなさないことを確認したい、そして私は正しい命名規則を持っている。私はCakephpを使っていますが、この質問にはRailsプログラマが答えられると思います。
ありがとうございました!
あなたはアルファベット順のことを正しく理解しており、最初の質問に「ロール」がピボットテーブルに存在する必要があります。 ユーザー1には100個のブログがあります。ブログ1からユーザー1の投稿を取得する場合は、すべてのposts_usersを取得してからすべての投稿を取得し、blog_idとuser_idとを一致させる必要があります。 代わりに、blogs_users_postsテーブルがあればどうなりますか?私たちは、ユーザー1とブログ1を表すblogs_users(blog_user_id)から1つのレコードを取得し、そのblog_user_idでblogs_users_postsのすべての投稿を検索します。これを行うのは上記の方法よりも速いようです。これは正しいですか? ありがとうございます! – MattDiamant
ブログ1からユーザー1の投稿を取得する場合は、ブログIDとuser_idを既に所有していることを前提としています。その特定のブログの投稿を投稿します(投稿テーブルにはblog_idがあります)。 user_id = 1の投稿のみが必要です。たぶん私は何かが欠けているでしょうか? – Dave
私の問題がどこにあるかは分かります。私は、blog_idをusers_postsテーブルに追加するといくらかの価値があると思っていました。 1つのテーブルにuser_idとblog_idがある場合、そのテーブルから出ることなく、そのブログのそのユーザーのすべてのpost_idを見つけることができます。これは本当にブログ内のユーザーの投稿をカウントする場合にのみ役立ちます。 1つのテーブルにuser_idとblog_idの両方がある場合は、それらを組み合わせてusers_blog_idとし、users_blogsを参照してください。これにより、テーブルがusers_postsと同じサイズになり、詳細情報が得られます。私はそれもクエリ時間を節約すると思ったが、そうではない。 – MattDiamant