Pregunta

Estoy planeando hacer un sistema PM para mis usuarios, en general parece bastante fácil, pero la forma en que he visto tutoriales que fabrican sistemas PM, hay un problema.

En la forma en que lo planeé funcionar, habría filas como user_from, user_to y luego el mensaje - user_from sería el remitente, y verá el mensaje en sus mensajes de envío, user_to será el receptor y verá el mensaje en Su bandeja de entrada. Pero, ¿qué pasa si un usuario quiere eliminar un mensaje de su carpeta enviada, pero el otro usuario no quiere eliminarlo de su bandeja de entrada?

¿Hay alguna forma simple de hacer esto?

También podría ser bueno tener los mensajes en conversaciones, como Gmail y Facebook, pero ¿es tal vez difícil de codificar (se aprecia los tutoriales)?

¿Fue útil?

Solución

Puede solucionar el problema de algunas maneras, pero probablemente agregaría un par de banderas (de_deleted, to_deleted) a la tabla:

  • En lugar de eliminar el mensaje, actualice el indicador apropiado a 1.
  • Al enumerar los mensajes, filtre los que han sido marcados.
  • Puede configurar el script para que después de marcar, si ambos campos se marcan, entonces puede Eliminar La fila.

Otros consejos

Use lo que se llama un eliminación suave. Esto significa que cuando un registro se 'elimina', en realidad nunca se elimina de la base de datos, sino que se establece un indicador para eliminar, lo que le permite eliminarlo de una interfaz de usuario mientras aún tiene acceso a los datos cuando lo necesita. Entonces, para esta situación, podría crear dos columnas más llamadas user_to_delete y user_from_delete. Cuando cualquiera de estos esté configurado en verdadero, sabrá que no mostrará el mensaje en la bandeja/bandeja de entrada del usuario respectivo. Buena suerte.

Sugiero el siguiente diseño de base de datos:

MESSAGES
+----------+------------------+---------------------------+
|    id    |    subject_id    |    body                   |
+----------+------------------+---------------------------+

SUBJECTS
+----------+-------------+--------------+-----------------+
|    id    |    title    |    author    |    receivers    |
+----------+-------------+--------------+-----------------+

INBOX
+----------+---------------+--------------+---------------+
|    id    |    user_id    |    msg_id    |    read       |
+----------+---------------+--------------+---------------+

OUTBOX
+----------+---------------+------------------------------+
|    id    |    user_id    |    subject_id                |
+----------+---------------+------------------------------+

Cuando envía mensajes, crea una nueva fila para todos los receptores en la tabla de bandeja de entrada y en la tabla de salida de la caja de salida para el remitente. En la tabla de mensajes, inserta una fila con la ID del sujeto y el cuerpo del mensaje. En la tabla de temas, inserta una fila con el título, el autor y todos los receptores (si el remitente inició una nueva asignatura o reenvió una conversación completa o un solo mensaje, de lo contrario, agregue el mensaje en la tabla de mensajes utilizando la ID de sujeto existente) para que esto La información se mantiene incluso si uno de los receptores elimina un mensaje de su bandeja de entrada (en este caso, elimina la fila en la tabla de entrada).

Para la bandeja de salida no hay necesidad de un indicador de 'leer' y observe que solo se usa la identificación del sujeto.

Otro enfoque sería agregar dos columnas que determinarán si el propietario o el destinatario han solicitado eliminar (ocultar) el mensaje.

owner_id | user_from | user_to | mailbox_folder | Message | Owner_hide | Recipient_hide
1          1           2         Sent             Hi         1           0

Sí, ¡hay una forma simple de hacerlo! Tener dos columnas más, respectivamente sender_deleted y receiver_deleted. Si uno de ellos "elimina" el mensaje, actualizó la columna con un valor de 1. Por ejemplo. Cuando muestra los mensajes, selecciona los mensajes que se asegura de que el valor sea diferente a 1. etc ...

Simplemente crearía 2 filas y agregaría una columna. ejemplo:

owner_id | user_from | user_to | mailbox_folder | Message
1          1           2         Sent             Hi
2          1           2         Inbox            Hi

Otras columnas: una identificación de fila única, marcas de tiempo, línea de asunto, etc ...

Sus buzones se construirían a partir de la columna propietario_id, y cada usuario tiene su propia copia para moverse/eliminar según lo elija.

Para agregar conversaciones, puede agregar una columna u otra tabla. Si es un mensaje nuevo, obtenga una nueva identificación de conversación, de lo contrario, use la misma identificación. Consulta por marcas de tiempo.

Puede agregar un usuario_from_deleted & user_to_deleted filas y mostrar un mensaje solo si no se elimina.

Para mostrar los mensajes en las conversaciones, puede agregar un parent_id y mostrar todos los mensajes con el mismo parent_id

Un sistema PM es un poco más complejo que una mesa. ¿Qué pasa si PM más de una persona? En este caso, desearía varias tablas. Uno para usuarios, mensajes, etc. Los vincularía usando claves primarias y extranjeras.

Intente buscar bases de datos relacionales. Esto debería hacer que comiences:http://www.databasejournal.com/sqletc/article.php/1469521/introduction-to-relational-databases.htm

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top