我需要在我的软件中允许通过 Web 界面创建用户设计的表单。即,他们创建一个问题、一个类型(文本、单选、复选框等)、选项(如果需要)(单选/检查),然后添加并继续此过程,直到他们在表单中创建了所有字段。
除了查看/填写/打印它们之外,不会对他们进行任何查询,即他们正在添加可以无限次填写的“问卷”(有些可能是 20 次,有些可能是数百万次)。
经过一些研究,似乎 EAV 类型的解决方案听起来不错,除了那里有很多负面看法。许多人建议在这种情况下使用 NoSQL 数据库,但我并没有真正看到它的优点——你仍然有一个包含许多字段的表单,然后是包含许多字段的结果。
某些字段(文本/文本区域/日期)将有一个可能的值,但许多字段也会有多个选项(单选按钮、选择下拉菜单、复选框)。
这是传统 SQL 中的示例设计:
形式:creator_id,名称
form_field: form_id, order, question, type (text, text_area, date, radio, select, check)
form_field_option:form_field_id、名称、值、顺序(用于单选/选择/检查)
form_result:form_id,application_id(不是我使用的名称,但所有结果都属于“应用程序”)
form_field_value:form_result_id、form_field_id、form_field_option_id、值(如果选项字段的值为空白,则文本字段 form_field_option_id 将为空白)
基于此构建表单并获得结果似乎相当容易。它可能会也可能不会完全有效,但是说典型的表格是 5-30 个问题,那会很糟糕吗?
将其放入 NoSQL 数据库(即 Mongo 或类似数据库)中是否有任何优势?如果是这样,你能给我具体的例子来说明它们是什么,并给我一个样本设计吗?我看过很多答案,比如“NoSQL 更适合这个”,但我在这方面没有经验,是因为更快地检索结果,还是什么?使用 NoSQL 会带来什么缺点?
谢谢