I built a survey process a couple years ago where 400+ students answered 20+ objective questions about each of their classes (let's say 6 classes per student).
Key BOs:
1) QuestionMaster - this BO holds the questions to be answered by each student (but not the answers). For simplicity sake, let's say there are 20 instances of this BO.
2) QandA - If 400 students are evaluating 6 classes with 20 questions each, there would be 48,000 instances of this BO. These "shell" QandA instances are all built ahead of time from info in a StudentClass BO (StudentClass would have 400 x 6 = 2,400 instances in this case).
QandA key attributes:
1) Answer - Plain Text with Radio Button presentation. Static choices: 1) Strongly Agree 2) Disagree 3) Agree 4) Strongly agree 5) No basis for opinion
2) AnsweredYN - default = No
A couple of key rules on QandA BO:
1) If QandA.AnsweredYN WAS CHANGED TO 'Yes' Then
QandA.TS_Answered=CURRENT_TIMESTAMP
2) If (QandA.Answer IS DEFINED) THEN
QandA.AnsweredYN='Yes'
ELSE IF (QandA.Answer=UNDEFINED AND QandA.Question.Type='Agree / Disagree buttons') THEN
QandA.AnsweredYN='No'
QandA.TS_Answered=''
ELSE IF LoggedInSystemUser.AccessLevel='Student' AND QandA.Question.Type='Open Response'
THEN QandA.AnsweredYN='Yes'
3) If QandA.Answer='1-Strongly Disagree' Then
QandA.AnswerNbr=SystemSettings.Weight_1_StronglyDisagree
Else If QandA.Answer='2-Disagree' Then
QandA.AnswerNbr=SystemSettings.Weight_2_Disagree
Else If QandA.Answer='3-Agree' Then
QandA.AnswerNbr=SystemSettings.Weight_3_Agree
Else If QandA.Answer='4-Strongly Agree' Then
QandA.AnswerNbr=SystemSettings.Weight_4_StronglyAgree
Process:
1) WHen a student logs in they are presented with a list of their classes. One by one, they chose a class to complete a survey for.
2) As a class if chosen, this key process drives displaying questions for the student to answer
If COUNT QandA WHERE (QandA.StudentClass=LoggedInStudent.Chosen_StudentClass AND QandA.AnsweredYN='No')>0 Then
FIND QandA WHERE QandA.StudentClass=LoggedInStudent.Chosen_StudentClass AND QandA.AnsweredYN='No' ORDER BY QandA.QuestionSortValue TAKE BEST 1
One_Student_One_Class_Answer_S_1_by_1_a
Else
FIND StudentClass WHERE StudentClass=LoggedInStudent.Chosen_StudentClass
StudentClass.Status_Answers='Done'
DISPLAY PERSPECTIVE Student
===================
Not sure if this is enough to help you craft a new paradigm for your survey. It's a complicated process, but in the end it can be done and done very effectively.