将未知数量的字段输入mysql - 最好的结构吗?

时间:2017-01-10 13:08:33

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

我需要存储从多个表单发送的数据 - 有趣的是,因为这些表单将由我计划授予用户访问权限的表单构建器创建,我不知道将有多少字段表单或用户将提交的字段数。我已经考虑过类似于以下的表结构(表单本身保存为包含的php):

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

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

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

输入" a" from formId 1可能看起来像:

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

而输入&#34; a&#34; from formId 2可能看起来像:

<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 |

&#34;输入数量&#34;在每个表单上可能是无限的 - 不同表单模板上的输入可能是不同的&#34;类型&#34;每一次。

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

1 个答案:

答案 0 :(得分:0)

mysql 5.7中有针对这种情况量身定做的东西。 JSON typejoin you are in deep trouble

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

虽然有一些注意事项,但这个字段虽然可以搜索,但搜索效率不如普通的varchar列。另外,如果您想在LINQKit中使用它。