日期:2014-05-18  浏览次数:20480 次

求教一个与用户关联的调查问卷的数据库表的设计
我的需求是这样的,首先我需要一个可以自定义的调查问卷,其中可以有很多问题,比如:
1.   你对我们的服务满意吗?
2.   服务员态度好吗?
3.   特色菜好吃吗?
.....(还可能有很多,今后只需要在后台编辑、添加不用再改数据库表)

现在,我需要对每个用户调查,每个用户都有自己的一份上面的问卷及答案,相当于是用户表里需有一个“调查字段”,此字段就是一张调查表,当调查问卷改变后,用户表里的“调查字段”也会随之更变。

如果在内存里用C#操作的话可以这样表示:
    public   class   Investigate
        {
              public   int   InvestigateId   {   get;   set;   }
              public   string   InvestigateName   {   get;   set;   }
              public   bool   Issatisfy   {   get;   set;   }
        }

      public   class   Guest
      {
              public   int   GuestId   {   get;   set;   }
              public   int   GusetName   {   get;   set;   }
              public   List <Investigate>   MyFeedBack   {   get;   set;   }//这个集合应该存在数据库中的哪里呢?
      }

------解决方案--------------------
主题内容多可以一个分类表记录
如:单位评价、服务评价、菜的评价


调查卷主题,用一个是否有效的字段

1. 你对我们的服务满意吗? 
2. 服务员态度好吗? 
3. 特色菜好吃吗? 

模板与主题关联表

记录不同模板对应的主题,用一个字段记录1~3显示顺序


调查卷模板,记录模板的有效日期
模板1
模板2

------解决方案--------------------
调查表(id,题目,选项1,选项2,选项3,...,正确答案)
用户表(id,用户名,调查时间,调查总结果)
答卷表(题目id,用户id,用户答案)
对每一个用户,每一题有一个答案,可能是单选/多选/填空/判断,用答案与调查表中的答案对比获得本用户本题结果.
------解决方案--------------------
用户和题目的关系式一对多

题目和选项的关系是一对多

这样的话就可以按照2楼晴天大大的来设计了

只不过处理的时候有可能涉及到行列转换 不过也不难的
------解决方案--------------------
题目表
用户调查表 (userid ,试卷id)
试卷表(试卷id,题目id,答案)
------解决方案--------------------
调查表(InvestigateId,InvestigateName)
用户表(GuestId,GuestName
试卷表(AnswerId,GuestId,InvestigateId,Answer)

用EF的话对应关系如下:
C# code

public   class     
        { 
              public   int   InvestigateId   {   get;   set;   } 
              public   string   InvestigateName   {   get;   set;   }         
        } 

  public   class   Answer 
      { 
              public   int   AnswerId   {   get;   set;   } 
              public   int   GusetId   {   get;   set;   } 
              public   int   InvestigateId   {   get;   set;   } 
              public   virtual Investigate Investigate {get;set;}
              public   int   GusetAnswer   {   get;   set;   }             
      }
public   class   Guest 
      { 
              public   int   GuestId   {   get;   set;   } 
              public   int   GusetName   {   get;   set;   } 
              public   int   AnswerId   {   get;   set;   } 
              public virtual IConnection<Answer> Answers{get;set;}
      }