动态输入到数据库

时间:2013-06-13 18:50:09

标签: php mysql database postgresql database-design

我正在开发一款可让用户根据用户需求创建自定义项目的应用,该项目基本上是一个可由其他用户提交的表单。

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

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

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

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

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

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

  • name(字段名称,用作表单输入字段的“name”attrubute)
  • 标签(表格中打印的说明)
  • 格式(如果您想区分选择/输入/复选框)
  • 验证(如果您需要一组验证规则)
  • value_type(int / string / date / etc .. - 要从用户接受的值的类型。有助于验证)

答案 2 :(得分:1)

一种可能的选择:

表:输入

  • 说明:存储不同类型的输入(选择,选择多个,输入,复选框,广播)
  • 字段: inputtypeid(主要),input_typestatus

表格:字段

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

表:值

  • 说明:为字段存储值(默认和用户提交)。
  • 字段: valueid(主要),fieldid(参考字段),valuedefault(bool是/否)

table:project_forms

  • 说明:存储适用于该项目的字段列表。
  • 字段: pfid(主要),projid(参考项目),fieldid(参考输入)

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

答案 3 :(得分:1)

我遇到了与评估申请相似的情况。每项评估都提出了一些问题,但问题集会定期更改。我没有使用键/值对为问题和答案创建单独的表,而是利用PHP中的序列化。

  1. 确定哪些数据必须是每个表单的一部分(ID,提交者,提交日期时间,项目名称,电话)在表格中创建这些数据元素列。
  2. 为序列化数据创建附加列。这是存储其他属性的位置。
  3. (只需要1张桌子)

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

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