动态表单构建器的数据库架构

don*_*now 3 database schema database-design dynamic nosql

我知道已经有类似问题的答案,但我认为答案不够强,所以我会问我自己的具体问题。

  • 假设:动态表单构建器,用户可以创建具有未知结构的表单。

  • 解决方案:表单提交,数据会存储在2个表结构中:

    1. FormSubmissionHeader 表,将存储有关提交的一些基本数据(formid、userid、datetime 等)
    2. FormSubmissionFieldsData(FormSubmissionHeaderID ,FIELDID,FIELDVALUE)

我对这个解决方案的问题是大量使用:
假设我有 100 万用户,
每个用户将有 3 个表单,
每个表单将有 10 个字段
,每个表单每天有 5 个提交。

因此 FormSubmissionHeader 将每天增长 100 万 X3X5 = 每天 1500 万行。

和 FormSubmissionFieldsData 将增长 15X10(每日提交数,字段数的两倍),即每天 1.5 亿行。

所以基于这个解决方案:

我不知道它会如何运作。

我看到两种选择:

  1. 使用 MONGODB 存储提交的标题和数据(无 SQL)

  2. 为每个表单动态创建表,并将数据直接存储在每个字段的相关数据类型中。

这是我看到的类似问题..

Wufoo 的数据库架构 - 你会如何设计它?

我想知道你们对此有何看法,或者您能提出其他建议吗?

Ome*_*tel 5

你必须努力说服我,在这个时代,每天 1.5 亿行是大量数据。这实际上取决于您打算如何处理提交的内容。只要您正确索引,大多数查询都可以正常工作。

但是如果你真的必须减少行数,你可以将表单提交保存为json格式。我相信 Postresql 支持开箱即用。您可以同时获得结构化和半结构化数据的两全其美。

所以表单表没有改变,但是提交表会有一些关于提交的列(用户,表单ID,日期等)和一个json列,答案是一个json对象,你也可以查询。