Cómo implementar la función de mensaje en el sitio web

Tengo una mesa

____________________________________________________________
|                         Message                           |
|___________________________________________________________|
| Sender  |  Message    |    Receiver       |   message_id  |   
| John    | How Are You?|      Will         |       1       |
|_________|_____________|___________________|_______________|

En la computadora Will estoy mostrando lo siguiente

Message By:John
Message:How Are You?

Ahora supongamos que John eliminó este mensaje, pero no puedo eliminar el registro porque Will aún no lo ha eliminado. Por lo tanto, estoy ejecutando una consulta de actualización

Update Message Set Sender='' where message_id=1;

Pero después de hacer eso, el mensaje de la computadora cambiará de la siguiente manera

 Message By:                    //Because i have changed sender to null
    Message:How Are You?

Ahora, ¿cómo puedo superar este error de no obtener el resultado deseado?

preguntado el 12 de junio de 12 a las 14:06

Cuando John borró su mensaje, ¿por qué querías que Will fuera y lo borrara? Cuando envío un mensaje a Mr.X en Skype y elimino ese mensaje, también se elimina el mensaje de la ventana de Mr.X. -

Creo que puede estar usando "eliminado" para significar "cerrado" -

@Somebodyisintrouble: En Facebook, si el Sr. X envía un mensaje al Sr. Y y lo elimina, se elimina de ambos. -

@Somebodyisintrouble: déjame probar en Facebook... Quisiste decir mensaje... ¿verdad? no publicar... -

4 Respuestas

Solo mantén dos columnas más boolean is_deleted(true/false) and deleted_by(S/R) para mantener el estado del mensaje eliminado (verdadero o falso) y eliminado_por (Remitente o Receptor).

Respondido el 12 de junio de 12 a las 14:06

Una alternativa a las otras respuestas (que ambas definitivamente podrían funcionar) sería tener una tabla de "Bandeja de entrada" separada. Algo que simplemente vinculó qué mensajes aún estaban en la bandeja de entrada de quién, como:

__________________________
|        INBOX           |
|________________________|
| User    |  Message_id  |  
| John    |       1      | 
| Will    |       1      | 
|_________|______________|

Luego, cuando John elimina el mensaje, elimina esa fila de la tabla de la bandeja de entrada:

__________________________
|        INBOX           |
|________________________|
| User    |  Message_id  |  
| Will    |      1       | 
|_________|______________|

Esta forma también es buena porque separa los metadatos que componen un mensaje de la información sobre dónde se almacena, qué acciones han realizado las personas, etc.

Respondido el 12 de junio de 12 a las 15:06

¿Sabe que esto está causando redundancia de datos? - user1432124

y como sabre quien ha enviado y quien ha recibido - user1432124

@Somebodyisintrouble ¿Cómo introduce esto alguna redundancia? Y sabría quién envió y recibió de la tabla de mensajes en la pregunta del OP. Te daré que podrías argumentar que es excesivo en el caso más simple, pero también es el más limpio/más normalizado. - viento

oh, este mensaje es una identificación y creo que la columna del mensaje en la tabla de su bandeja de entrada es un mensaje - usuario1432124

@Somebodyisintrouble Oh, sí, esta es solo la identificación. Editaré la respuesta para que sea más clara =) - viento

Agregue columnas booleanas separadas ReadBySender y ReadByReciever y actualícelas en lugar del remitente/receptor real

Respondido el 12 de junio de 12 a las 14:06

Actualmente estoy haciendo lo mismo, ¿así que no hay otra manera aquí que esta? - usuario1432124

¿Cuál es el problema con esta solución? - jason coyne

No quiero adjuntar dos columnas adicionales a esta tabla: usuario1432124

Puede mantener los recibos de lectura en una tabla completamente separada, pero eso es incluso más general que esta solución. En general, no debe intentar obtener más de una funcionalidad de una sola columna. Conduce a errores y código difícil de entender. - jason coyne

Por supuesto, hay otras soluciones que no dependen en absoluto de las bases de datos para enviar mensajes, pero supongo que ese puente ya se ha cruzado. jason coyne

Simplemente incluya dos columnas más (enumeración) para indicar quién ya borró el mensaje.

Luego, para mostrar el mensaje, asegúrese de que en su WHERE cláusula, que el valor respectivo no está ya fijado.

En todo caso conservar la Sender y Receiver columnas, para que pueda generar toda la información del mensaje y adjuntar el mensaje a los usuarios correctos.

Respondido el 12 de junio de 12 a las 14:06

Actualmente estoy haciendo lo mismo, ¿así que no hay otra manera aquí que esta? - usuario1432124

@Somebodyisintrouble No veo ninguna otra forma factible. - Sirko

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.