sql >> Base de Datos >  >> RDS >> Mysql

Tabla de amigos de MySQL

Suponiendo que todos sus amigos también están en la tabla de usuarios, necesitará una tabla de amigos que defina una relación simple de uno a muchos, vinculando la tabla de usuarios a sí misma. Entonces

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

Friends Table
UserIDLink1 int
UserIDLink2 int 
[other attribute field]

Donde tanto UserIDLink1 como UserIDLink2 son claves foráneas en la tabla Usuarios.

Entonces, por ejemplo, si tengo tres usuarios

1 Joe
2 Bill
3 Jane

y Joe y Jane son amigos, la tabla Amigos contendría una sola fila

1 3

Lo anterior asume implícitamente que si A es amigo de B, entonces B es amigo de A; si este no es el caso, probablemente desee cambiar el nombre de UserIDLink1 y UserIDLink2 a UserID y FriendID o similar, en cuyo caso tener hasta el doble de registros también.

También para la configuración bidireccional (A es amigo de B si B es amigo de A) debe configurar índices en la tabla Amigos para (UserIDLink1,UserIDLink2) y (UserIDLink2,UserIDLink1) para garantizar que el acceso sea siempre eficiente si buscábamos amigos de joe o amigos de jane (si no configuró el segundo índice, la primera consulta sería una búsqueda de índice eficiente, pero la segunda requeriría una exploración completa de la tabla).

Si sus enlaces no fueran bidireccionales, esto no sería necesario para averiguar quiénes son los amigos de A, pero probablemente lo necesite, ya que probablemente también necesite averiguar quién es amigo de B.