我目前有动态表单的数据库结构:
grants_app_id user_id field_name field_value
5--------------42434----full_name---John Doe
5--------------42434----title-------Programmer
5--------------42434----email-------example@example.com
我发现这很难管理,它很快就填满了数据库中的数字行。我有不同的field_names,最多可以有78行,所以在对field_values进行更新或只是搜索时,它被证明是非常昂贵的。我想组合行并使用json或php序列化来大大减少对数据库的影响。有没有人对如何处理这个有任何建议?谢谢!
这将是预期的输出:
grants_app_id user_id data
5--------------42434----{"full_name":"John Doe", "title":"Programmer", "email":"example@example.com"}
答案 0 :(得分:0)
这些行似乎没有简单的主键。
该索引将使检索完整表单变得更加有趣(同时在插入时花费一些额外的时间)。
主键允许您通过指定由唯一索引支持的单个值来更新行,该索引通常应该非常快。
您可能已经有了一些字段定义。添加整数ID并使用它们来加速整个过程,因为存储,比较,编制索引的数据较少......
从PHP 5.2开始,使用json_encode和json_decode可以将数组转换为JSON并返回。
当前最好的方法可能是使用PHP脚本(或类似的)从旧表中检索所有数据,将其正确分组并将其插入到新表中。之后你可以切换名字,......这是一种离线方式。
另一种方法是添加新列并按field_name=NULL
指示新列包含数据。之后您可以随时转换数据或仅将新数据存储为JSON。
虽然将一行中的所有数据放在一起确实很容易记住:
%
内的LIKE
都可以跳过其他字段的值。此外,通过索引列也无法轻松优化LIKE '%field:value%'
。所以在你的情况下,即使有78个不同的字段,每个公式用户和字段也可能更好两个。 (甚至可能会发现JSON对于几乎没有字段的公式来说更实用。)
如this question中所述,您必须记住JSON只是MySQL的其他一些文本。