如何在数据库中对此[网络,详细信息]建模以提高效率和易用性?

agi*_*liq 6 database data-modeling

在linkedin,当您访问someones配置文件时,您可以看到您与它们的连接方式.我认为,如果不是更多,则会显示最高级别的连接,类似于

shabda - > Foo用户,酒吧用户,baz用户 - > Joel的连接 - > Joel

我怎样才能在数据库中表示这一点.

如果我模仿,


User
  Id PK
  Name Char

Connection
  User1 FK
  User2 FK

然后为了找到三个级别的网络,我需要获得所有连接,连接和连接,然后查看当前用户是否在那里.对于任何大小的DB来说,这显然是非常低效的,并且可能也很笨拙.

因为,在我可以看到这个网络的链接,在我访问的任何个人资料中,我不认为这也是预先计算的.

我想到的另一件事可能是最好不要存储在关系数据库中,但那么存储和检索它的最佳方法是什么?

Sas*_*gov 5

我的建议是使用图形数据库.目前似乎只有一种实现可用,那就是Neo4j.它是用Java编写的,但是绑定了Ruby和Scala(Python正在进行中).

如果您不了解Java,很遗憾,您可能无法在任何其他平台上找到类似的东西.但是,如果您确实了解Java(或者至少愿意学习),那么这是值得的.(从技术上讲,你甚至不需要学习Java,因为Ruby/Python绑定.)Neo4j的构建正是你想要做的.尝试在关系数据库中实现它时会遇到很多麻烦,只需要在几行Java代码中完成相同的操作,并且效率更高.

如果这不是一个选项,我仍然建议查看其他数据库类型,如对象数据库.关系数据库不是为这种事情而构建的,你在RDBMS中尝试这样做比通过切换到不同类型的数据库并学习它会更加痛苦.