Topic: High-level architecture advice for a student-teacher-q&a web app
My application needs to keep track of:
There can also be many students associated with a given teacher and a student can also have many teachers. Students and teachers are associated through courses that are taught by the teachers and that the students enroll in.
Each course consists of many classes, but a class can only be associated with one course.
"Questions" are multiple-choice questions with between 2 and 7 options for the answer, labelled A - G. There are limitless questions and people will be allowed to create their own.
In the course of a class, a teacher may select a question and pose it to the students enrolled in the course. This is intended to happen in an immediate and time-sensitive manner. For instance, imagine that there are 10 students enrolled in a course and that each time they meet the teacher sits at the front of the class with a laptop and the 10 students sit facing him, each with a laptop. All of them are connected to the internet and have my website open and are logged in to it. The teacher is logged in as a "teacher" and the students are logged in as "students" because the application keeps track of these two types of users. When the teacher selects a question and poses it to the students, it should appear on their laptops only after the teacher hits the "Pose" button. The application also needs to give the teacher the option to pose the question with a time limit. Finally, the teacher should also be able to pose questions in bulk that the students will then answer at their leisure, perhaps for homework, or perhaps timed as a take-home test.
Note that the question should only be posed to the students in the course at that time, not to all the students of that teacher (of course).
The application has two types of users (aside from me, the super-user). They are:
Once a teacher has created an account on the system, the teacher can then create courses. All courses will have a calendar of meeting times associated with them. Once a student has created an account the student can register for one or more courses. (A teacher may need to give approval before a student can fully join a course).
The goal of the application is to allow the teachers to get a more statistically rigorous view of how their students are doing with various kinds of questions. So producing useful reports and charts of student performance on the questions is the goal. Questions need to be broken down into sub-types and sub-sub-types and the application should be able to highlight trends and spotlight various discrepancies, and so forth.
I would like to build the above application using Ruby on Rails. I have a Macbook Pro, a desk, the Ruby on Rails 3 Tutorial book, The Ruby Programming Language book by O'Reilly, and some software such as Textmate and Git. I'm pretty much a newbie at designing applications, however.
Also, perhaps I'm being paranoid, but I would like my database to be in third normal form.
I think this qualifies:
TEACHER_TABLE: teacher_name, teacher_id
STUDENT_TABLE: student_name, student_id
COURSE_TABLE: course_name, course_id, teacher_id, meeting_schedule, location
CLASS_TABLE: class_id (class number), course_id
ENROLLMENT_TABLE: course_id, student_id
QUESTION_TABLE: question_id, question, choice_a, choice_b, choice_c, choice_d, choice_e, choice_f, choice_g, correct_choice (a-g)
ANSWER_TABLE: student_id, question_id, choice, course_id, class_id, timestamp.
(The student can answer the same question in different courses or classes -- these are different entries in the answer table.)
Before I set all this up in rails, is there anything I should carefully think about?
Last edited by deonomo (2011-08-01 14:16:34)