用于表示用户之间连接的数据库结构

时间:2012-07-31 13:54:43

标签: database database-design connection

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

  1. 为每个拥有所有连接的用户(例如朋友)创建一个表。
  2. 让一个表代表网站中的所有连接(例如:
  3. [第1行= John-Kyle]

    [第2行=凯尔 - 鲍勃]

    [第3行= Lilli-John]

    等....)。

    我的问题是 - 哪一个会更有效(主要是在查询时间方面,但在大小方面)。我猜第二个的尺寸要小得多,但是需要花费更多的时间来查询...你怎么看?哪一个更好用?如果你有任何想法更广泛地使用哪种模式(特别是Facebook,Instagram等热门网站),这也会有很大的帮助!

2 个答案:

答案 0 :(得分:1)

除了第一种方法外,有很好的理由不在表现之外,但是这种方法不太可能获得性能:

  1. 在许多表中,DBMS首先需要找到合适的表,然后才能搜索它。
  2. 只需一个索引搜索即可搜索一个表。
  3. 所以你有一个 搜索表+小索引搜索 只搜索一个大索引 。搜索表不太可能比大型B-Tree下降的“上半部分”快,并且许多单独的表可能导致大量“松弛”(即未完全填充的页面),从而降低了缓存效率。由于这两个原因,(2)可能会更快。

答案 1 :(得分:0)

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