Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.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
MySQL表结构。使用PHP时哪个更有效_Php_Mysql_Database Design - Fatal编程技术网

MySQL表结构。使用PHP时哪个更有效

MySQL表结构。使用PHP时哪个更有效,php,mysql,database-design,Php,Mysql,Database Design,我有两张桌子。其中一个字段不通过电子邮件地址和唯一ID存储任何内容。这两个字段都是唯一的。我有另一个表,它存储关于一个人的数据。姓名、电话、地址、职业等。person表中有固定数量的字段。我相信10是个数字 设置此设置的原因是我通过电子邮件跟踪个人的更改,因为这是我关于某人的唯一独特信息。这些人可能会通过多种方式发布到我的网站,而无需长时间登录。根据他们在哪里发帖,用什么方法,我收集了一些数据。数据可能会随着时间的推移而变化。人们搬家、更换电话号码或职业。因此,我有几条记录与一封电子邮件相匹配,

我有两张桌子。其中一个字段不通过电子邮件地址和唯一ID存储任何内容。这两个字段都是唯一的。我有另一个表,它存储关于一个人的数据。姓名、电话、地址、职业等。person表中有固定数量的字段。我相信10是个数字

设置此设置的原因是我通过电子邮件跟踪个人的更改,因为这是我关于某人的唯一独特信息。这些人可能会通过多种方式发布到我的网站,而无需长时间登录。根据他们在哪里发帖,用什么方法,我收集了一些数据。数据可能会随着时间的推移而变化。人们搬家、更换电话号码或职业。因此,我有几条记录与一封电子邮件相匹配,以便显示随时间的变化

我的问题是,MySQL的哪个设置更好。我相信这是一个很难回答的问题。我应该:

ID | EmailID | Name | Phone | Address | City | Created | etc....

第一个设置显然将一个人的所有数据以及相关的emailID存储在一行中。第二个字段按字段存储数据。因此,我可以在和
emailID
下插入一行,其中包含字段类型
occulation
和值
developer
,而不是整个数据集

由于不是每次插入都需要所有数据,我觉得第二种方法最好,但我不是100%确定。使用第二种方法,我只添加一行并插入所需内容,而不是整行


希望这有意义。

第二种方法称为实体属性值建模(EAV)

通常,首选第一种方法。EAV的问题之一是列的类型。例如,您的一个列是
created
,它可能是一个日期列。其他的似乎是弦

使用EAV结构,很难维护外键关系。在行值上指定约束比较困难。从一行返回所有值的查询需要将多行合并在一起。而且,由于实体信息必须重复(电子邮件就是您的情况),它们通常会占用更多空间


在某些情况下,EAV是正确的解决方案。但是,我鼓励您使用第一种结构,其中所有列都位于一个表中。对于性能或插入数据而言,空值不是问题。

第二种方法称为实体属性值建模(entity attribute value modeling,EAV)

通常,首选第一种方法。EAV的问题之一是列的类型。例如,您的一个列是
created
,它可能是一个日期列。其他的似乎是弦

使用EAV结构,很难维护外键关系。在行值上指定约束比较困难。从一行返回所有值的查询需要将多行合并在一起。而且,由于实体信息必须重复(电子邮件就是您的情况),它们通常会占用更多空间


在某些情况下,EAV是正确的解决方案。但是,我鼓励您使用第一种结构,其中所有列都位于一个表中。对于性能或插入数据而言,空值不是问题。

根据索引表的方式,从长远来看,第一个空值可能更有效。拥有一个关系结构将需要更复杂的查询,这些查询可以被缓存或以任何方式处理,因此这甚至可能不是一个问题。但是,如果你担心存储一些空字段,那么考虑这实际上是多么微不足道的开销相比,可能有1000万条目在结构2为100万用户…当然,您可以尝试一些基准测试,具体取决于您对表的索引方式。从长远来看,第一个基准测试可能更有效。拥有一个关系结构将需要更复杂的查询,这些查询可以被缓存或以任何方式处理,因此这甚至可能不是一个问题。但是,如果你担心存储一些空字段,那么考虑这实际上是多么微不足道的开销相比,可能有1000万条目在结构2为100万用户…当然,你可以尝试一些基准测试,我不反对。谢谢你的反馈。我将对EAV做更多的研究。再次感谢你,我不会反驳的。谢谢你的反馈。我将对EAV做更多的研究。再次感谢。
ID | EmailID | FieldType | Value | Created