用于存储表单字段和字段值的数据库架构建议

pte*_*ohn 5 sql-server asp.net sql-server-2000 database-schema

我的任务是创建一个应用程序,允许用户将数据输入到将保存的Web表单中,然后最终用于填充pdf表单字段.

我很难想出一种将字段值存储在数据库中的好方法,因为表单将是动态的(基于pdf字段).

在应用程序本身中,我将在哈希表(fieldname,fieldvalue)中传递数据,但我不知道将哈希值转换为db值的最佳方法.

我正在使用MS SQL server 2000和asp.net webforms.有没有人在做类似的事情?

Wya*_*ett 4

您是否考虑过在这里使用文档数据库?他们解决的正是这类问题,比传统的 RDBMS 解决方案要好得多。就我个人而言,我是RavenDb的忠实粉丝。另一个相当不错的选择是CouchDb。我会避免使用 MongoDb,因为它确实不是当前实现中数据的安全位置。

即使您无法使用文档数据库,您也可以通过将表设置为在传统列中包含一些元数据以及序列化 XML 或 json 的有效负载字段,使 SQL 假装为文档数据库。这将让您在远离 EAV 领域的情况下搜索元数据。EAV-land 是一个可怕的地方。

更新

我不确定是否存在好的指南,但这个概念非常简单。基本思想是将要查询的部分分解为表中的“正常”列——这使您可以以标准方式进行查询。当您找到所需的记录时,您可以获取 CLOB 并根据需要对其进行反序列化。在你的情况下,你会有一个看起来像这样的表:

SurveyAnswers
  Id INT IDENTITY
  FormId INT
  SubmittedBy VARCHAR(255)
  SubmittedAt DATETIME
  FormData TEXT
Run Code Online (Sandbox Code Playgroud)

一些建议:
a) 使用基于文本的序列化例程。给您一个修复数据错误的机会,并且确实有助于调试。
b) 对于 SQL 2000,您可能需要考虑将 CLOB(保存负载数据的 TEXT 字段)分解为单独的表。我已经很久没有使用 SQL 2000 了,但我的记忆是使用 TEXT 列对表做了坏事。