php - 优化MySQL好友关系存储

标签 php mysql database

假设

  1. 如果 A 是 B 的好友,则 B 也是 A 的好友。

我搜索了这个问题,Stack Overflow 上已经有很多问题了。但他们都提出了相同的方法。

他们正在创建一个表 friend,并具有三列 fromtostatus。这有两个目的:谁发送了好友请求,以及如果状态被接受,谁是好友。

但这意味着如果有 m 个用户,并且每个用户有 n 个 friend ,那么 friend 表中将有 mn 行。

我的想法是将好友列表存储在 text 列中。对于每个用户,我都有一行和一个 friends 列,其中包含所有接受的 friend 的 ID,并用字符分隔,例如 | 我可以分解它以获取所有 friend 列表。同样,我将有另一个名为 pending requests 的列。接受请求后,ID 将从待处理请求移至 friend 列。

现在,这应该会显着减少表中的条目和搜索时间。

唯一的开销是当我必须删除 friend 时,我必须检索 friend 字符串,搜索要删除的 friend 的 ID,删除 ID 并更新列。但是,如果我假设用户不能拥有超过 2000 个 friend ,则这几乎可以忽略不计。

我认为我肯定会忘记一些情况,或者这种方法会有一定的陷阱。如果有的话请指正。

最佳答案

答案是否定的!不要尝试实现这个想法 - 这完全是一场灾难。

我将更准确地描述原因:

  1. 关系。您仅存储用 | 分隔的键。如果你想显示好友名单怎么办?您将必须获取列表,分解它并向数据库进行另一个 n 查询。与关系表 from |至 | status,您只需一个JOIN就可以做到这一点。
  2. 删除。太可怕了。
  3. 插入。对于每个插入,您都需要执行 SELECT + UPDATE 而不是 INSERT
  4. 类型。您应该将项目按原样保留在数据库中,因此整数作为整数。将整数转换为字符串并返回可能会导致一些错误、错误等。
  5. 不支持 ORM。将来您可能会将纯 PHP 留给某些框架。请记住,他们都不会支持您的想法。

搜索时间? 请做一些测试。使用 WHERE + PRIMARY KEY 进行搜索非常快。

关于php - 优化MySQL好友关系存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30026793/

相关文章:

php - laravel 5 搜索查询问题

database - 使用应用程序 ID 生成器与数据库 ID 生成器

php - 在 PHP 中使用 PDO 更新 MySQL 数据库

javascript - 使用ajax调用php

php - 为什么我们连接变量......没有连接这可以做不同的变量

php - 为什么在 PHP 中使用 PDO 而不是 MySQL?

php - 我想计算不同表的总和

sql - 合并两个表,同时对重复项应用聚合(最大、最小和总和)

php - 如何使用wordpress自定义元素?

php - 使用jquery刷新div中的信息