반응형
페이스 북과 같은 웹 메시징 시스템을 만들고 싶습니다. 나는 이미 데이터베이스 구조에 대한 많은 대안을 생각했지만 어떤 것이 가장 좋은 방법인지 확실하지 않습니다. 여기에 두 가지 대안이 있습니다. 첫 번째는 두 개의 테이블을 사용하고 두 번째는 세 개의 테이블을 사용하지만 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
반응형
'MySql' 카테고리의 다른 글
MySQL 경고 : BINLOG_FORMAT = STATEMENT이므로 문 형식을 사용하여 바이너리 로그에 기록 된 안전하지 않은 문 (0) | 2020.12.30 |
---|---|
MySQL Workbench 다크 테마 (0) | 2020.12.30 |
MySQL MAMP에서 대용량 데이터베이스를 내보내거나 가져 오는 방법 (0) | 2020.12.30 |
MySQL How to group by week in MySQL? (0) | 2020.12.30 |
MySQL mysqli :: fetch_object ()를 사용하는 방법? (0) | 2020.12.30 |
댓글