2012-07-31 52 views
1

在我尝试构建的应用程序中,将存在用户(存储在用户表中),并且用户可以“互相连接”(例如,像在Facebook上成为朋友) 。我想要做的是构建存储这些连接的数据结构。这些数据将主要用于呈现用户的“连接”(例如Facebook上的朋友)表格。到目前为止,我已经遇到了两种不同的方法:用于表示用户之间连接的数据库结构

  1. 为每个拥有所有连接(例如朋友)的用户创建一个表。
  2. 具有表示ALL在网站(连接例如一个表:

[第1行=约翰 - 凯尔]

[行2 =凯尔,鲍勃]

[第3行= Lilli-John]

etc ....)。

我的问题是 - 哪一个会更有效率(主要是查询时间,而且大小方面)。我想第二个人的体型会小得多,但需要更多的时间来查询......你怎么看?哪一个更好用?如果你有任何想法,哪种模式更广泛使用(尤其是像Facebook,Instagram等流行网站),这也会有很大帮助!

回答

1

有外面的表现很好的理由不与第一种方法去,但即使业绩不太可能从这种方法获得:

  1. 了许多表,数据库管理系统首先需要找到合适的表,只有这样它才能搜索它。
  2. 只能在一个索引查找中搜索一个表。

所以,你有一个搜索表+小索引查找只是一个大的索引查找。搜索表格不可能比大型B-Tree的“上半部分”下降得更快,并且许多单独的表格可能会导致很多“松弛”(即未完全填充的页面),从而降低缓存效率。由于这两个原因,(2)可能会更快。

0

带有所有连接的一张表。每行有用户a,用户b,连接类型。其中连接类型是对另一个列出连接类型的表的引用。添加适当的索引。

+0

不需要很多时间来查询,但通过? – byteSlayer 2012-07-31 14:28:26

+0

如果您正确编制索引,请不要。每个用户有一张桌子是不干净的。 cthulhulike。 – 2012-07-31 14:30:46