Before I respond, I think that it would be helpful if you provided your 
database entity–relationship model.  Also, I don't see that you have a 
Classes, the school variety, table.
Liz

On Monday, August 17, 2015 at 1:18:38 AM UTC-4, Scott Goci wrote:
>
> I've been wrestling with database normalization and the "Rails Way" and I 
> wanted to get peoples opinions as to if there's a best practices guide to 
> how to do it. Here's some background:
>
> Let's assume we have a model/schema similar to the following:
>
> class Student < ActiveRecord::Base
>    has_many :student_exams
>    has_many :exams, through: :student exams
> end
>
> class StudentExam < ActiveRecord::Base
>   belongs_to :student
>   belongs_to :exam
> end
>
> class Exam < ActiveRecord::Base
>   has_many :questions
>   belongs_to :professor
>   has_one :college, through: :professor
> end
>
> class Question < ActiveRecord::Base
>   belongs_to :exam
>   has_many :responses
>   
>   # question_text: text
> end
>
> class Response < ActiveRecord::Base
>   belongs_to :question
>   belongs_to :student
>
>   # response_text: text
> end
>
> class Evaluation
>   belongs_to :response
>   belongs_to :professor
>
>   # grade: integer
> end
>
>
> The idea is that a *Professor* creates an *Exam* and* Questions*, and 
> then assigns students through *StudentExam* to take that exam. The 
> students then generate *Responses* to the exam questions, and then those 
> *Responses* are graded by *Evaluations* done by the *Professor*.
> Now, given the above background, I wanted to ask a few questions to get 
> peoples opinions on how to structure this app:
>
> *Questions*
>
>    1. In general, are there any changes you guys would make with the 
>    given associations?
>    2. For the *Response* model, does it make sense to do "belongs_to 
>    :student", or should it instead be "belongs_to :student_exam"? It 
>    feels more logical to have the former, because we can get the exam through 
>    the question if need be (response.question.exam), and its really a 
>    student responding to it, not a student_exam. But if we used student_exam, 
>    we could use response.student_exam.exam to get back to the exam, and 
>    response.student_exam.student to get back to the student.
>    3. If we were on an *Evaluation* and we wanted to back to a exam, it 
>    would seem quite cumbersome to do evaluation.response.question.exam 
>    just to get back to the exam. 
>       - Now we could always create a method on the model that just 
>       shortened it for us, but *is there a point when you are chaining 
>       associations that somewhere along the line you add in another 
> foreign_key 
>       to a table for easy lookup*?
>    4. If we wanted to see all *Evaluations* for an *Exam*, what would be 
>    the best way to do that? 
>       - Only way I could see to do it easily would be to break it up, 
>       something like:
>          - @questions = @exam.questions
>          - @responses = Response.where(question_id: @questions.pluck(:id)
>          - @evaluations = Evaluation.where(response_id: 
>          @responses.pluck(:id) 
>       - This seems kind of painful
>    
>
> Let me know your thoughts -- or if you have any great books on the best 
> strategies for normalizing/denormalizing within or without the scope of a 
> rails app, I'd love to hear them.
>
>
>
>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rubyonrails-talk/cb91044d-20dc-444c-8172-a7b72bffd3a4%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to