Tôi muốn tạo một hệ thống nhắn tin web như facebook. Tôi đã nghĩ về nhiều thay thế cho cấu trúc cơ sở dữ liệu, nhưng không chắc chắn đó là thực hành tốt nhất cho nó. Tôi có hai lựa chọn ở đây, đầu tiên là sử dụng hai bảng, thứ hai là sử dụng ba bảng nhưng thực hiện một chu kỳ trong ERD.Cấu trúc cơ sở dữ liệu cho Hệ thống nhắn tin Web
đầu tiên: Hai Bảng, nơi bảng tin tham khảo bản thân
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
Thứ hai: Ba Bảng, nhưng làm cho một chu kỳ trong 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
Cá nhân, tôi thích cấu trúc này, bởi vì nó chỉ sử dụng một tiêu đề thư và nhiều thư (nội dung). Bản thân author_id không thể bị xóa vì tôi cần nó để biết liệu thông báo có ở bên trái (với tư cách người gửi) hay bên phải (là người nhận). Hệ thống này chỉ dành cho hệ thống nhắn tin hai người.
Về cơ bản, hai bảng này giống nhau, nhưng đó là phương pháp hay nhất để triển khai hệ thống nhắn tin này? Cảm ơn bạn trước.
thông điệp nên được xích theo lệnh của trả lời một tin nhắn nào đó hoặc họ phải được liệt kê theo timestamp – aeonsleo
Sử dụng để trả lời (id cao đầu tiên) có thể là một chút rẻ hơn, nhưng bạn có thể xem xét việc đặt dấu thời gian (tất nhiên, với một chỉ số thích hợp) thân thiện hơn trong trường hợp, giả sử ai đó trả lời mà không cần internet và phải mất một thời gian để gửi thư đến cơ sở dữ liệu một cách hiệu quả. Điều đó nói rằng, bạn quyết định:> –
Việc sử dụng thuộc tính "is_from_sender" là gì? –