Quiero diseñar una mesa para almacenar la relación de amistad en mi proyecto web
Debe cumplir al menos las siguientes 4 condiciones:
quién envía la solicitud de agregar amigo, por ejemplo (si A A B, entonces esta columna será A)
quien recibe la solicitud de agregar amigo, por ejemplo (si A TO B, entonces esta columna será B)
estado actual, por ejemplo (0 denota rechazado mientras que 1 denota aceptado o 2 denota no procesado
nuestra relación de amistad es bilateral
Si alguno de ustedes tiene experiencia con esto, cualquier sugerencia es bienvenida
mi diseño actual (creo que está mal ahora) es así, estas son las columnas
frienshipId
fromUserId
toUserId
status
requestTime
database-design
Hola 福气 鱼
fuente
fuente
Respuestas:
Crearía una tabla muy parecida a la que tienes. Estoy usando los tipos de datos y la sintaxis de SQL Server, es posible que deba ajustarlos según su plataforma.
La indexación de la tabla será crítica a medida que la tabla crezca a decenas y cientos de millones.
fuente
En PostgreSQL:
Para enumerar amistades, una vista:
Puedes usarlo así:
fuente
¿Qué te hace pensar que tu diseño actual es malo? Aquí hay una tabla de creación para Oracle:
Si la base de datos es Oracle, es posible que desee considerar una columna virtual indexada que limitará los datos a las entradas necesarias para consultas particulares. Por ejemplo, podría tener una columna virtual llamada AcceptedFromUserId que usa la función DECODE (StatusId, 1, FromUserId, NULL). El índice solo contendría AcceptedUserIds y, por lo tanto, sería más pequeño que un índice para todos los UserIds. Si limpia regularmente las solicitudes rechazadas, una columna virtual indexada en PendingToUserId podría ser más útil.
Una alternativa si tuviera particiones sería particionar la tabla en el StatusId.
Si no necesita múltiples solicitudes de amistad entre los mismos usuarios al mismo tiempo, puede abandonar FriendId usando FromUserId, ToUserId y StatusId como su clave principal. En este caso, también debe considerar hacer de la tabla una Tabla organizada de índice.
fuente
Esquema:
De PHP:
fuente
friends
definición de la tabla es sospechosa de error de sintaxis)