加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 哪种方法更好地将相关数据存储在表中

发布时间:2020-12-13 17:25:43 所属栏目:PHP教程 来源:网络整理
导读:关于在数据库中存储数据我有一个简单而重要的问题. 假设一个网站有100,000个用户.这些用户可以成为彼此的朋友. 哪种存储方法是理想的 方法A: 在USERS表中创建一个朋友字段.键入:TEXT 将所有朋友ID保存在其中,用一个,…连接.示例:USER 1的朋友:2,3,4,5,6,
关于在数据库中存储数据我有一个简单而重要的问题.
假设一个网站有100,000个用户.这些用户可以成为彼此的朋友.
哪种存储方法是理想的

方法A:

>在USERS表中创建一个朋友字段.键入:TEXT
>将所有朋友ID保存在其中,用一个,…连接.示例:USER 1的朋友:2,3,4,5,6,…
>最糟糕的状态:所有用户都是彼此的朋友,每个用户都有一个FULL TEXT好友字段.因此在php方面,应该将此字段与分隔符分开,这需要一些进程.

方法B:

>制作友谊表

+------+---------------------+  
| uid  | friend_id           |  
+------+---------------------+  
| 1    | 2                   |  
| 1    | 3                   |    
| 1    | 4                   |  
| 1    | 5                   |
+------+---------------------+

>如上所示,对于用户的每个朋友,我应该向表中插入一个新行.
>最糟糕的状态:所有用户彼此都是朋友,所以100,000 x 100,000(不确定)行应存储在表中.

这两种方法中哪一种可以?性能和优化.

提前致谢.

解决方法

根据 normalization theory,优选方法B.

方法A将有以下问题:

>较慢,因为在大多数情况下字符串搜索需要更多时间,而整数比较更快.
>保持参照完整性将是一个问题.例如,如果您删除任何用户,这是任何用户的朋友,您应该从他们的朋友字段中删除它.这需要花费很多时间,因为DBMS必须执行大量的字符串处理操作.
>在这种情况下构建复杂查询可能会有问题.

它只是问题的冰山一角.如果用户表将位于数据库模式的中间(因为它经常发生),它将导致总数据库速度减慢.我的意思是,如果它将链接到很多其他表.

您可以从方法B轻松恢复方法A表示:

SELECT
    `User`.`uid` as `user`,GROUP_CONCAT(`Friendship`.`friend_id`) as `friends`
FROM
    `User` LEFT JOIN `Friendship` ON `User`.`uid` = `Friendship`.`uid`
GROUP BY
    `User`.`uid`

但是,从方法A开始,获取方法B表示可能是一项复杂的任务.只需考虑一下.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读