2017-07-29 28 views
1

我目前正在嘗試創建一個電子郵件樣式的Web應用程序,以允許我的網站用戶彼此聯繫。我創造了這個SQL表,它具有以下標題:爲消息傳遞/電子郵件應用程序設置數據庫的最佳方式是什麼?

  • ID
  • senderID
  • recipientID
  • 時間戳
  • 消息
  • 讀(布爾錄製的消息是否已經被由收件人讀取)
  • starred(布爾值來記錄消息是否已被收件人加註)
  • 存檔(布爾記錄是否消息已被收件人存檔)
  • 刪除(布爾記錄是否消息已被接收方刪除)
  • convoID

我已經開始到現在意識到,這表是不夠的。例如,如果會話已由用戶加星標,則不會告訴我哪兩個用戶中的哪一個已經出演了該convo等。

任何人都可以提出一種避免上述問題的方法,並且可能會提出更好的建議數據庫結構?

回答

1

我會建議你的表分割成兩個讀,我們姑且稱之爲「消息」和「明星」。所以,它們是:

message 
------- 
id 
sender_id 
recipient_id 
timestamp 
read 
archived 
deleted 
convo_id 
parent_id 

star 
---- 
message_id 
user_id 
timestamp 

正如你所看到的,我在消息中添加了parent_id。如果你不需要分層結構 - 你可以踢這個專欄。星表可以增強主演功能。誰知道,也許將來所有的用戶可能會放一個明星,而不僅僅是參與者的談話。

另外,還有一篇關於數據庫正常化的好文章。這將真正幫助你建立良好的組織結構DB: What is Normalisation (or Normalization)? http://www.studytonight.com/dbms/database-normalization.php http://searchsqlserver.techtarget.com/definition/normalization

0

取決於您的應用程序以及您將擁有多少用戶。 關於已加星標,存檔和其他用戶都可以做的事情,您可以使用enumeration或簡單的兩個值。不只是一個布爾值。 或者可以拆分每一個senderReadrecipentRead

相關問題