Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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社交网络好友数据库表_Php_Mysql_Serialization - Fatal编程技术网

包含序列化数据的PHP社交网络好友数据库表

包含序列化数据的PHP社交网络好友数据库表,php,mysql,serialization,Php,Mysql,Serialization,我想开发一个社交网站,用户可以在其中与其他用户交朋友,我有以下示例表: 表名:朋友 id |朋友 id将包含用户的id,而friends将在一行中包含用户朋友的id。id列将是唯一的主键 我的问题 我想知道我是否可以将好友列表存储为一个序列化数组,因为这将限制每个用户的好友连接仅为1行,而这里介绍的其他方法是have friends表,并在每行中插入用户和好友id 在检索过程中,我会取消对行的序列化并将其放入数组中。您可以这样做,但您必须始终保持更新,并且无法在mysql查询中加入该信息或准确搜

我想开发一个社交网站,用户可以在其中与其他用户交朋友,我有以下示例表:

表名:朋友

id |朋友

id将包含用户的id,而friends将在一行中包含用户朋友的id。id列将是唯一的主键

我的问题

我想知道我是否可以将好友列表存储为一个序列化数组,因为这将限制每个用户的好友连接仅为1行,而这里介绍的其他方法是have friends表,并在每行中插入用户和好友id


在检索过程中,我会取消对行的序列化并将其放入数组中。

您可以这样做,但您必须始终保持更新,并且无法在mysql查询中加入该信息或准确搜索该信息

有了这样一个应用程序,你需要这些数据才可用


如果您对以正确的方式连接表所需的SQL不满意,只需就困惑点/挫折点寻求帮助即可。

这是可以做到的,但没有任何好处。做聚合函数是很困难的,例如求和或找到最新的朋友几乎是不可能的。如果不通过代码取消序列化并进行新的查询,那么进行连接是不可能的。此外,您还需要稍微更改结构:

Table Friends
ID    |    User_ID    |    Friend_ID
1          4               5
2          4               6
ID将是一个自动递增的主键,user ID是用户的ID,friend ID是朋友的ID

您不应该将数据(外来ID)压缩到关系数据库中的单个字段中。您将无法加入/选择任何数据。而是使用:

朋友
userId、friendId这将彻底打破关系数据库的概念

您还可以有一个单独的table-person,并在第一个位置存储person的id和之后序列化的朋友

这个想法是,你不能对那些“数据库结构”进行简单的查询,比如计算朋友的数量,不管是说普通朋友还是其他简单的操作


无论如何,我建议你看看一些,考虑为你的P/P取消一个。我认为Damchey Lhendup希望朋友行应该保存序列化的数据——而不仅仅是一个ID。虽然你的表建议是,IHO,一个更好的解决方案,序列化的数据。这确实是整洁的,但我担心可伸缩性的一部分。不知道myspace和facebook以外的其他中大型社交网站(它们使用社交图或其他东西)是如何存储这些信息的。假设我有5000个用户,每个用户大约有300个朋友。那张表中不是有150万行吗。随着用户列表的增长,效率不是会受到影响吗?朋友无疑是一项繁重的操作,需要一种很好的方法来实现它(比如缓存、预加载/后加载)。但是1500.000条条目并不多,它肯定比加载你的朋友然后做一个WHERE-IN(300+ID)要好得多。