디자인 질문 : 어떻게 메시징 /받은 편지함 시스템을 디자인하겠습니까?


2

많은 웹 사이트에는 사용자로부터 사용자에게 메시지를 보내는 개념이 있습니다. 다른 사용자에게 메시지를 보내면 해당 메시지가받은 편지함에 표시됩니다. 메시지에 응답 할 수 있으며 해당 메시지 스레드에 새 항목으로 표시됩니다.

이미 지정된 메시지를 읽었는지 확인할 수 있어야하며 새 응답이있는 메시지가 맨 위에 있어야합니다.

이러한 시스템을 지원하기 위해 클래스 (또는 테이블 등)를 어떻게 설계 하시겠습니까?

  0

이것은 너무 모호합니다. 당신은 수십개의 유효한 답변으로 각각의 찬반론과 반대 의견에 대해 별도의 논의가 필요합니다. 흥미로운 질문이지만 StackOverflow는 이런 종류의 토론을 위해 만들어지지 않았습니다. 23 sep. 082008-09-23 20:55:27

1
user 
id 
name 

messages 
id 
to_user_id 
from_user_id 
title 
date 

message_post 
id 
message_id 
user_id 
message 
date 

클래스는 스키마


0

그것은 오히려 간단한 테이블 구조의 이러한 종류의를 반영하는 것이다. to to/from, subject 그리고 나서 메시지. 중요한 것은 날짜 필드입니다. DateSent는 보낸 날짜를 알려주고 DateRead는 메시지를 읽었 음을 알리고 DateDeletedTo는 TO 사용자가 메시지를 삭제했다는 사실을 알리고 DateDeletedFROM은 FROM 사용자가 삭제했다고 알립니다 (이 예에서는 논리적으로 삭제됩니다).

tblMessage 
ID BIGINT 
ToUserID GUID/BIGINT 
FromUserID GUID/BIGINT 
Subject NVARCHAR(150) 
Message NVARCHAR(Max) 
DateDeletedFrom DATETIME 
DateDeletedTo DATETIME 
DateSent DATETIME 
DateRead DATETIME 

0

저는 실제로 직장에서 내부 개발의 일환으로이 작업을 수행하고 있습니다. [Messages]라는 테이블을 만들고 다음 열을 지정하십시오.

  • MID (메시지 ID)
  • FROM_USER
  • to_user
  • 메시지
  • 시간
  • TID (쓰레드 ID)
  • 리드 (부울)

뭔가 테이블 디자인을 위해 작동해야합니다. 클래스는 디자인 할 시스템에 따라 다릅니다.


0
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 

그런 다음 스레드 테이블을 통해 메시지 스레드를 얻을 수 있습니다.


1

메시지가 한 번만 저장된 대량 메시지를 지원하도록 Owen의 스키마를 확장 할 수 있습니다. 하나 개의 보낸 사람, (이 계획에 하나 이상의 송신자가 결코) 많은 수신기가 그래서 또한 수정

 
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 

이 물론, 추가 할 수있는 많은 다른 많은 기능이 있지만, 대부분의 사람들이 생각 그들이 "이메일"을 생각할 때 위의 기능.

-adam