본문 바로가기
MySql

MySQL Database Structure for Web Messaging System

by 베이스 공부 2020. 12. 30.
반응형

페이스 북과 같은 웹 메시징 시스템을 만들고 싶습니다. 나는 이미 데이터베이스 구조에 대한 많은 대안을 생각했지만 어떤 것이 가장 좋은 방법인지 확실하지 않습니다. 여기에 두 가지 대안이 있습니다. 첫 번째는 두 개의 테이블을 사용하고 두 번째는 세 개의 테이블을 사용하지만 ERD에서주기를 만듭니다.

첫째 : 메시지 테이블이 자신을 참조하는 두 개의 테이블

user
----------
id
name

message
--------------
id
from_id
to_id
message_id --> refer to this table itself, to make me know which message is the topic
subject
content
time
status --> inbox, outbox, archive
read --> read, unread

두 번째 : 3 개의 테이블, 그러나 erd에서주기를 만드십시오

user
----------
id
name

message_header
--------------
id
from_id
to_id
subject
status --> inbox, outbox, archive
time

message
--------
id
message_header_id
content
time
read --> read, unread
author_id

개인적으로이 구조는 하나의 메시지 헤더와 많은 메시지 (콘텐츠) 만 사용하기 때문에이 구조가 마음에 듭니다. author_id 자체는 메시지가 왼쪽 (발신자)인지 오른쪽 (수신자)인지 알기 위해 필요하기 때문에 제거 할 수 없습니다. 이 시스템은 2 인용 메시징 시스템입니다.

기본적으로이 두 테이블은 동일하지만이 메시징 시스템을 구현하는 가장 좋은 방법은 무엇입니까? 전에 감사합니다.

 

해결 방법

 

어려운 방법을 배운 후 (몇몇 전, 최종 프로젝트에서 ...) 가능할 때마다 물건을 분리하고 정리하도록 조언 할 수 있습니다. 자기 관계는 가능하면 가까이 있지 않는 것이 좋습니다 (드문 예외가 있습니다). 처음에 클래스를 디자인하십시오. 그런 다음 상황이 잘 맞는 데이터베이스를 구축하되 상황을 단순하게 유지하십시오. 내 취향은 ... 말보다 더 잘 그려져

다이어그램


SELECT
  h.id AS `header_id`, h.`subject`, h.`status`,
  m.id AS `message_id`, m.content, m.`time`,
  IF(m.is_from_sender, x.`name`, y.`name`) AS `written_by`
FROM (SELECT * FROM header WHERE id = @VAR) h
  INNER JOIN message m ON (h.id = m.header_id)
  INNER JOIN user x    ON (h.from_id = x.id)
  INNER JOIN user y    ON (h.to_id = y.id);

문안 인사,

레오나르도

 

참조 페이지 https://stackoverflow.com/questions/17341686

 

 

반응형

댓글