我在设计一个考试系统的时候,遇到这样一个头疼的问题:
题目包括单选,复选,问答,听力,填空,判断
单选,复选,听力,要有选项(个数不定),可以可以自动判定答案正确与否
判断,没有选项,也要可以可以自动判定答案正确与否.
填空,问答,没有选项,人工判定.如果把题目设计为
create table question
(
 题干,选项,参考答案,类型  
)如果这样,有以下问题:
"选项"字段就很可能有很多null值;
把多个选项填在一个"选项"字段里,每次取出都要进行解析,并且如果要求考试时选项可以随机打乱,那么参考答案对应哪个选项实现起来很别扭请问有没有比较好的实现方案

解决方案 »

  1.   


    create table question(
    subject  varchar2(2000) not null,--题干    1.小于100大于3的偶数?
    options   varchar2(1000) ,--选项    A.1,B.6,C.8,D.10
    answer   varchar2(50),--参考答案  B,C,D              
    subject_type char(1) not null--类型        1          1-单选/2-复选/3-听力/4-判断/5-填空/6-问答
    );select answer   from question where subject_type=1 and substr(subject,1,1)=1
    ANSWER
    --------------------------------------------------
    B,C,D如果放在一张表,那程序逻辑控制就多些读取的时候先读subject_type  
    比如是多选题 subject_type字段 应该对应2
    然后是读多选下的第几道题截取subject的前1位做比较
    得出数据库存的答案和传过来的数据比较
      

  2.   

    to:MJ_KC 
       我原来就是这样的思路,但是这样一来冗余大,而且在程序实现时要有很多逻辑控制,相当不优雅
    to:bzszp 
       你的方案实现不了主观题啊,主观题有个"参考答案",如果加多一个主观题的表,那么每次查找题目,都得根据它的类别去判断应该联立哪张表,也是相当不方便
      

  3.   

    ORACLE中查询一张表和联合查询多张表的效率差异你是感觉出来的
    主表与副表的设计方案是最佳的方案
      

  4.   

    前两天没空上,贴子沉了,开了个新贴,加以详细说明了一个
    http://topic.csdn.net/u/20071125/22/d4d00113-c8b9-4ae1-a625-37d066473d18.html