2016-08-14 64 views
5

我想創建一個存儲郵件的簡單郵件應用程序(類似於電子郵件,但只是簡單的消息)。我應該如何設計數據庫?在SQL數據庫中存儲電子郵件

Users

  • 用戶名(主鍵)
  • 的userPassword

E-mails

  • EMAILID(主密鑰)
  • 從(外鍵用戶)
  • 所有者(外鍵,用戶)
  • 主題
  • 時間
  • 電子郵件內容
  • 電子郵件佈局(可能內容和佈局在一個領域? XAML)

既然電子郵件可以發送給多個人,那麼存儲到列的最佳方式是什麼?我應該簡單地把它作爲一個字符串,用逗號分開,然後用我的代碼中的函數檢索所有用戶?或者有更好的方法去解決這個問題嗎?

+0

如果所有收件人都位於模型中(因此將郵件發送到外部),則應將其存儲爲參考表格,而不是放在郵件表格內。這樣你可以解析條目並且所有的地址都是最新的。 – arkascha

+3

而一般而言,只是爲了確保您記住:您應該在數據庫中不存儲用戶密碼。 – arkascha

+0

@arkascha我應該存儲在數據庫中的密碼,因爲哈希不幸。 – user3117628

回答

5

表用戶

  • 用戶名(主鍵)

  • 的userPassword

表電子郵件

  • EMAILID(主鍵)

  • 由(外鍵,用戶)

  • 主題

  • 時間

  • 電子郵件內容

  • 電子郵件佈局(可能內容和在一個領域的佈局?XAML)

表Email_Recipients

  • 收件人ID(主鍵)

  • RecipientUserID(從用戶表的外鍵)

  • EMAILID(從電子郵件外鍵表)

  • RecipientType //類型可以是實際,CC,BCC

另一個表可以的EmailRecipientTypes

創建像 表EmailRecipientTypes

  • TYPEID(主鍵)
  • TypeName //可以是實際,CC或BCC

通過這種方式,你可以修改表Email_Recipients作爲

表Email_Recipients

  • 收件人ID(主鍵)
  • RecipientUserID(從用戶表的外鍵)
  • EmailID(來自電子郵件表的外鍵)
  • RecipientTypeID(外鍵fr OM表EmailRecipientTypes)

儘管第四表將只包含3條記錄,但它會在數據複製減少幫助,並會幫助你在你想要一些要求的方式分組電子郵件(它的一個也許)

+0

謝謝,很好的答案! – user3117628

+0

不客氣:)高興地幫助:) –

6

表用戶

  • 用戶ID
  • 用戶名
  • 密碼

表電子郵件

  • EMAILID
  • 由(外鍵。用戶ID)
  • 所有者(外鍵,用戶ID)
  • 主題
  • EmailContent
  • EmailLayout
  • 時間

表收件人

  • 編號
  • 電子郵件(外鍵EmailId)
  • 要(外鍵,用戶ID)

所以電子郵件的收件人鏈接到電子郵件作爲一個多對一映射。

這樣,您就可以通過適當的EmailId

選擇在Recipients表中的所有行選擇一個電子郵件的所有收件人例如電子郵件發送至2個用戶將有行(作爲一個例子)

--------------------------- 
| Id | Email | To  | 
--------------------------- 
| 1 | 1  | 3 (User1) | 
--------------------------- 
| 2 | 1  | 4 (User2) | 

Is storing a delimited list in a database column really that bad?給出一個很好的例子,說明爲什麼在數據庫表中使用逗號分隔值是不好的做法。

相關問題