Projeto pergunta: Como você projetar um sistema de mensagens / caixa de entrada?
-
02-07-2019 - |
Pergunta
Muitos sites têm o conceito de envio de mensagens de usuário para usuário. Quando você envia uma mensagem para outro usuário, a mensagem iria aparecer na sua caixa de entrada. Você pode responder à mensagem, e ele iria mostrar-se como uma nova entrada nesse segmento de mensagem.
Você deve ser capaz de ver se você leu uma determinada mensagem já, e as mensagens que tenho uma nova resposta deve ser capaz de estar no topo.
Como você projetar as classes (ou tabelas ou qualquer outro) para apoiar um tal sistema?
Solução
user
id
name
messages
id
to_user_id
from_user_id
title
date
message_post
id
message_id
user_id
message
date
aulas iria reflectir este tipo de esquema
Outras dicas
Você pode querer estender o esquema de Owen para mensagens em massa de apoio onde a mensagem é armazenado apenas uma vez. Também modificado por isso há apenas um remetente, e muitos receptores (nunca há mais de um remetente neste esquema)
user id name message id recipient_id content_id date_time_sent date_time_read response_to_message_id (refers to the email this one is in response to - threading) expires importance flags (read, read reply, etc) content id message_id sender_id title message
Existem muitas, muitas outras características que poderiam ser adicionados, é claro, mas a maioria das pessoas acha que as anteriores características quando eles pensam "email".
-Adam
É uma estrutura de tabela bastante simples. Um de / para, assunto e, em seguida, a mensagem. Agora o importante é os campos de data. O DateSent diz quando foi enviada, o DateRead diz que a mensagem foi lida, eo DateDeletedTo diz que o usuário apagou, eo DateDeletedFROM diz que o DE usuário excluído que (estes são exclusões lógicas para este exemplo).
tblMessage
ID BIGINT
ToUserID GUID/BIGINT
FromUserID GUID/BIGINT
Subject NVARCHAR(150)
Message NVARCHAR(Max)
DateDeletedFrom DATETIME
DateDeletedTo DATETIME
DateSent DATETIME
DateRead DATETIME
Na verdade, estou fazendo isso como parte de um desenvolvimento interno no trabalho. Faça uma tabela chamada [mensagens] e dar-lhe as seguintes colunas.
- MID (mensagem de ID)
- FROM_USER
- to_user
- mensagem
- tempo
- TID (ID da thread)
- ler (a boolean)
Algo assim deve funcionar para o design da tabela. As classes depender de qual sistema você está projetando-lo.
Table Message:
id INTEGER
recipient_id INTEGER -- FK to users table
sender_id INTEGER -- ditto
subject VARCHAR
body TEXT
Table Thread
parent_id -- FK to message table
child_id -- FK to message table
Em seguida, você poderia simplesmente ir através da tabela de Tópico para obter um fio de mensagens.