我正在建立一个数据库,我对拥有类似Facebook的朋友系统感兴趣。 我最初的计划是有这样一张桌子:
uid friends
4 30,23,12,33
30 54,92,108
所有这些数字都是带有用户信息的表的FK。 我被告知这是不可取的,实际上是不可能的,因为MySQL只会处理好FK,如果他们是单元格中唯一放置的那个。 也许是这样的?
uid(PK) friend
4 30
4 23
4 12
30 54
30 92
30 108
等。 这不会给我留下大量的行吗? (成千上万?) 第一种技术在时间和效率方面不值得吗?
答案 0 :(得分:5)
成千上万的行是花生,即使对于Mysql也是如此。没有其他方法可以模拟多对多关系。您将拥有这些ID的索引,这些索引的性能比子串比较好几个数量级。
答案 1 :(得分:2)
我会说第二种方式确实是“正确”的方式 - 并且最终优于你几乎在所有方面提到的第一种方式。是的,它将为您留下大量的行。
如果已建立索引,它应该仍然非常快 - 达到一个点(可能是数十万或者可能是几百万行)。除此之外,您还需要开始研究分区或其他更高级的技术。
答案 2 :(得分:1)
不值得花时间和效率吗?如果使用第二种方法,您将获得更高的效率。
答案 3 :(得分:0)
为了稍微理论化解释为什么这很糟糕,请阅读http://en.wikipedia.org/wiki/First_normal_form