あなたがここに私のモデルを見ることができます。usersテーブルのカラムとしてロールを持つ方がよいか、またはジョインテーブル(ロール&アサインメント)を使用してロールする方が良いですか? - Railsの3
https://gist.github.com/768947
をちょうど何が起こっているかを説明するために、私はいくつかのモデルを持っています。私のアプリの中核には、プロジェクト、ステージ、アップロード、コメント、ユーザーがあります。次に、ユーザ認証を管理するためのロールが割り当てられています(&)。
私はログインのためにプラグインdeclarative_authorization & deviseでこれを行います。
最初の質問は、ユーザーモデル/テーブルに「ロール」の列を追加し、そこに各ユーザーのロールを格納する方が良いでしょうか?複数のロールを持つユーザーがいる場合は、すべてのロールを配列として格納し、必要に応じてそれらのロールを循環させることができます。
また、私は今セットアップをしているようにするのが良いですか?2つの別々のテーブルと割り当てを設定するための束を使用していますか?私はデザイナー、クライアント、管理者、スーパーユーザーの4つの役割しか持っていません。
コンピューティングリソースの観点からは、ジョインよりも各列のクエリを実行する方が「コストがかからない」という意味で、それほど重要ではないという点で、
私の疑問の根源は...今、私は単にcurrent_user.projects.each do |project|
を実行し、そのようにサイクルを実行するcurrent_userに割り当てられたプロジェクトを取得したいと思っています。これは私がやった後です:@projects = current_user.projects
プロジェクトのコントローラです。私の他のすべてのモデルにも同じことが適用されます - ユーザ&ロールを除く
しかし、「クライアント」の役割を持つユーザーを探したければ、非常に素早く畳み込まれます。または私はそれをovercomplicatingですか?
ご協力いただければ幸いです。
Hrmm .....この応答duffymoのおかげで...しかし、スケーラビリティの問題についてはどうですか?長期的には、パフォーマンスの面でより多くのクエリを実行する必要はありません(単純な行の検索ではなく、結合の面で)追加の列を持つテーブルではなく3つのテーブルがある場合、正規化にどのような影響がありますか? – marcamillion
正規化の方がはるかに優れています。はるかに複雑なスキーマを持つデータベースは非常にうまく拡張できます。これはまだ1つのクエリです.3つのテーブルを結合することになります。いいえ、あなたが撮影している測定値、あなたがそれを満たしていないというデータ、3つのテーブルJOINを示す測定値が原因となるまでは、パフォーマンスに悪影響を及ぼしません。それが起こると、必要に応じて非正規化することができます。あなたは時期尚早な最適化の罪を犯しています。 – duffymo
それは私が心配していたものです...早すぎる最適化の問題です。ことは、私はあなたの要点の投稿から見ることができますように、私はそれが今のように(ユーザー、役割と割り当て)設定している。しかし、私はロールへのアクセスについての助言を得ていました。私が与えられたアドバイスはちょうどそのものでした。ユーザーテーブルに列を追加しました。アドバイスありがとうございます。 – marcamillion