我想制作一个像 facebook 这样的网络消息传递系统。我已经想到了数据库结构的许多替代方案,但不确定哪个是最佳实践。我这里有两个选择,第一个是使用两个表,第二个是使用三个表但在 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
二:三表,但在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 本身,因为我需要它知道消息是在左侧(作为发送者)还是在右侧(作为接收者)。该系统仅适用于两人消息系统。
基本上这两个表是相同的,但是实现这个消息传递系统的最佳实践是什么?之前谢谢你。