【发布时间】:2023-03-03 19:51:01
【问题描述】:
根据下面的示例数据,假设 Julie (1) 有朋友 Adam、David、John (2, 3, 4)。 亚当 (2) 有朋友朱莉、大卫、约翰 (1, 3, 4)。
ID Name
1 Julie
2 Adam
3 David
4 John
5 Sam
这会在一个表中建立自联接和多对多关系。
除了上述问题,假设 Julie (1) 将 Sam (5) 添加为好友,从技术和实践上讲,Sam (5) 现在也是 Julie (1) 的好友。这使事情变得更加复杂,因为关系是双向的。
所以我想知道:
- 如何设计数据库?
- 如何进行查询以返回每个用户的所有朋友?
谢谢!
【问题讨论】:
-
自连接意味着表有一些东西要连接到自己。除了明显的“id=id”或“name=name”之外,您的表没有办法做到这一点,它们是简单/无用的连接。此表只是名称列表。它没有任何东西表明名字之间的友谊/联系。
-
@MarcB 正是我问“如何设计这样的数据库”的原因。 (即如何显示每个用户之间的关系)
-
您需要第二张表来定义友谊。如果把朋友的朋友算作朋友,逻辑上可以推导出来,不需要记录,但你至少需要在第二张表中记录直接的友谊。
-
@ShWiVeL 所以在第二个表中,我需要双向记录吗? (即 1 是 2 的朋友,2 是 1 的朋友)。我在想类似的东西:ID FriendID 关系 1 2 朋友 2 1 朋友
-
两种方式都记录会更容易查询,但不是必须的。例如,如果您记录 1 和 2,但忽略 2 和 1,我将尝试将一些东西放在一起,以便您查询它。
标签: sql sql-server