动态表单生成器的数据库模式
Database schema for a dynamic formbuilder
我知道类似的问题已经有答案了,但我觉得答案不够有力,所以我会结合我自己的具体问题来问。
假设:
动态表单生成器,用户可以创建结构未知的表单。
解决方法:
表单提交,数据会存储在一个2table结构中:
- FormSubmissionHeader table 将存储有关提交的一些基本数据(formid、userid、datetime 等)
- FormSubmissionFieldsData(FormSubmissionHeaderID,FIELDID,FIELDVALUE)
我对这个解决方案的问题是大量使用:
假设我有 100 万用户,
每个用户将有 3 个表单
每个表单将有 10 个字段
每个表单每天将有 5 个提交。
因此 FormSubmissionHeader 每天将增长 100 万 X3X5 = 1500 万行。
FormSubmissionFieldsData 将增长 15X10(每天提交的数量,字段数量的两倍),这意味着每天 1.5 亿行。
所以基于这个解决方案:
我不知道它是如何工作的。
我看到两个选择:
使用MONGODB存储提交header和数据(否SQL)
动态创建每个表单 table 并将数据直接存储在那里
每个字段的相关数据类型。
这是我看到的 similar question..
Wufoo's Database Schema - How would you design it?
不知道你们怎么看,或者你们能推荐点别的吗?
您必须努力工作才能让我相信,在这个时代,每天 1.5 亿行的数据量很大。这实际上取决于您打算如何处理提交的内容。只要正确索引,大多数查询都可以正常工作。
但是如果你真的必须减少行数,你可以将表单提交保存为json格式。我相信 Postresql 开箱即用地支持这一点。您可以同时获得两全其美的结构化和半结构化数据。
所以表单 table 没有改变,但是提交 table 将有一些关于提交的列(用户、表单 ID、日期等)和一个 json将答案作为 json 对象的列,您也可以对其进行查询。
我知道类似的问题已经有答案了,但我觉得答案不够有力,所以我会结合我自己的具体问题来问。
假设: 动态表单生成器,用户可以创建结构未知的表单。
解决方法: 表单提交,数据会存储在一个2table结构中:
- FormSubmissionHeader table 将存储有关提交的一些基本数据(formid、userid、datetime 等)
- FormSubmissionFieldsData(FormSubmissionHeaderID,FIELDID,FIELDVALUE)
我对这个解决方案的问题是大量使用:
假设我有 100 万用户,
每个用户将有 3 个表单
每个表单将有 10 个字段
每个表单每天将有 5 个提交。
因此 FormSubmissionHeader 每天将增长 100 万 X3X5 = 1500 万行。
FormSubmissionFieldsData 将增长 15X10(每天提交的数量,字段数量的两倍),这意味着每天 1.5 亿行。
所以基于这个解决方案:
我不知道它是如何工作的。
我看到两个选择:
使用MONGODB存储提交header和数据(否SQL)
动态创建每个表单 table 并将数据直接存储在那里 每个字段的相关数据类型。
这是我看到的 similar question..
Wufoo's Database Schema - How would you design it?
不知道你们怎么看,或者你们能推荐点别的吗?
您必须努力工作才能让我相信,在这个时代,每天 1.5 亿行的数据量很大。这实际上取决于您打算如何处理提交的内容。只要正确索引,大多数查询都可以正常工作。
但是如果你真的必须减少行数,你可以将表单提交保存为json格式。我相信 Postresql 开箱即用地支持这一点。您可以同时获得两全其美的结构化和半结构化数据。
所以表单 table 没有改变,但是提交 table 将有一些关于提交的列(用户、表单 ID、日期等)和一个 json将答案作为 json 对象的列,您也可以对其进行查询。