2

我正在开发一个应用程序,该应用程序允许用户根据用户的需要创建自定义项目,该项目基本上是一个可以由另一个用户提交的表单。

我希望允许用户为项目(基本表单)动态创建新字段(使用 Javascript)并为每个字段选择自定义值。

当项目(表单)准备好时,它可以被提交并且用户指定的值进入数据库。然后另一个用户可以提交表单,原始用户选择的值作为该表单的选项。

这些值(由用户动态创建)很可能是基本数据,如姓名、电话、电子邮件等。但也有特定数据的选项,如食物、地址等。我希望用户能够询问他/她认为必要的任何数据。

那么我应该如何构建我的数据库呢?我无法确定用户将为他的项目选择什么或多少个字段,我想在传统的关系数据库中做这个应用程序,很可能是 Postgres 或 Mysql。

那么应该为我能想到的所有数据(或允许用户创建)创建列,还是可以通过其他方式完成?

4

4 回答 4

1

您的数据库应在表格规范中包含以下列:

  • 名称(字段名称,用作表单输入字段的“名称”属性)
  • 标签(要在表格中打印的说明)
  • 格式(如果你想区分选择/输入/复选框)
  • 验证(如果你想要一组验证规则)
  • value_type (int/string/date/etc.. - 用户接受的值类型。有助于验证)
于 2013-06-13T19:00:10.303 回答
1

我在评估应用程序中遇到了类似的情况。每次评估都会问一些问题,但问题集会定期更改。我没有为问题和答案创建一个包含键/值对的单独表,而是利用了 PHP 中的序列化。

  1. 确定哪些数据必须是每个表单的一部分(Id、提交者、提交日期时间、项目名称、电话) 在表格中创建这些数据元素列。
  2. 为序列化数据创建一个附加列。这是您存储附加属性的地方。

(只需要一张桌子)

在显示表单时,使用序列化数据来构建所需的其他表单元素。

使用这种模型,很难搜索到存储在序列化数据中的附加数据,但它简化了开发;有数千条记录,每次评估有超过 100 个“问题”,我们还没有遇到问题。

于 2013-06-13T19:02:30.477 回答
1

您可能想看看EAV模型。它有一些优点,因为您可以灵活地创建所需的任何结构,但它在事后检索和查询方面也有一些限制。

于 2013-06-13T18:54:48.277 回答
1

一种可能的选择:

表:输入

  • 描述:存储不同类型的输入(选择、多选、输入、复选框、单选)
  • 字段:( inputtypeid主要)input_type,,status

表:字段

  • 描述:存储项目所有者创建的各个字段。
  • 字段:( fieldid主要),inputtypeid(参考输入),label

表:值

  • 描述:存储字段的值(默认值和用户提交)。
  • 字段:( valueid主要),fieldid(参考字段)value,,default(布尔是/否)

表:project_forms

  • 描述:存储适用于项目的字段列表。
  • 字段:( pfid主要)、projid(参考项目)、fieldid(参考输入)

这里有一个旁注。确保您注意不要让用户将个人身份信息存储到这样的东西中。或者,如果这样做,请确保采取必要的预防措施来保护该数据,这在此设置中与大多数情况下略有不同。

于 2013-06-13T19:01:49.030 回答