Database design 朋友系统的许多表,任一列中的id,最佳模式

Database design 朋友系统的许多表,任一列中的id,最佳模式,database-design,relational-database,Database Design,Relational Database,假设你有一个像facebook这样的朋友系统 您有一个m2m表,其中包含连接所在的两个人的id 目前,我们从任一方向记录记录。这意味着id可以在任一列中。因此,当我们进行选择时,我们必须在任一列中搜索id 我们可以在选择之后,通过测试登录的用户ID对其进行排序,但我想知道是否有更好的方法来实现这一点您会发现,使用UNION时性能最好: 并确保在关联表中的两个id列上都有索引。目前,我们从任一方向记录记录。-这是否意味着你总是双向存储?或者你只存储一个方向,而不考虑哪个用户ID在第一个字段中,哪个

假设你有一个像facebook这样的朋友系统

您有一个m2m表,其中包含连接所在的两个人的id

目前,我们从任一方向记录记录。这意味着id可以在任一列中。因此,当我们进行选择时,我们必须在任一列中搜索id


我们可以在选择之后,通过测试登录的用户ID对其进行排序,但我想知道是否有更好的方法来实现这一点

您会发现,使用UNION时性能最好:


并确保在关联表中的两个id列上都有索引。

目前,我们从任一方向记录记录。-这是否意味着你总是双向存储?或者你只存储一个方向,而不考虑哪个用户ID在第一个字段中,哪个在第二个字段中?是的,我们只存储一个方向,然后在选择后进行排序。你如何强制你不存储相反的方向?你有没有这样的东西:CHECKFRIEND1\u IDselect user_id1 as friend_id from friends where user_id2 = ? union select user_id2 from friends where user_id1 = ?