当前位置: 首页 > 面试题库 >

MySQL好友表

云建木
2023-03-14
问题内容

我有一个MySQL数据库,其中存储了每个用户的数据。

我想为每个用户添加一个朋友列表。我应该为数据库中的每个用户创建一个朋友表还是有更好的方法?


问题答案:

假设所有朋友也都在用户表中,则需要一个朋友表,该表定义了简单的一对多关系-将用户表链接回自身。所以

User Table
UserID int identity not null
[other attribute fields]

Friends Table
UserIDLink1 int
UserIDLink2 int 
[other attribute field]

其中UserIDLink1和UserIDLink2都是Users表上的外键。

例如,如果我有三个用户

1 Joe
2 Bill
3 Jane

并且Joe和Jane是朋友,那么Friends表将只包含一行

1 3

上面的内容隐含地假设,如果A是B的朋友,那么B是A的朋友-
如果不是这种情况,您可能希望将UserIDLink1和UserIDLink2重命名为UserID和FriendID或类似的名称-
在这种情况下,也有两倍的记录。

同样对于双向配置(如果B是A的朋友,则A是B的朋友),还应在Friends表上为(UserIDLink1,UserIDLink2)和(UserIDLink2,UserIDLink1)设置索引,以确保在以下情况下访问始终有效我们正在搜索joe的朋友或jane的朋友(如果您未设置第二个索引,则第一个查询将是有效的索引查找,但第二个查询将需要全表扫描)。

如果您的链接不是双向的,则不必找出A的朋友,但您仍然可能最需要它,因为您可能还需要找出B的朋友。



 类似资料:
  • 问题内容: 我有两张桌子 用户表: user_relationships 并希望获得2个用户的共同朋友的名字。即: 用户1和2有共同的朋友3。我想在一个查询中得到他的名字“ sammy”。 我怎么做? 问题答案: 或一次连接:

  • 主要内容:使用传递元素,使用传递属性JavaServer Faces支持HTML5,允许您直接在网页中使用HTML5标记。 它还允许您在HTML5元素中使用JavaServer Faces属性。 JavaServer Faces支持HTML5分为两类: 直通元素 传递属性 HTML5友好的标记功能可通过渲染的页面输出完成对Facelets页面的控制,而不必将该控件传递给组件。 您可以混合和匹配JavaServer Faces和HTM

  • 我在尝试hadoop(Java版本)中的mapreduce程序,从json文件中查找共同的朋友列表。json文件内容具有以下模式: 模式解释如下: friend json选项卡,由相关friends json的数组分隔 因此abc将xyz、def和cxf作为朋友cxf将xyz abc和yyy作为朋友。 综上所述,abc和cxf的共同好友是xyz。 尝试通过创建自定义可写文件来实现相同的使用mapd

  • 有没有一种方法可以像这样在liferay中创建/处理友好的URL? ... 其中John Doe是应显示其数据的客户的名称。 更详细一点: 我说的不是为了友好的url而放弃“web”或“group”,而是在第一个“/”之后有一个友好的url。 我们希望以http://server/ClientName其中ClientName解析为客户端的名称。这是一个问题,因为liferay通常希望在第一个“/”

  • 1.手机版 1)从“+”按钮添加:右上角“+” -添加好友 2)从好友列表添加:通讯录-我的好友-添加好友 3)从好友详情添加:点击成员头像-查看成员详情-加好友 2.电脑版 1)从“+”按钮添加:右上角“+” -添加好友 2)从成员详情添加:点击成员头像-查看成员详情-加为好友

  • 1.手机版 解除方法:点击成员头像-查看成员详情-右上角菜单-解除好友 2.电脑版 解除方法:点击成员头像-查看成员详情-解除好友