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

Muchos a muchos en la misma tabla

Si la relación que está describiendo es simétrica, como "Bob es amigo de Joe" significa "Joe también es amigo de Bob", entonces puede asegurarse en su código de que el ID de usuario más pequeño de los 2 va en el primera columna, y el más grande va en la segunda columna. Esta restricción prácticamente asegura que los registros en su tabla de búsqueda serán únicos. También significa que cuando realiza una búsqueda, normalmente tiene que buscar en ambas columnas.

Por ejemplo, si estuviera tratando de obtener a todos los amigos de Bob, tendría que consultar los registros que tienen la ID de Bob en cualquiera de las columnas. Esto conduce a un poco más de código y posiblemente a un impacto en el rendimiento.

Si la relación puede ser asimétrica, como "Bob es amigo de Joe" no necesariamente significa "Joe también es amigo de Bob", entonces necesita 2 entradas para cada par de usuarios:Bob - Joe y Joe - Bob. Esto significa que su tabla de búsqueda contendrá el doble de entradas y también que su sitio es muy amigable para los acosadores :D Por supuesto, aún puede optar por aplicar este sistema aunque su relación sea simétrica.

Con este método, si desea obtener todos los amigos de Bob, solo tiene que seleccionar los registros con la ID de Bob en la primera columna. Es posible que esto signifique búsquedas más rápidas y menos código para escribir, pero nuevamente, significa que está ocupando más espacio en su base de datos.