Web applications 存储调查数据的最佳方法?

Web applications 存储调查数据的最佳方法?,web-applications,survey,Web Applications,Survey,我正在开发一个非常小的调查应用程序,可能是3-4页的web应用程序。所以我的问题是,保存调查数据的最佳方式是什么 顺便说一下,到目前为止,我已经想出了以下方法 保存到数据库并将每个调查标记为不完整。当用户提交调查的最后一份表格时,检查调查的完整性,若完整,则将其标记为完整 保存到会话,然后在用户提交最后一份调查表格时保存到数据库 您对这些方法有何看法?如果您希望他们能够在调查中途保存结果,并在另一时间返回以完成调查,那么您必须存储调查的开始时间和结束时间,才能知道他们已完成调查。到目前为止,您还

我正在开发一个非常小的调查应用程序,可能是3-4页的web应用程序。所以我的问题是,保存调查数据的最佳方式是什么

顺便说一下,到目前为止,我已经想出了以下方法

  • 保存到数据库并将每个调查标记为不完整。当用户提交调查的最后一份表格时,检查调查的完整性,若完整,则将其标记为完整

  • 保存到会话,然后在用户提交最后一份调查表格时保存到数据库


  • 您对这些方法有何看法?

    如果您希望他们能够在调查中途保存结果,并在另一时间返回以完成调查,那么您必须存储调查的开始时间和结束时间,才能知道他们已完成调查。到目前为止,您还必须存储它们的所有值


    由于它很小,我只需将它保留在会话中,然后在完成后将其保存到数据库中。

    我对这类事情感到非常头疼,并建议尽可能不要使用会话。当您的网站流量适中时,或者如果ASP.NET只是感觉如此,您可能会发现在.NET尝试释放一些内存时,您会丢失所有会话

    我会尽快把它存入数据库。使用Guid.NewGuid()生成可在查询字符串中从一页传递到下一页的唯一不可用键:这将是从数据库检索记录的键

    还有两个您没有考虑的选项:

  • 将响应从一页张贴到下一页。(这可能比它的价值更麻烦。)

  • 使用asp:向导控件。这样的话,你的3-4页实际上就是一页上的3-4个步骤。每个阶段的数据都会自动存储在ViewState中,因此在执行最后一步时,第一步的输入字段仍然可以访问


  • (不过我还是会选择你的第一个选项。)

    我认为第二个选项是你最好的选择。如果您的站点收到大量流量,选项1将给数据库带来更大的压力,同时也会因为不完整的调查而使数据库变得混乱。会话听起来是一个更好的选择,因为事实上,除非数据是完整的,否则您不会想要数据,是吗?

    两者似乎都很好,这取决于您希望用户做什么或您希望用户做什么

    第一种方法允许用户返回(即使在关闭浏览器后)以完成调查。这是一个很好的观点,如果你的调查规模很大,用户无法在陷入其他事情之前完成它,但如果你想强迫用户完成,我的意思是,如果你不想要不完整的调查,这也是一个消极的观点

    第二种方法强制用户在开始调查的同时完成调查。如果你的调查很快,并且你想要完整的数据,这是一个很好的观点,但是如果你的调查很长,通常用户在完成之前会分心,这是很糟糕的


    我想说的是,每一页的问题数量将是我在这两种方法中选择的决定性因素,也许你也可以选择。不要使用会话进行此操作。微软有一个很好的例子,说明了如何在TechEd使用的应用程序中不进行调查。每次你必须思考一个答案时,会话就会超时。使用ajax,保存每个答案,甚至部分答案。如果遇到数据库性能问题,请收集某段时间内所有调查的所有答案,并将其保存在一起。 使用一些javascript,只有在过去几秒钟内或窗口关闭之前发生更改时,才可以回调服务器


    当然,除非你有回答问题的时间限制。

    如果你预计你的应用程序将来可能会增长(提供更长的调查,甚至可能是在用户可以在“中间”获得相同结果并在以后恢复的形式中),我肯定会选择数据库选项。

    我是这样做的:

    • 我从数据库中生成“问题”,因此只有一个页面用于显示不同的问题
    • 只要用户单击“下一步”,我就会保存每个问题的答案。这有一个很大的优势,用户可以从离开的地方返回并开始
    • 我用一个指针跟踪进度,该指针随着结果的保存而更新
    • 我不使用会话,因为我不想冒数据丢失的风险,也不想占用内存
    • 当指针==问题数量时,标记为已完成

    我将选择第一个选项,因为它比会话更健壮。guid(唯一标识符)好主意,我将向表中添加guid,因为它将完全消除会话的需要。谢谢