【问题标题】:How do I store data in an SQL database if the database columns can be different?如果数据库列可以不同,如何将数据存储在 SQL 数据库中?
【发布时间】:2019-10-27 13:18:52
【问题描述】:

我正在创建一个允许用户将纸质表单数字化的 ASP.NET Web 应用程序。用户将导入他们自己的表单,这些表单将被转换为 HTML,并插入占位符以接受来自输入表单的值。

使用此导入的纸质表单上的字段,网站将根据所需信息创建一个输入表单。还可以为特定表单创建“模板”,允许用户自动填写通常不会随每次表单填写而更改的任何数据。用户还可以保存他们尚未完成的表单以供以后完成/查看。

我的问题是:如何存储这些数据?我不能真正使用传统的数据库表,因为 Form X 看起来与 Form Y 完全不同,并且需要完全不同的数据。我有一个 SQL 数据库来存储数据(网站的其他方面我也需要这个),但我不能简单地将所有表单数据存储在一个表中,甚至不能为每个表单设置单独的表,因为这在规模更大。

我最初的想法是使用 JSON,但我完全不知道从哪里开始。我可以将 JSON 数据放入常规 SQL 数据库列吗?这可以用于生成代码以构建 Web 表单,以允许用户使用任何设备轻松填写表单(根据我的设计要求)?

【问题讨论】:

    标签: sql asp.net database


    【解决方案1】:

    我认为使用 mongoDB 或 Arangodb 之类的文档数据库可以很好地解决您的问题。现在的现实是,应用程序可以而且有时应该使用多个数据库。

    话虽如此,如果我必须使用关系数据库,我会将您的表单转换为 3 个表。第一个顶级表单将存储如下内容:

    • 表格名称,
    • 表格编号,
    • 等等……

    第二个表格将捕获表单字段,看起来像这样:

    • 表单ID
    • 字段 ID
    • 字段名称
    • 字段类型(int、varchar 等)
    • 分类号
    • 等等...

    第三个表将捕获用户输入的信息:

    • 用户 ID
    • 表格编号
    • 字段编号
    • 价值
    • 创建日期时间
    • 最后修改日期时间
    • 等等...

    请注意,通过将字段存储在行而不是列中,您拥有不同类型的表单并不重要。

    我应该提一下,上面的表格定义无论如何都不是完整的,它们是为了让您了解如何开始。

    最后,请注意,现在许多关系数据库允许您按照您的建议将 JSON 直接存储在数据库中,但这可能不是一个很好的选择,具体取决于您使用的数据库。 Here 是在 mysql 中存储 JSON 的示例,仅供参考。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-17
      • 2021-07-31
      • 2014-03-28
      • 2017-02-02
      • 2011-08-14
      • 1970-01-01
      相关资源
      最近更新 更多