【问题标题】:input unknown number of fields into mysql - best structure for this?在mysql中输入未知数量的字段 - 最好的结构?
【发布时间】:2017-05-24 23:43:59
【问题描述】:

我需要存储从多个表单发送的数据 - 有趣的是,这些表单将由我计划让用户访问的表单构建器创建,我不知道会有多少字段表单或用户将提交的字段数。我想过类似下面的表结构(表单本身保存为php用于include):

| FormId | FormType | InputID | InputType | LongText | Text | Date |

FormId 与表单文件等的另一个表存储位置相关(例如下面),输入 ID 与页面上的输入相关。

| FormId | FormType | PathToForm | DateCompleted |...etc

从 formId 1 输入“a”可能如下所示:

<input id="a" name="a" type="text" value="example"/>

而来自 formId 2 的输入“a”可能如下所示:

<textarea name="a" id="a"></textarea>

我可以这样写到表格中:

| FormId | FormType | InputID | InputType | LongText |   Text  | Date |
--------------------------------------------------------------------------
|   1    |     1    |    a    |    text   |   NULL   | example | NULL |
|   2    |     2    |    a    |  textarea |  example |   NULL  | NULL |

每个表单上的“输入”数量可能是无限的 - 不同表单模板上的输入每次可能具有不同的“类型”。

我的问题(终于!) - 这是我能做到的最好方法吗?我知道每行存储表单的输出并不完全理想 - 但是没有数百个表,并且不会失去在将来需要时有用地提取数据的可能性(通过“FormType”)我'我不确定任何其他的结构方式。以前真的没有遇到过这样的事情,如果听起来很傻,对不起!

【问题讨论】:

  • 我们使用的这样一个产品是重力形式。你可能想看看他们的数据结构:)
  • 查看 EAV 标签 -- 大量讨论。

标签: php mysql database-design entity-attribute-value


【解决方案1】:

mysql 5.7 中有一些东西是为这种情况量身定做的。 JSON type。

您可以将表单转换为关联数组,然后将其保存在 JSON 字段中。

虽然有一些警告,但该字段虽然可搜索,但在搜索方面不如普通 varchar 列有效。此外,如果您想在join you are in deep trouble 中使用它。

【讨论】:

  • 这看起来只是一张票——看起来我也可以废弃一张桌子!注意到搜索 - 足够简单,可以将我现在想要搜索的字段分开。现在我需要做的就是等待我的共享主机从 5.6 更新到 5.7!
  • 哦,您可以切换到提供 5.7 的公司 :-) 无论如何,您的项目一切顺利
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-13
  • 2015-03-14
  • 2017-05-31
  • 1970-01-01
相关资源
最近更新 更多