Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 大量行(eav)与大量空列_Php_Mysql_Database_Schema_Entity Attribute Value - Fatal编程技术网

Php 大量行(eav)与大量空列

Php 大量行(eav)与大量空列,php,mysql,database,schema,entity-attribute-value,Php,Mysql,Database,Schema,Entity Attribute Value,我正在尝试重新设计一个网站的数据库模式,在这个网站上,我们有一个由用户根据他们所属的类别填写的动态表单。这个动态表单的最终结果是,我在数据库中有100多个列来存储它们的答案,但在任何给定的情况下,实际上只有不到10个列有一个值 我希望尽可能地收紧数据库,并尽可能地删除空值。我正在考虑的上述问题的一个解决方案是使用EAV表来保存变量问题的答案 因此,表1将保存它们的名称和其他一些位,表2将有一行保存每个问题的问题和答案,外键链接到表1 我做了一些草率的计算,如果他们每天填写1000份表格(高估计,

我正在尝试重新设计一个网站的数据库模式,在这个网站上,我们有一个由用户根据他们所属的类别填写的动态表单。这个动态表单的最终结果是,我在数据库中有100多个列来存储它们的答案,但在任何给定的情况下,实际上只有不到10个列有一个值

我希望尽可能地收紧数据库,并尽可能地删除空值。我正在考虑的上述问题的一个解决方案是使用EAV表来保存变量问题的答案

因此,表1将保存它们的名称和其他一些位,表2将有一行保存每个问题的问题和答案,外键链接到表1

我做了一些草率的计算,如果他们每天填写1000份表格(高估计,从长远来看并非不可能),我每年会看到表2中多达2600000行(1000*10*260-工作日)。我的主键将增加到40亿,所以这不是一个问题,但我担心在使用500-1000万条记录的几年后,性能将严重下降


我最关心的是性能,就结构而言,EAV是非常可取的,因为它允许我的客户添加新问题,而不必与数据库交互,它有助于使我的数据库架构更加紧密,我不担心如果它是正确的数据解决方案,这会使我的代码复杂化。

只要它们被正确索引,表中的行数过多不应成为问题。您需要一个外键/索引将EAV属性值链接到您的主表单表当前看起来是这样的:id、id_实体(FK)、属性(问题代码)、值、值_大(文本长度超过255个字符串)、标题(如何向用户描述信息)、日期_添加只有10%的字段将被使用,您可以考虑将所有答案放在一个数组中,然后将它们全部存储在一个文本列中,使用<代码> SerialZeIE()/<代码>或更好地仍然是<代码> JSONY-EnCODE()。你也可以考虑删除所有未回答的问题,这样你的字符串是好的和小的。这意味着使用数据库中的这些数据的代码需要预期和处理丢失的数据。在mysql中,添加列是一项非常昂贵的操作,这意味着重新创建整个表。@Marek,目前每个用户都有自己的数据库,我几乎每周都要向架构添加一列。真是一团糟。