小弟设计了一个类似在线考试之类的东东,设计答题时遇到多选题时设计了两个表,虽然能满足需求,始终觉得不是 很符合自然逻辑,不是最佳方案,请求大大指教试题表:Exm_Questions
QuestionID 题目编号,自增长
QustionBody 题干
LibraryID 对应的题库编号
QuestionDate 录入时间
ModeID 题型ID 如填空,选择,问答试题明细表:Exm_QuestionOption
OptionID 题支自增长编号
OptionMark 题支标记 如:选择题的A,B,C,D;填空题的(1),(2),(3)等
OptionText 题支的文字部分
ModeID 题支模式 如选择题选项,填空题的空等
QuestionID 对应题支号目前的需求主要是多选比较麻烦,
1) 多选选项数不确定
2) 选项后可能会还有一个选择”其他”,选择”其他”还需要 填写 “其他”具体内容的空白
      如 什么食物减肥 A 冰淇淋 B 水果 C饭 D肉  E其他__________
3) 管理员需要对答题的多选每个选项进行统计,如第x题选了A的xx人,占总人数的xx%.所以我设计的记录答题记录的表试卷明细表Exm_PaperDetails
 记录一张试卷的题目
SerialID 自增长号
QuestionID 对应题库里的试题
SectionID 该题目隶属于哪个大题
Sort 顺序答题明细表:Exm_PaperAnswer
RecordID 自增长记录号
SerialID 对应试题号
AnswerOption 试题选择项,如选了A就记录”A”,选了”AB”就插入两条记录分别为”A”,”B”
AnswerText 答题的文字 填空填的空白 选择选了”其他”后写的文字 主观题的答案等
SectionID 对应大题题号
ClientID 对应另外一张记录考试人员的记录号
 
现在的问题就是 多选时将在Exm_PaperAnser里面记录多个选项时插入了多条记录(用,隔开用一个字段记录无法实现统计),而且OptionText 和 OptionMark 记录答题文字的意义 根据题型的不同而变化,感觉总是不大对劲.
觉得不是最佳方案说了一大堆,不知道有没有讲清楚.请求大大批评这个设计,能指出更好的解决方案更好了.
感激不尽.

解决方案 »

  1.   

    大体看了下,感觉还不错,表的设计比较合乎情理,就是关系不太明确,缺少了点表上的触发器和必要的视图,比如一个最基本的问题,当一个题目数据输入Exm_Questions表的时候如果由于疏忽忘记了基本的约束或者其他因素导致输入失败应该设置触发器回滚,否则自动ID段QuestionID将不再是连续的ID了,着只是个简单的小问题,应多考虑这些
    还有就是SQL做后台数据库,你应该用一个WINDOWS应用程序来调用数据库,那么你的考试系统将更加完美.
    谢谢先~~~~~
      

  2.   

    大体看了下,感觉还不错,表的设计比较合乎情理,就是关系不太明确,缺少了点表上的触发器和必要的视图,比如一个最基本的问题,当一个题目数据输入Exm_Questions表的时候如果由于疏忽忘记了基本的约束或者其他因素导致输入失败应该设置触发器回滚,否则自动ID段QuestionID将不再是连续的ID了,着只是个简单的小问题,应多考虑这些
    还有就是SQL做后台数据库,你应该用一个WINDOWS应用程序来调用数据库,那么你的考试系统将更加完美.
    谢谢先~~~~~
      

  3.   

    选择题的答案可以用编码来表示
    如 A 1000, B 0100, C 0010, D 0001, AB 1100等等
    每个答案后面都有“其他”选项的填写内容,当有选择“其他”选项时对其进行统计。