Cita: El problema es que una vez filtre los movimientos que le atañan a un usuario para cada una de esas filas devueltas deberé hacer una nueva consulta o dos para sacar los nombres de las cosas. Es decir que como dependiendo de cada accion las cosas que tiene que hacer son muy diferentes parece que es la unica forma.
Mi duda es: ¿Seria mejor guardar en esa tabla los movimientos de todos? o es mejor para cada usuario crear una tabla de movimientos unica solo con sus movimientos?
Hay muchas cosas a considerar si lo que realmente quieres hacer es una
social network, pero por principio, si lo que vas a diseñar es el
sistema que lo gestiona, no te tienes que perder de entrada en las minucias. Te estás planteando cómo lograr programar los procesos, cuando todavía no sabes qué procesos tienes que hacer...
Trata de alejarte un poco, toma una pizarra o lo que quieras, y bosqueja en un diagrama lo que esa SN tiene que mostrar y qué es lo que los usuarios deben poder hacer. Los procesos vienen después y el diseño de la base de datos viene después incluso de los procesos.
No puedes diseñar una base sin saber qué tipo de información (contenida en los procesos de los usuarios) va a contener, simplemente porque aún no has determinado que
entidades participan del modelo.
Incluso, si lo que quieres es un esquema previo de cómo trabajan, para poder
inspirarte y que te sirva de guía, en en cuenta que el esquema general de una SN ya está creado, no es necesario que inventes nada, simplemente que te documentes.
Un modelado general de una SN sería:
Este tipo de modelo es el que usan Bebo, BlackPlanet,
FaceBook, Friendster, Google's OpenSocial,
Orkut, iGoogle,
LinkedIn, Live Spaces,
MySpace, Slide,
Twitter, TwitterVision y otros.
Documentación sobre el tema la puedes encontrar en
Library of Free Data Models Cita: Por otro lado, y para evitar hacer todas esas consultas cada vez, se me habia ocurrido crear un xml con una estructura similar a la tabla pero ya con los nombres y todo puesto para luego solo parsearlo. El problema es que si yo hago un movimiento que hay 100 amigos que deben enterarse tendré que actualizar 1000 ficheros de golpe, haciendo que tarde mucho, mientras que de la forma de las consultas a cada usuario le tardará un poco solo.
No se, estoy bastante perdido y liado en este asunto por que alucino lo rapido que lo hace facebook con tantas cosas diferentes que tiene, y cuando yo tenga en una tabla 100,000 o 1,000,000 de registros va a ser eso eternamente lento.
Un consejo que si puedo darte es que no tienes que ponerte a pensar como "ahorrar" codificación, desarrollo, consultas, procesos. No hay en este tipo de proyectos cosas que pudeas "ahorrarte", son demasiado grandes y complejos como para plantearte atajos. Es mejor ser más ortodoxo, hacer las cosas de manual y no encontrarte que luego lo que tienes es insuficiente y tener que empezar a parchar lo que ya está siendo usado...
Buena suerte con el proyecto...